Вопрос: Связь между параметрами MTU и NFS rsize / wsize


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

Я запускаю wirehark и проверяю пакеты TCP, поступающие на сервер NFS. Wireshark показывает размер пакета 32626 во время расширенной операции записи (client-> server), предполагая, что я правильно интерпретирую («байты на проводе», которые, я полагаю, включает все заголовки сетевого уровня и т. Д.),

Параметры «rsize» и «wsize» NFS для экспортируемого хранилища установлены на 32k на обоих C / S, поэтому я решил, что приведенные выше результаты были результатом этого параметра. Однако увеличение этих значений НЕ увеличивает размер пакета, показанный Wireshark.

Поэтому мой вопрос в том, какие другие ограничения могут быть на месте? Я провел много исследований, и это то, к чему я до сих пор сталкивался. Мне кажется, что ни одно из сетевых ограничений ниже не ограничивало бы размер передачи до 32k:

Из sysctl:

net.ipv4.tcp_mem          = 4096 87380 4194304
net.ipv4.tcp_{r,w}mem     = 4096 87380 4194304
net.core.{r,w}mem_max     = 131071
net.core.rmem_default     = 229376

Мой MTU в настоящее время составляет 8K


7
2018-02-05 18:07


Источник




Ответы:


Размер NFS {r, w}, определяемый параметрами клиента и / или сервером. IOW, вы можете определить их в командной строке, например:

# mount -o rsize=1048576 .....

У клиента Linux разные значения по умолчанию для v3 и v4 - 32k и 1MB. Сервер nfs может запрашивать меньшее или может поддерживать большие размеры. Вы должны уметь видеть, что с wirehark в качестве FSINFO вызывают атрибуты файлов v3 или FATTR4_MAXREAD / FATTR4_MAXWRITE, которые запрашиваются с первым вызовом GETATTR.

Уровень RPC может разбивать отдельные запросы на чтение или запись на несколько фрагментов RPC. Уровень TCP может разбивать один фрагмент RPC на несколько TCP-пакетов. С другой стороны, уровень TCP может передавать несколько запросов RPC в один TCP-пакет, если они подходят.

Существует довольно устаревший документ Оптимизация производительности NFS, но получит представление о том, как настроить номера.


3
2018-02-06 07:41



Спасибо за ответ - большой точка об декодировании пакетов NFS! - Я видел «Продолжение данных ...» для пакетов NFS. Для справки других мне пришлось щелкнуть правой кнопкой мыши -> Decode As -> RPC. Теперь, когда я вижу фактические значения RPC, я не вижу FATTR4_MAX {READ, WRITE}. Я вижу несколько других, включая NUMLINKS = 20, OWNER, SPACE_USED и т. Д. Я выполнил поиск MAX {READ, WRITE} и никаких результатов. Это определенно NFS4. Какие-либо предложения? - Jmoney38
Тогда это, вероятно, NFSv4.1. Проверьте ответ на CREATE_SESSION-> csr_fore_chan_attrs-> max resp size - kofemann
Ах! Ваш первоначальный комментарий был правильным! - Мне пришлось повторно подключиться к клиенту ... Очевидно, клиент запрашивает дополнительную информацию для вызова GETATTR при необходимости. Значение, которое я нахожу, равно 1048576, которое, если оно находится в единицах бит, равно 128 КБ, что соответствует значениям net.core клиента. {R, w} mem_max. Кроме того, если это правда, то я все еще задаюсь вопросом, куда входит максимальный размер пакетов 32K. - Jmoney38
@ Jmoney38 в случае nfsv4.0 он видит при втором вызове GETATTR после PUTROOTFH: reco_attr: MAXREAD (30) - kofemann