Рейтинг:3

Чрезвычайно низкая производительность NFS при открытии

флаг kz

Я установил сервер NFS на Ubuntu 20.04 и клиент FreeIPA Ubuntu 20.04 с домашними каталогами пользователей, обслуживаемыми сервером NFS. Производительность очень низкая при доступе к файлам. Когда я сравниваю процесс со временем, затрачиваемым на системные вызовы, я обнаруживаю, что openat иногда может занимать более 1 секунды для файлов NFS! (Смотри ниже).Излишне говорить, что доступ к файлам на сервере не вызывает такой проблемы. openat — единственная медленная операция.

Я приложил гистограмму времени, проведенного в openat (я обрезал верхнюю корзину, чтобы был виден хвост). Есть более 800 вызовов openat, которые завершаются менее чем за 10 мс, но разница в общем времени зависит от хвоста, и есть много вызовов, которые занимают более 100 мс, что неразумно.

Я подозреваю, что это может быть связано с авторизацией Kerberos или чем-то в этом роде, но я не знаю, как исследовать эту проблему.

Опции в /etc/exports:

/home *(rw,sec=krb5:krb5i:krb5p,асинхронный,no_subtree_check)

Монтировать на клиенте:

server:/home/... на /home/... введите nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans= 2,sec=krb5,clientaddr=xx.xx.xx.x1,local_lock=none,addr=xx.xx.xx.x2)

Любая помощь или подсказка будут оценены,

Юваль.

0.000064 : stat("/home/.../lib/python3.8/site-packages/pandas/core", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
0.000040 : stat("/home/.../lib/python3.8/site-packages/pandas/core/nanops.py", {st_mode=S_IFREG|0664, st_size=50002, ...}) = 0
0.000095 : stat("/home/.../lib/python3.8/site-packages/pandas/core/nanops.py", {st_mode=S_IFREG|0664, st_size=50002, ...}) = 0
0.664737 : openat(AT_FDCWD, "/home/.../lib/python3.8/site-packages/pandas/core/__pycache__/nanops.cpython-38.pyc", O_RDONLY|O_CLOEXEC) = 6
0,000122 : fstat(6, {st_mode=S_IFREG|0664, st_size=36431, ...}) = 0
0.000116 : ioctl(6, TCGETS, 0x7ffed1278d60) = -1 ENOTTY (неподходящий ioctl для устройства)
0,000049 : lseek(6, 0, SEEK_CUR) = 0
0,000024 : lseek(6, 0, SEEK_CUR) = 0
0,000028 : fstat(6, {st_mode=S_IFREG|0664, st_size=36431, ...}) = 0
0.000052 : читать(6, "U\r\r\n\0\0\0\0\216t\362aR\303\0\0\343\0\0\0\0\0\0\0\0 \0\0\0\0\0\0\0"..., 36432) = 36431
0,000024 : чтение (6, "", 1) = 0
0,000438 : закрыть(6) = 0
0.000083 : mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f23fcbaf000
0.000100 : stat("/home/.../bin", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
0.000120 : stat("/usr/lib/python3.8", {st_mode=S_IFDIR|0755, st_size=20480, ...}) = 0
0.000122 : stat("/usr/lib/python3.8/lib-dynload", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
0.000037 : getcwd("/home/yuval/src/themis", 1024) = 23
0.000046 : stat("/home/yuval/src/themis", {st_mode=S_IFDIR|0775, st_size=130, ...}) = 0
0.000037 : stat("/home/.../lib/python3.8/site-packages", {st_mode=S_IFDIR|0775, st_size=12288, ...}) = 0
0.000051 : stat("/home/.../lib/python3.8/site-packages/pandas/core/array_algos", {st_mode=S_IFDIR|0775, st_size=163, ...}) = 0
0.000041 : stat("/home/.../lib/python3.8/site-packages/pandas/core/array_algos/masked_reductions.py", {st_mode=S_IFREG|0664, st_size=3721, ...}) = 0
0.000085 : stat("/home/.../lib/python3.8/site-packages/pandas/core/array_algos/masked_reductions.py", {st_mode=S_IFREG|0664, st_size=3721, ...}) = 0
0.411113 : openat(AT_FDCWD, "/home/.../lib/python3.8/site-packages/pandas/core/array_algos/__pycache__/masked_reductions.cpython-38.pyc", O_RDONLY|O_CLOEXEC) = 6
0,000053 : fstat(6, {st_mode=S_IFREG|0664, st_size=3329, ...}) = 0
0.000027 : ioctl(6, TCGETS, 0x7ffed1278d60) = -1 ENOTTY (неподходящий ioctl для устройства)
0,000043 : lseek(6, 0, SEEK_CUR) = 0
0,000037 : lseek(6, 0, SEEK_CUR) = 0
0,000025 : fstat(6, {st_mode=S_IFREG|0664, st_size=3329, ...}) = 0
0.000032 : читать(6, "U\r\r\n\0\0\0\0\216t\362a\211\16\0\0\343\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0"..., 3330) = 3329
0,000025 : чтение (6, "", 1) = 0
0,000438 : закрыть(6) = 0
0.000105 : stat("/home/.../lib/python3.8/site-packages/pandas/core/arrays", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
0.000102 : stat("/home/.../lib/python3.8/site-packages/pandas/core/arrays/categorical.py", {st_mode=S_IFREG|0664, st_size=94502, ...}) = 0
0.000101 : stat("/home/.../lib/python3.8/site-packages/pandas/core/arrays/categorical.py", {st_mode=S_IFREG|0664, st_size=94502, ...}) = 0
0.413090 : openat(AT_FDCWD, "/home/.../lib/python3.8/site-packages/pandas/core/arrays/__pycache__/categorical.cpython-38.pyc", O_RDONLY|O_CLOEXEC) = 6
0,000063 : fstat(6, {st_mode=S_IFREG|0664, st_size=77947, ...}) = 0
0.000041 : ioctl(6, TCGETS, 0x7ffed127b180) = -1 ENOTTY (неподходящий ioctl для устройства)
0,000037 : lseek(6, 0, SEEK_CUR) = 0
0,000023 : lseek(6, 0, SEEK_CUR) = 0
0,000031 : fstat(6, {st_mode=S_IFREG|0664, st_size=77947, ...}) = 0
0.000085 : читать(6, "U\r\r\n\0\0\0\0\216t\362a&q\1\0\343\0\0\0\0\0\0\0\0\0 \0\0\0\0\0\0"..., 77948) = 77947

Гистограмма времени, проведенного в openat для открытия Python и импорта pytorch

флаг fr
У меня очень похожая и даже более серьезная проблема. Функция openat() для фактического открытия файла занимает около 5 секунд! Все, что связано с обходом дерева каталогов или статистикой, находится в диапазоне µs. Вы приблизились к проблеме?
YuvGM avatar
флаг kz
Да. Но я не уверен, как. Я снова подключил клиент к домену и обнаружил, что хронид работает неправильно (у меня нет доступа к внешнему NTP, и он почему-то не обновлялся из одного источника). Я так разочаровался в этом, что в итоге запустил команду ssh на сервер домена в crontab и обновил ее с даты возврата. date Не очень точно, но достаточно хорошо. Я не уверен, какое изменение решило проблему.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.