我有以下设置:
C:\ C:\Users\Database User\Documents和Z:\ 在C:\Users\Database User\Documents的子子目录中,我有大约5万个文件,平均约10KB的子目录大约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绑定(Disk bound)操作
工作目录C:\Users\Database User\Documents\abc\def\xyz :正在执行rmdir /Q /S ..\mydata.bcolz是一个CPU绑定操作
在前两种情况下,cmd.exe进程几乎不消耗任何CPU时间,而后者则占用一个核心的100%。 这三种情况的操作都是相同的。 只有工作目录不同。
但请注意:
Z:\abc\def\xyz :正在执行rmdir /Q /S ..\mydata.bcolz又是一个IO绑定操作! 这种现象发生在有很多非常小的文件的任何快速文件IO上。 它不限于rmdir或cmd.exe 。 上面的例子只是为了说明。
任何想法是怎么回事,如何解决它?