Я пытаюсь максимально увеличить пропускную способность NFS / TCP между клиентом Linux и одним сервером NFS по каналу 10 Гбит / с. Хотя каждое монтирование NFS имеет свое собственное устройство (основное / второстепенное), все сводится к одному TCP-соединению, и это узкое место.
Используя iperf и несколько TCP-соединений, я могу достичь ~ 8 Гбит / с, но NFS застрял на одном потоке TCP и ограничен ~ 2 Гбит / с (настройки tcp пока отсутствуют).
В Solaris есть системная настройка rpcmod:clnt_max_conns
которые позволяют установить, сколько одновременных TCP-соединений система может использовать с одним сервером NFS.
Есть ли эквивалент Linux или способ сделать это?
В качестве обходного пути я знаю, что могу установить много IP-адресов на сервере NFS, а затем сбалансировать нагрузку на точки монтирования на них, но это было бы неоптимально.
Вы можете вернуться к UDP и использовать jumbo-пакеты (например, датаграммы 4k). Если вся ваша сеть поддерживает jumbo-кадры, это может очень помочь, так что у вас не будет повторной сборки IP-пакетов на каждой стороне.
Начиная с ядро Linux 5.3 Доступна новая опция монтирования «nconnect = X», где X указывает количество TCP-соединений с сервером для использования.
Если вы используете NFS v4.1 или выше, вы можете воспользоваться pNFS (параллельный NFS). Согласно следующей информации о выпуске Red Hat, он доступен в RHEL 6.4, но я не видел никаких обновлений, указывающих на его доступность в других дистрибутивах Linux.
pNFS определена в RFC5661 от 2010 г. Вы можете проверить, полностью ли поддерживает ваше устройство хранения pNFS.