时间:2020-09-16 来源:u小马 访问:次
在微软开始推出 Windows 10 May 2020更新后,这家科技巨头声称它已经找到了一种方法来修复基于Chromium的浏览器的RAM使用。该修复是 "Segment Heap",它现在包含在Windows 10中,它应该有助于减少一些Win32桌面应用程序的内存使用,如Google Chrome和Edge。
现在谷歌寻求Windows 10团队帮助:
在此前暂停段堆内存机制的文章里我们已经提到微软工程师提供两种方案可以对处理器使用率增加问题进行缓解。
方案1: 减少浏览器的瞬时堆栈分配量,但这需要对整个浏览器项目代码进行重大改变,因此是个长期优化计划。
方案2: 提高段堆本身的性能,这个方案只能由Windows 10开发团队去优化解决,软件方面无法直接进行处理。针对这些方案谷歌浏览器开发团队并不准备重写整个项目代码,所以谷歌工程师研究后决定采取第二个优化方案。但这需要Windows 10开发团队的帮助 , 目前谷歌工程师已经在Github上发帖希望微软协助增加两个实验性选项。
改进将对所有Chromium浏览器有效:
谷歌工程师提出的两个实验性选项全部都是关于系统创建段堆的改进,这确实需要微软工程师们去优化系统内核。谷歌工程师研究SDK套件后提出方案包括创建1个段堆而不是1个NT堆 ,另一个选项是创建1个NT堆而不是段堆。其中创建NT堆而不是段堆的情况下还要阻止应用程序请求创建段堆,即即便是请求段堆系统也只会去创建NT堆。谷歌浏览器开发团队希望微软提供这两种选项后 , Chromium项目团队可以进行针对性的测试看看哪种效果更好。当然就目前来说短时间内段堆内存机制不会在谷歌浏览器上出现,除非谷歌和微软能解决处理器使用率飙升问题。
到目前为止,谷歌一直使用.exe清单的方法来启用Segment Heap,这确实节省了一些内存,但却浪费了CPU时间。“节省最多来自于浏览器和网络进程,而成本主要来自于渲染器进程。”谷歌表示。
谷歌新的测试数据表明,如果微软同意在Windows中添加一个函数,设置或清除n.dll.dll中RtlpHpHeapFeatures中的 "segment-heap-enabled "位,那么使用segment heap而不出现性能退步是相当容易的。
通过代码检查可以清楚地看到,在HeapCreate和RtlCreateHeap中添加标志来强制启用或强制禁用segment hea也很容易。这些方法可以很好地与manifest配合使用,而manifest本身太不灵活,不是一个完整的解决方案。
Google的高级开发者也在Github上提交了一个正式的帖子,寻求微软协助实现这两个标志。
HEAP_ENABLE_SEGMENT_HEAP--创建一个segment heap而不是NT堆。 HEAP_DISABLE_SEGMENT_HEAP--创建一个NT堆而不是segment heap,即使在应用程序清单中请求了segment heap。
“这些标志将对所有基于Chromium的浏览器有用,”谷歌开发者指出。
谷歌仍在试验Segment Heap,微软也可以在谷歌进行更多测试的同时帮助谷歌。未来当有办法成功实现这个功能,或者微软跳出自己的修复方法时,谷歌会重新考虑对这个功能的支持。