Проблемы с производительностью в перекрестных переходах NTFS
У меня есть следующие настройки:
- Windows 8.1 32-битная
- Диск 0: системный диск, SSD, NTFS, смонтированный на
C:\
- Диск 1: диск с данными, магнитный жесткий диск, NTFS, смонтированный на
C:\Users\Database User\Documents
а такжеZ:\
дополнительно
В под-подкаталоге C:\Users\Database User\Documents
У меня около 50 000 файлов размером около 2 КБ в среднем в 10 подкаталогах. (База данных столбца bcolz.)
С точками соединения NTFS между приводами я обнаружил огромные расхождения в производительности в зависимости от того, нацелен ли файловый IO процесса на его рабочий каталог (или его подкаталог) или любой другой каталог.
Ниже места соединения 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
снова операция, связанная с IO!
Это явление происходит с любым быстрым файловым вводом-выводом с очень большим количеством очень маленьких файлов. Это не ограничено rmdir
или же cmd.exe
, Приведенный выше пример только для иллюстрации.
Есть идеи, что происходит и как это исправить?