найти очень медленно на долю CIFS

Запись в /proc/mounts:

//OUR_ORG.file.core.windows.net/OUR_ORG /data/csv cifs rw,relatime,vers=3.0,sec=ntlmssp,cache=strict,username=OUR_ORG,domain=,uid=0,noforceuid,gid=0,noforcegid,addr=SOME_IP,file_mode=0777,dir_mode=0777,soft,persistenthandles,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,echo_interval=60,actimeo=1 0 0

Я пытаюсь запустить команду:

find /data/csv -mtime -1 -name '*.csv.gz'

К сожалению, это очень медленно.

ls -alh --time-style=+%D /data/csv/

Эта команда работает нормально и завершается менее чем за 2 секунды.

Я проверил Strace. find используют newfstatat для внутреннего использования, но ls используют lstat для внутреннего использования.

Я бы предпочел использовать find с некоторым переключателем, а не анализировать ls вывод. Можно ли как-нибудь сделать команду find достаточно быстрой?

1
задан 5 August 2019 в 14:12

2 ответа

Измените параметры на

cache=loose

С одним серьезным комментарием из страницы руководства:

cache=loose может вызвать повреждение данных, когда несколько средств чтения и устройств записи работают над теми же файлами.


cache=

Cache mode. See the section below on CACHE COHERENCY for details. Allowed values are:

    • none: do not cache file data at all 

    • strict: follow the CIFS/SMB2 protocol strictly 

    • loose: allow loose caching semantics 

The default in kernels prior to 3.7 was "loose". As of kernel 3.7 the default is "strict". 
2
ответ дан 7 December 2019 в 13:15

У меня была похожая команда find, которая заняла около 10 минут, в то время как команда ls возвращала результат за секунды. Настройка кеша ни на что не повлияла.

При использовании параметра actimeo=60 (по умолчанию = 1 с) команда поиска возвращается менее чем за 10 секунд.

actimeo=arg

Время (в секундах), в течение которого клиент CIFS кэширует атрибуты файла. или каталог, прежде чем он запросит информацию об атрибутах с сервера. В течение этого периода изменения, происходящие на сервере, сохраняются. незамеченным, пока клиент снова не проверит сервер. По умолчанию тайм-аут кэша атрибута установлен на 1 секунду. Это означает более частый прямые обращения к серверу, чтобы проверить, имеют ли атрибуты изменения, которые могут повлиять на производительность. С помощью этой опции пользователи могут найти компромисс между производительностью и корректностью метаданных кеша, в зависимости от потребности в рабочей нагрузке. Более короткие тайм-ауты означают лучший кеш когерентность, но частое повышенное количество обращений к серверу. Более длительные тайм-ауты означают меньшее количество обращений к серверу, но более слабая когерентность кэша. Значение актимео представляет собой положительное целое число, которое может содержать значения от 0 до максимального значения 2^30 * Гц (частота прерывания по таймеру).

2
ответ дан 22 June 2020 в 19:41

Другие вопросы по тегам:

Похожие вопросы: