Answers:
实际上,我不认为使用平板来调整具有相同大小的许多文件的分配以减少平均查找时间。
我的观点是,它用于减少大卷分配的延迟,否则当并行线程需要在卷上分配空间时,这将导致并行线程进行过多并发访问,因为这将锁定卷分配的同一部分位图。为避免处理大的位图,可以将其细分为“平板”,以相同的位图片段(以至少1个或更多的簇为单位;如果您的簇大小为4KB,则位图中的簇代表),以位为单位表示磁盘上的连续区域。 4K * 8 = 32K可分配群集,即128MB操作系统存储;卷中的实际平板大小调整为33至64之间,允许大约33个并发线程在dist上的位图中分配空间而不会互相阻塞)
因此,假设在创建多个文件的线程将在其自己的slab中最常做的事情,然后将其解锁并尝试另一个slab,或者尝试在当前slab中分配较小的数量,然后尝试使用sslab,以加快卷上的空间分配另一个可用的非锁定平板,然后尝试同时获得对另一个线程当前使用的平板的完整访问。
这解释了为什么磁盘上的分配是“分散”在整个卷上的。同样,这也解释了为什么NTFS上的MFT至少具有2个属于其他板的片段,因为它避免了使用该卷的许多线程之间的严重锁定。您可以对MFT进行碎片整理,但它会在“保留区”中至少保留一个片段以供并发分配,这必须避免在NTFS卷上执行阻塞I / O。
过去,NTFS卷没有细分为多个平板,并且由于线程阻塞和内核中等待I / O完成的线程切换过多而造成巨大的性能损失(即使位图中的分配实际上是极其严重的)速度快,并且需要纳秒的时间,因为位图的大部分有趣部分已经被缓存在内存中了。当对卷的写操作进行刷新并记录日志时,由于在日志上进行了分配,因此发生了另一次锁定,因此日志现在在卷上也使用了一个单独的平板(如果可能)。
但是我不认为NTFS会将任何平板专用于特定大小的文件。当数据被删除并且它们的分配大小降到某个阈值以下并且两个这样的平板可以合并时,NTFS在内部将对这些平板进行一些碎片整理。
您可以通过以下方式获取有关平板尺寸的信息:
fsutil fsinfo ntfsinfo c:
显然,这些平板正在调整用于性能的参数。但是许多第三方碎片整理工具会忽略此设置,并且不使用最佳放置。理想情况下,卷的每个平板中都应该有一些可用空间,除非这些平板中装有未分配的文件和索引,并且应该保持稳定。对于许多不断创建和回收的小型临时文件和事务,您需要根据并发线程数将它们放置在足够的平板中,并避免将它们与其他需要读取的群集距离太远。硬盘或RAID阵列(在SSD上无关紧要)。
平板对于远程文件系统也很有用,但是其最佳大小很难预测。相对于分层虚拟化卷的差异卷而言,相反的平板非常小,并且存在非常不同的放置策略,这可以使分配是虚拟的并重新映射到不同的物理位置。
我们仍然需要Microsoft提供有关注册表中以下调整参数的信息:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dfrg\SlabifyFunction]
MinimumReclaimSlabsMB = REG_DWORD: 10240
MinimumReclaimSlabsPercent = REG_DWORD: 10
SlabEvictUpperBoundKB = REG_DWORD: 204800
SlabEvictUpperBoundPercent = REG_DWORD: 20
我认为这些都是故意留下的,因为Microsoft仍在考虑更改布局策略,并且可能会随着时间的推移进行更改。它们没有被API公开,您只能在注册表和NTFS驱动程序的内部源代码实现中找到它们的证据。
我们所知道的是,DEFRAG.EXE命令行工具的“ / K”参数简要介绍了这些平板,但这些细节并没有太多。但是,很容易观察到/ K优化在Windows的初始安装后(甚至在6次重新引导和测量之后进行Bootvis优化之前)正在极大地提高性能。还有/ L参数与SSD的修整有关。