Article ID: 937889 - Last Review: June 1, 2009 - Revision: 2.1

FIX: A Windows Embedded CE 6.0-based device performs the read operation and the write operation very slowly

On This Page

Expand all | Collapse all

SYMPTOMS

A Windows Embedded CE 6.0-based device performs the read operation very slowly. Additionally, the Windows Embedded CE 6.0-based device performs the write operation very slowly. When this problem occurs, CPU utilization is very high.

This problem occurs if the following conditions are true:
  • The mass storage device uses the FAT file system.
  • Streaming-based video services are running.

RESOLUTION

Software update information

A supported software update is now available from Microsoft as Windows CE 6.0 Platform Builder Monthly Update (June 2007). You can confirm this by scrolling to the "File information" section of this article. The package file name contains the product version, date, Knowledge Base article number, and processor type. The package file name format is:
Product version-yymmdd-kbnnnnnn-processor type
For example: Wincepb50-060503-kb917590-armv4i.msi is the ARMV4i Windows CE 5.0 Platform Builder fix that is documented in KB article 917590 and that is contained in the May 2006 monthly update. To resolve this problem immediately, click the following article number for information about obtaining Windows CE Platform Builder and core operating system software updates:
837392  (http://support.microsoft.com/kb/837392/ ) How to locate core operating system fixes for Microsoft Windows CE Platform Builder products

Prerequisites

This update is supported only if all previously issued updates for this product are also installed.

Restart requirement

After you apply this update, you must perform a clean build of the whole platform. To clean the platform, click Clean on the Build menu. To build the platform, click Build Platform on the Build menu. You do not have to restart the computer after you apply this update.

Update replacement information

This update does not replace any other updates.

File information

The English version of this package has the file attributes (or later file attributes) that are listed in the following table.
Collapse this tableExpand this table
File nameFile sizeDateTime
Wincepb60-070625-kb937889-armv4i.msi1,723,90426-Jun-200720:35
Wincepb60-070625-kb937889-mipsii.msi1,677,82426-Jun-200720:35
Wincepb60-070625-kb937889-mipsii_fp.msi1,678,84826-Jun-200720:35
Wincepb60-070625-kb937889-mipsiv.msi1,692,16026-Jun-200720:35
Wincepb60-070625-kb937889-mipsiv_fp.msi1,692,67226-Jun-200720:35
Wincepb60-070625-kb937889-sh4.msi1,650,17626-Jun-200720:35
Wincepb60-070625-kb937889-x86.msi1,520,64026-Jun-200720:35
The English version of this update has the file attributes (or later file attributes) that are listed in the following table. The dates and times for these files are listed in Coordinated Universal Time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time item in Control Panel.
Collapse this tableExpand this table
File nameFile sizeDateTimePath
Disk.c73,39104-Jun-200719:08public\common\oak\drivers\usb\class\storage\disk\scsi2
Scsi2.c51,00304-Jun-200719:08public\common\oak\drivers\usb\class\storage\disk\scsi2
Cehcd.cpp7,97004-Jun-200719:08public\common\oak\drivers\usb\hcd\usb20\ehci
Chw.cpp75,27404-Jun-200719:08public\common\oak\drivers\usb\hcd\usb20\ehci
Chw.h22,85304-Jun-200719:08public\common\oak\drivers\usb\hcd\usb20\ehci
Ehcdmdd.lib812,52002-Jun-200704:26public\common\oak\lib\armv4i\debug
Ehci_lib.lib1,503,56802-Jun-200704:26public\common\oak\lib\armv4i\debug
Usbdisk6_lib.lib312,09202-Jun-200704:26public\common\oak\lib\armv4i\debug
Ehcdmdd.lib468,62002-Jun-200701:45public\common\oak\lib\armv4i\retail
Ehci_lib.lib757,51002-Jun-200701:45public\common\oak\lib\armv4i\retail
Usbdisk6_lib.lib107,19602-Jun-200701:45public\common\oak\lib\armv4i\retail
Ehcdmdd.lib786,20202-Jun-200709:49public\common\oak\lib\mipsii\debug
Ehci_lib.lib1,462,07802-Jun-200709:49public\common\oak\lib\mipsii\debug
Usbdisk6_lib.lib293,86602-Jun-200709:49public\common\oak\lib\mipsii\debug
Ehcdmdd.lib447,67202-Jun-200707:09public\common\oak\lib\mipsii\retail
Ehci_lib.lib737,75802-Jun-200707:09public\common\oak\lib\mipsii\retail
Usbdisk6_lib.lib105,82802-Jun-200707:09public\common\oak\lib\mipsii\retail
Ehcdmdd.lib786,26802-Jun-200715:11public\common\oak\lib\mipsii_fp\debug
Ehci_lib.lib1,462,20202-Jun-200715:11public\common\oak\lib\mipsii_fp\debug
Usbdisk6_lib.lib293,89402-Jun-200715:11public\common\oak\lib\mipsii_fp\debug
Ehcdmdd.lib447,72602-Jun-200712:30public\common\oak\lib\mipsii_fp\retail
Ehci_lib.lib737,87002-Jun-200712:30public\common\oak\lib\mipsii_fp\retail
Usbdisk6_lib.lib105,86202-Jun-200712:30public\common\oak\lib\mipsii_fp\retail
Ehcdmdd.lib792,37002-Jun-200720:37public\common\oak\lib\mipsiv\debug
Ehci_lib.lib1,473,51002-Jun-200720:37public\common\oak\lib\mipsiv\debug
Usbdisk6_lib.lib297,07802-Jun-200720:37public\common\oak\lib\mipsiv\debug
Ehcdmdd.lib451,04002-Jun-200717:55public\common\oak\lib\mipsiv\retail
Ehci_lib.lib744,67402-Jun-200717:55public\common\oak\lib\mipsiv\retail
Usbdisk6_lib.lib109,26402-Jun-200717:55public\common\oak\lib\mipsiv\retail
Ehcdmdd.lib792,43603-Jun-200701:59public\common\oak\lib\mipsiv_fp\debug
Ehci_lib.lib1,473,63403-Jun-200701:59public\common\oak\lib\mipsiv_fp\debug
Usbdisk6_lib.lib297,10603-Jun-200701:59public\common\oak\lib\mipsiv_fp\debug
Ehcdmdd.lib451,09402-Jun-200723:18public\common\oak\lib\mipsiv_fp\retail
Ehci_lib.lib744,78602-Jun-200723:18public\common\oak\lib\mipsiv_fp\retail
Usbdisk6_lib.lib109,29802-Jun-200723:18public\common\oak\lib\mipsiv_fp\retail
Ehcdmdd.lib699,15003-Jun-200707:17public\common\oak\lib\sh4\debug
Ehci_lib.lib1,290,79003-Jun-200707:17public\common\oak\lib\sh4\debug
Usbdisk6_lib.lib263,50803-Jun-200707:17public\common\oak\lib\sh4\debug
Ehcdmdd.lib413,72203-Jun-200704:40public\common\oak\lib\sh4\retail
Ehci_lib.lib680,79603-Jun-200704:40public\common\oak\lib\sh4\retail
Usbdisk6_lib.lib99,12003-Jun-200704:40public\common\oak\lib\sh4\retail
Ehcdmdd.lib648,34203-Jun-200712:08public\common\oak\lib\x86\debug
Ehci_lib.lib1,233,98803-Jun-200712:08public\common\oak\lib\x86\debug
Usbdisk6_lib.lib264,95403-Jun-200712:08public\common\oak\lib\x86\debug
Ehcdmdd.lib391,75403-Jun-200709:49public\common\oak\lib\x86\retail
Ehci_lib.lib650,77003-Jun-200709:49public\common\oak\lib\x86\retail
Usbdisk6_lib.lib97,95003-Jun-200709:49public\common\oak\lib\x86\retail

STATUS

Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the "Applies to" section.

MORE INFORMATION

After you apply the update, the EHCI interrupt threshold control value (see EHCI spec 2.3.1) in the USB host controller driver (Ehci.dll) can be set by the new registry DWORD entry named “IntThreshCtrl” under the following registry subkey:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\ehci]
“IntThreshCtrl”=dword:<value>
By default, this value is set to 8 micro-frames(1 ms). You can use some registry values to tune up USB mass storage read/write performance:
  1. Increase the EHCI interrupt rate by decreasing EHCI interrupt threshold control value with "IntThreshCtrl" from default 8 microframes to 1, 2, or 4 microframes according to your system considerations. With smaller EHCI interrupt threshold control value, the interrupt signaling the completion of a transfer will occur sooner and next transfer will be issued sooner.
    [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\ehci]
    "IntThreshCtrl"=dword:1; Default is 8
  2. Disable data cache for FAT or exFAT file system according to your system consideration. This can be achieved by either setting "EnableCache" to 0 to disable both data cache and FAT cache or by setting "DataCacheSize" to 2 to disable the data cache only. "DataCacheSize" has to be a power of two. When "DataCacheSize" is 0 or is not set, the system will determine the best value to use. When the data cache is disabled, data copy operations to cache buffer are removed or reduced and data throughput are improved.
    [HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
    "EnableCache"=dword:0

    [HKEY_LOCAL_MACHINE\System\StorageManager\EXFATFS]
    "EnableCache"=dword:0
    Or, disable datacache by using "DataCacheSize" to two sectors.
    [HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
    "EnableCache"=dword:1
    "DataCacheSize"=dword:2

    [HKEY_LOCAL_MACHINE\System\StorageManager\EXFATFS]
    "EnableCache"=dword:1
    "DataCacheSize"=dword:2
  3. Increase the transfer buffer size by using "PacketsPerTransfer" from default 0x20 to 0x40 or 0x80 according to your system considerations. "PacketsPerTransfer" is used by the class driver Usbmsc.dll to calculate DMA buffer size by multiplying this value with maximum packet size. Larger DMA buffer size results in less CPU usage from less memory and better data throughput.
    [HKEY_LOCAL_MACHINE\Drivers\USB\ClientDrivers\Mass_Storage_Class]
    "PacketsPerTransfer"=dword:80; Default is 0x20 packets per transfer
For more information about software update terminology, click the following article number to view the article in the Microsoft Knowledge Base:
824684  (http://support.microsoft.com/kb/824684/LN/ ) Description of the standard terminology that is used to describe Microsoft software updates

APPLIES TO
  • Windows Embedded CE 6.0
Keywords: 
kbexpertiseadvanced kbfix kbpubtypekc kbqfe kbhotfixserver KB937889
 

Article Translations