locked
EWF的内存使用问题 RRS feed

  • 问题

  • 项目中系统在在CF卡上运行,为了提高速度和延长CF卡的寿命,使用了基于内存方式的EWF功能保护C盘。在对C盘写操作时,如果文件较小,正常;但是如果文件较大,例如向C盘拷贝800M文件,则拷贝进程长时间停止不动,无法完成,我的机器内存是2G,打开任务管理器,看到PF使用率从拷贝前的140MB多逐步增加到652MB后,就停止继续增加了,同时拷贝进程也停止了。

    另外当向C盘安装某个较大的应用程序(例如暴风影音)时,安装完后在提交时也会出错,无法完成提交。

    两类问题似乎都与内存有关。

    经检查,可以排除内存条硬件故障。

    下面是我的具体参数设置:

     1. EWF NTLDR                          
     2. EWF Manager Console application    
     3. Enhanced Write Filter API (EWF API)

     4. Enhanced Write Filter
        Seting -->  EWF Volume Configuration
              Number of Protected Volumes       1
              Maximum Number of Overlay Levels  1
              EWF Partition Size in KBytes      0
              Disable Background Disk Defragmentation       √  
              Enable Hibernate-Once-Resume-Many Mode (HORM) X
              Protected Volume # 1  
              Start EWF Enabled   X 
              Enable Lazy Write   X 
              Disk Number         0 
              Partition Number    1 
              Overlay Type        RAM (Reg)   √
              Optimization Option Optimal Performance   √

        Resources --> 禁用FBA DLL/COM Registration组件

    对注册表修改的键值:

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ewf\Parameters]

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ewf\Parameters\Protected]

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ewf\Parameters\Protected\Volume0]

    "VolumeID"="{1EA414D1-6760-4625-8CBE-4F9F85A48E15}"

    "Type"=dword:00000001

    "ArcName"="multi(0)disk(0)rdisk(0)partition(1)"

    开启EWF命令:

    ewfmgr c: -enable
    pause

    关闭EWF命令:

    Ewfmgr c: -commitanddisable -live
    pause

    请高手帮我判断下解决问题的方向,谢谢!

    2010年3月25日 4:19

答案

  • 不需要升级,理论上要求内存是被保护分区总合的1.3倍,这样绝对不会发生缓存满的情况。但是EWF的缓冲区本身也有一定的容量限制!

    对保护分区的读和写操作将会映射到内存缓冲区中。你要配置被保护分区的大小、EWFEnable Lazy Write和Use Less Overlay Space 这样当文件被删除时,内存会被回收!

    尽量避免往被保护的磁盘写入数据(例如:安装软件),若做不到,则使用FBWF保护部分目录。


    肖正波我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    • 已建议为答案 happymyModerator 2010年3月30日 5:34
    • 已标记为答案 JSHZP 2010年4月3日 4:59
    2010年3月30日 5:33
    版主
  • 在我的记忆中好像EWF最多能提供1024MB的缓存。

    正确地看到映射到内存缓冲区中的具体使用了多少,可以执行EWFMGR 或者使用EWF的API编程。


    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    • 已标记为答案 JSHZP 2010年4月3日 5:00
    2010年3月30日 12:17
    版主
  • 不需要升级,理论上要求内存是被保护分区总合的1.3倍,这样绝对不会发生缓存满的情况。但是EWF的缓冲区本身也有一定的容量限制!

    对保护分区的读和写操作将会映射到内存缓冲区中。你要配置被保护分区的大小、EWFEnable Lazy Write和Use Less Overlay Space 这样当文件被删除时,内存会被回收!

    尽量避免往被保护的磁盘写入数据(例如:安装软件),若做不到,则使用FBWF保护部分目录。


    肖正波我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com

    折腾了几天,回过头来想想,应该是思路出了些问题:XPE的运用范围和EWF功能的目的应该是不支持大量的写操作的。所以,只能考虑在项目中避免这种情况。

    前面说的现象看来是正常的,对EWF的使用似乎也没问题,只能尝试着修改项目目标,“委曲求全”了。

    最后,再次感谢老虎的及时回帖和happymy的耐心相助!谢谢两位了!

    • 已标记为答案 JSHZP 2010年4月3日 4:59
    2010年4月3日 4:59

全部回复

  • 这个是经典雷志刚式的做法

    给你两个建议

    1.如果是SP2的,请升级到FP2007+UP1.0,或者用WES2009(老版本的内存回收有问题)

    2配置方案如下

              Number of Protected Volumes       1
              Maximum Number of Overlay Levels  1
              EWF Partition Size in KBytes      0
              Disable Background Disk Defragmentation       √  
              Enable Hibernate-Once-Resume-Many Mode (HORM)  √    

              Protected Volume # 1  
              Start EWF Enabled    X  
              Enable Lazy Write   √  
              Disk Number         0 
              Partition Number    1 
              Overlay Type        RAM (Reg)   √
              Optimization Option  Use Less Overlay Space√

    2010年3月25日 9:48
  • 升级开发工具到FP2007以后的版本,老版本的EWF不支持内存回收。
    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    • 已建议为答案 happymyModerator 2010年3月25日 13:26
    • 取消建议作为答案 JSHZP 2010年3月26日 8:07
    2010年3月25日 13:26
    版主
  • 1、我的开发工具版本是WES2009的,2、试了一下 老__虎 建议的配置方案,问题依旧。

    当向C盘拷贝800MB文件时,从任务管理器看到PF使用率从拷贝前的140MB多逐步增加到647MB后,就停止继续增加了,同时拷贝进程也停止了。桌面右下角弹出系统提示消息:"windows 延缓写入失败。。。"。另外我的系统的“虚拟内存”是关闭的,但是这个不能开啊!

    有请诸位继续劳神了!

    2010年3月26日 8:13
  • 另外,C盘大小约2.7GB(内存为2GB),是否是这个导致内存不够用了呢?
    2010年3月26日 8:21
  • 是的,理论上要求内存是被保护分区总合的1.3倍

    请升级到FP07并且配置EWF开启惰性写入(Use Less Overlay Space)。


    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月26日 13:42
    版主
  • 是的,理论上要求内存是被保护分区总合的1.3倍

    请升级到FP07并且配置EWF开启惰性写入(Use Less Overlay Space)。


    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    2010年3月26日 13:43
    版主
  • 被保护的C盘是2.7G,内存2G,是否应该这么认为:只要操作系统、应用程序和当前开机后对C盘的改写,这三方面所占用的内存总和不超过2G,就没问题呢?

    我现在的版本是WES2009,是否需要升级到FP2007吗?

    2010年3月29日 10:10
  • 不需要升级,理论上要求内存是被保护分区总合的1.3倍,这样绝对不会发生缓存满的情况。但是EWF的缓冲区本身也有一定的容量限制!

    对保护分区的读和写操作将会映射到内存缓冲区中。你要配置被保护分区的大小、EWFEnable Lazy Write和Use Less Overlay Space 这样当文件被删除时,内存会被回收!

    尽量避免往被保护的磁盘写入数据(例如:安装软件),若做不到,则使用FBWF保护部分目录。


    肖正波我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    • 已建议为答案 happymyModerator 2010年3月30日 5:34
    • 已标记为答案 JSHZP 2010年4月3日 4:59
    2010年3月30日 5:33
    版主
  • 首先谢谢happymy的耐心!

    “对保护分区的读和写操作将会映射到内存缓冲区中”,能否有办法实时、正确地看到映射到内存缓冲区中的具体有多少?通过任务管理器查看“PF使用率”,再扣除系统占用的,这样可以吗?

    我感觉现在的问题是:当我向C盘拷贝一个800MB的文件时,通过任务管理器查看内存仅仅使用了约600多MB,拷贝进程就“死机”了,而我的内存是2GB的啊!感觉一定是哪儿出问题了。

    2010年3月30日 10:17
  • 在我的记忆中好像EWF最多能提供1024MB的缓存。

    正确地看到映射到内存缓冲区中的具体使用了多少,可以执行EWFMGR 或者使用EWF的API编程。


    肖正波 我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com
    • 已标记为答案 JSHZP 2010年4月3日 5:00
    2010年3月30日 12:17
    版主
  • 不需要升级,理论上要求内存是被保护分区总合的1.3倍,这样绝对不会发生缓存满的情况。但是EWF的缓冲区本身也有一定的容量限制!

    对保护分区的读和写操作将会映射到内存缓冲区中。你要配置被保护分区的大小、EWFEnable Lazy Write和Use Less Overlay Space 这样当文件被删除时,内存会被回收!

    尽量避免往被保护的磁盘写入数据(例如:安装软件),若做不到,则使用FBWF保护部分目录。


    肖正波我WIndows Embedded的中文技术BLOG: http://m--y.spaces.live.com/blog/ QQ:1320232327(另外两个已满) MSN:questor_87@hotmail.com

    折腾了几天,回过头来想想,应该是思路出了些问题:XPE的运用范围和EWF功能的目的应该是不支持大量的写操作的。所以,只能考虑在项目中避免这种情况。

    前面说的现象看来是正常的,对EWF的使用似乎也没问题,只能尝试着修改项目目标,“委曲求全”了。

    最后,再次感谢老虎的及时回帖和happymy的耐心相助!谢谢两位了!

    • 已标记为答案 JSHZP 2010年4月3日 4:59
    2010年4月3日 4:59