Проблемы с производительностью в перекрестных переходах 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, Приведенный выше пример только для иллюстрации.
Есть идеи, что происходит и как это исправить?