У меня следующая установка:
C:\
C:\Users\Database User\Documents
и Z:\
дополнительноВ подкаталоге C:\Users\Database User\Documents
У меня около 50 000 файлов размером около 2 КБ в среднем примерно в 10 подкаталогах. (База данных столбцов bcolz.)
С перекрестными точками соединения NTFS я обнаружил огромные расхождения в производительности в зависимости от того, нацелен ли ввод-вывод файла процесса на его рабочий каталог (или его подкаталог) или любой другой каталог.
Ниже пересечения NTFS приемлемая производительность достигается только в рабочем каталоге процессов или в подкаталоге рабочего каталога:
Рабочий каталог C:\Users\Database User\Documents\abc\def
: выполнение rmdir /Q /S mydata.bcolz
это операция, связанная с вводом-выводом (ограничением диска)
Рабочий каталог C:\Users\Database User\Documents\abc
: выполнение rmdir /Q /S def\mydata.bcolz
это операция, связанная с вводом-выводом (ограничением диска)
Рабочий каталог C:\Users\Database User\Documents\abc\def\xyz
: выполнение rmdir /Q /S ..\mydata.bcolz
это операция, связанная с процессором
В первых двух случаях процесс cmd.exe практически не потребляет процессорное время, а во втором - 100% одного ядра. Операция идентична во всех трех случаях. Различаются только рабочие каталоги.
Но обратите внимание:
Z:\abc\def\xyz
: выполнение rmdir /Q /S ..\mydata.bcolz
это снова операция, связанная с вводом-выводом!Это явление происходит при любом быстром вводе-выводе файлов с очень большим количеством очень маленьких файлов. Это не ограничивается rmdir
или cmd.exe
. Приведенный выше пример приведен только для иллюстрации.
Есть идеи, что происходит и как это исправить?