Windows XP是否使用NTFS文件系统函数调用来读取/写入页面文件(pagefile.sys)?

3
如果有的话,那么你如何证明产生的开销是合理的(例如日志记录)? 如果没有,那么页面文件为什么会出现碎片? 此外,增加簇大小是否会提高页面文件的性能(簇松弛空间不是问题)?

就我个人而言,我认为这是一个好问题。相比之下,Linux的mm/swapfile.c会向文件系统请求文件的范围,然后直接访问底层设备上的块。优点是没有文件系统开销;缺点是在使用过程中无法调整交换文件的大小。 - ephemient
2个回答

1
系统使用文件系统调用来访问页面文件,因为必须这样做。日志记录等开销基本上为零。仅当文件系统结构发生更改时,才会启用日志记录,而不是针对单个读取或写入。默认情况下,XP使用半固定的页面文件,初始大小设置为物理内存大小的1.5倍。在正常情况下,页面文件永远不会比此更小。如果此大小足够,并且具有合理的RAM大小,几乎总是如此,页面文件将永远不会被重新调整大小。只有在这种不太可能的情况下,新的簇才会被分配给页面文件,并且存在碎片化的可能性。在重新启动或更早时,页面文件的所有扩展将被释放,并将恢复到其初始大小。在正常情况下,不会发生碎片化。如果页面文件最初未经过碎片化并且不进行调整大小,则页面文件永远不会碎片化。
页面文件在更多或更少连续的基础上用于保存很少使用的数据。这些写操作发生在低CPU和磁盘访问的安静时间,因此不会影响性能。由于涉及的数据很少使用,因此页面文件访问很少对性能产生严重影响。页面文件不仅仅是在内存不足时使用的溢出区域。在大多数情况下,页面文件通过释放RAM长时间处理静态数据的需求来提高性能。

1

你可以使用filemon或procmon(sysinternals.com)来查看操作系统写入页文件的情况 - 因此必须使用适当的文件系统语义。

如果由于内存压力而进行交换,那么您已经输掉了性能战斗,并且开销不会对损失产生重大影响(但它们将意味着您的文件系统保持不受损坏)。如果交换并不是性能关键,则谁在乎记录日志会带来微小的性能损失?

簇大小不太可能成为问题,因为它只是从索引->磁盘存储的映射。页文件极少更改大小,因此索引几乎永远不会更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接