我有以下设置:
- Windows 8.1 32 位
- 驱动器 0:系统驱动器,SSD,NTFS,安装在
C:\
- 驱动器 1:数据驱动器,磁性 HDD,NTFS,安装
C:\Users\Database User\Documents
在Z:\
在我的子目录中,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 中。它不仅限于rmdir
或cmd.exe
。上述示例仅用于说明。
知道发生了什么事以及如何解决吗?