Eu tenho a seguinte configuração:
C:\
C:\Users\Database User\Documents
e Z:\
adicionalmente Em um sub-subdiretório de C:\Users\Database User\Documents
, eu tenho cerca de 50.000 arquivos com cerca de 2 KB, em média, em cerca de 10 subdiretórios. (Um banco de dados de coluna bcolz.)
Com os pontos de junção NTFS de unidade cruzada, encontro grandes discrepâncias de desempenho, dependendo se o IO de um arquivo de processo está direcionado ao diretório de trabalho (ou a um subdiretório dele) ou a qualquer outro diretório.
Abaixo da junção NTFS, o desempenho aceitável é alcançado apenas no diretório de trabalho dos processos ou em um subdiretório do diretório de trabalho:
Diretório de trabalho C:\Users\Database User\Documents\abc\def
: executar rmdir /Q /S mydata.bcolz
é uma operação de limite de E / S (com limite de disco)
Diretório de trabalho C:\Users\Database User\Documents\abc
: executar rmdir /Q /S def\mydata.bcolz
é uma operação de limite de E / S (com limite de disco)
Diretório de trabalho C:\Users\Database User\Documents\abc\def\xyz
: executar rmdir /Q /S ..\mydata.bcolz
é uma operação vinculada à CPU
Nos dois primeiros casos, o processo cmd.exe dificilmente consome qualquer tempo de CPU, enquanto no segundo ele consome 100% de um núcleo. A operação é idêntica nos três casos. Apenas os diretórios de trabalho são diferentes.
Mas note:
Z:\abc\def\xyz
: executar rmdir /Q /S ..\mydata.bcolz
é novamente uma operação de limite de E / S! Esse fenômeno ocorre com qualquer arquivo IO rápido com um número muito grande de arquivos muito pequenos. Não está limitado a rmdir
ou cmd.exe
. O exemplo acima é apenas para ilustração.
Alguma ideia do que está acontecendo e como consertá-lo?