Рейтинг:0

Увеличьте использование памяти на сервере NFS

флаг kw

Я создаю данные (файлы размером 100 ГБ), которые затем копируются на сервер через NFS v4.2 в сети 10 ГБ. Эти файлы хранятся на многих жестких дисках в формате XFS (одна копия на целевой диск).

Когда выполняются задачи копирования:

  • На клиенте используется огромное количество памяти (может быть больше 64 ГБ, занимает столько памяти, сколько может).
  • Но на сервере почти не используется оперативная память.

Я хотел бы уменьшить использование памяти на клиентах, поскольку они постоянно производят данные, и это замедляет их работу. Напротив, сервер в основном не используется.

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

Есть ли способ заставить сервер кэшировать больше данных? Я бы предпочел отдавать приоритет использованию памяти сервера, а не памяти клиента.

Конфигурация NFS:

10.0.3.1:/ /mnt/field nfs nfsvers=4.2,noatime,nodiratime,_netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10 0 0

/etc/экспорт:

/mnt 10.0.0.0/16(rw,async,fsid=0,no_subtree_check,crossmnt)

Конфигурация ник на сервере:

МТУ 9000
ринбуфер TX 512, RX 1024

Конфигурация NIC на клиенте:

МТУ 9000
ринбуфер TX 1024, RX 512

Редактировать: По запросу /proc/meminfo:

Клиент --------------------------------------------- Сервер ------ -------------------------

введите описание изображения здесь

Монитор использования памяти на этом клиенте:

введите описание изображения здесь

Использование сети:

введите описание изображения здесь

Примечание. Клиент использует большой tmpfs (100 ГБ) для вычислений. Я думаю, что этот tmpfs никогда не вычитается из количества доступной памяти.

Редактировать2:

Корреляция между использованием сети и памяти более очевидна на другом клиенте (надо было начать с него). Этот клиент не использует tmpfs.

введите описание изображения здесь

введите описание изображения здесь

John Mahowald avatar
флаг cn
Пожалуйста, отредактируйте свой вопрос, чтобы добавить `/proc/meminfo` как с клиентских, так и с серверных хостов под нагрузкой.
Ealrann avatar
флаг kw
Хорошо, я только что добавил это.
Matthew Ife avatar
флаг jo
Можете ли вы также предоставить копию вашего файла `/etc/exports`?
Ealrann avatar
флаг kw
Да, я добавил это. Я поместил это здесь также для простоты: `/mnt 10.0.0.0/16(rw,async,fsid=0,no_subtree_check,crossmnt)`
Рейтинг:3
флаг jo

Я хотел бы уменьшить использование памяти на клиентах, так как они постоянно производит данные, и это замедляет их.

Откуда ты это знаешь? Большая часть клиентской памяти находится в кэше страниц, что совершенно нормально, и даже улучшение буферизации на сервере не предотвратит агрессивное кэширование этих данных на стороне клиента.

Пробовали ли вы очистить кеш страницы (в качестве теста) и посмотреть, как ваше приложение работает без использования кеша страницы?

NFS имеет то, что известно как согласованность «близко к открытию», что означает, что содержимое данных и метаданных действительно гарантированно будет стабильным только тогда, когда вы не открыли файл активно (то есть другой клиент может изменить файл на другом). система, и вы не будете мудрее).

Из-за этого ограничения согласованности приложения клиентских систем NFS полагаются на кэш страниц, чтобы обеспечить доступность данных для обратного чтения, если это станет необходимым.

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

Это приведет к тому, что записи будут зафиксированы на сервере на стороне клиента, в то время как сервер всегда будет отвечать «готово» до того, как он зафиксирует данные на диске.

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

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

Кроме того, это не повлияет на использование памяти для кеша страниц на клиентах, над которыми NFS не имеет реального контроля.

В целом, я скептически отношусь к тому, что уменьшение использования памяти клиентами (если это кеш страниц, который вы измеряете здесь) улучшит производительность ваших клиентов.

Ealrann avatar
флаг kw
Спасибо за ваш ответ. Я знаю это, потому что первая партия создается быстрее, но как только запускается копия, она становится примерно на 10% медленнее. Я думаю, что мой процесс ограничен доступом к памяти; поэтому я думаю, что использование памяти для чего-то еще (здесь сетевое копирование) является причиной замедления. Но это не имеет большого значения, я просто пытаюсь немного оптимизировать. Поскольку я могу позволить себе потерю данных, я попробую ваш `async`
Рейтинг:1
флаг cn

Нет, принудительное использование меньшего объема памяти, скорее всего, сделает работу медленнее, а не быстрее. Вы уже тратите энергию на 188 ГБ быстрой DRAM, можете использовать ее.

Клиентский хост имеет 188 ГБ MemTotal и использует 162 ГБ для кэширования. На самом деле довольно низкие требования к памяти, обратите внимание на 123 ГБ MemAvailable, которые можно очень быстро освободить. Большая часть из 40 ГБ Shmem, вероятно, принадлежит tmpfs.

Поскольку Cached + Shmem в сумме дает больше, чем MemTotal, я подозреваю, что tmpfs учитывается дважды, как в общей памяти, так и в кешах. Также объяснил бы, как Cached минус Shmem приблизительно MemAvailable, tmpfs, не имеющие постоянного хранилища, не могут быть освобождены.

Серверная сторона, 15 ГБ и изменение MemTotal, 13 ГБ в кэше. Много доступной памяти на этом хосте. Предположительно, большая часть того, что он делает, обслуживает файлы, а не требует много памяти.

Без доказательств накладных расходов, таких как интенсивная активность vmscan или заканчивается MemAvailable, я не рекомендую предпринимать какие-либо действия.

Ealrann avatar
флаг kw
Спасибо, я проверю активность vmscan.

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

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