跨驱动器 NTFS 连接的性能问题

跨驱动器 NTFS 连接的性能问题

我有以下设置:

  • Windows 8.1 32 位
  • 驱动器 0:系统驱动器,SSD,NTFS,安装在C:\
  • 驱动器 1:数据驱动器,磁性 HDD,NTFS,安装C:\Users\Database User\DocumentsZ:\

在我的子目录中,C:\Users\Database User\Documents大约有 10 个子目录中有大约 50 000 个文件,平均大小约为 2KB。(bcolz 列数据库。)

对于跨驱动器 NTFS 连接点,我发现存在巨大的性能差异,具体取决于进程的文件 IO 是否针对其工作目录(或其子目录)或任何其他目录。

在 NTFS 连接点下方,仅在进程的工作目录或工作目录的子目录中才能实现可接受的性能:

  • 工作目录C:\Users\Database User\Documents\abc\def:执行rmdir /Q /S mydata.bcolz是 IO 绑定(磁盘绑定)操作

  • 工作目录C:\Users\Database User\Documents\abc:执行rmdir /Q /S def\mydata.bcolz是 IO 绑定(磁盘绑定)操作

  • 工作目录C:\Users\Database User\Documents\abc\def\xyz:执行rmdir /Q /S ..\mydata.bcolz是 CPU 密集型操作

在前两种情况下,cmd.exe 进程几乎不占用任何 CPU 时间,而在后一种情况下,它占用了 100% 的 CPU 核心。这三种情况下的操作相同。只有工作目录不同。

但请注意:

  • 工作目录Z:\abc\def\xyz:执行rmdir /Q /S ..\mydata.bcolz再次是一个 IO 绑定操作!

这种现象发生在任何具有大量非常小文件的快速文件 IO 中。它不仅限于rmdircmd.exe。上述示例仅用于说明。

知道发生了什么事以及如何解决吗?

相关内容