Есть ли у ядра NFS модуль одновременного ограничения? - PullRequest
0 голосов
/ 10 января 2020

Справочная информация: я тестировал nfs-сервер с fio. И я нахожу, что независимо от того, сколько "iodepth" установлено на fio. Nfs-сервер может иметь только «64 Inflight». Так что я просто подозреваю, что где-то около «протокола NFS» ограничивает максимальный одновременный (максимум IO в полете).

fio команда

fio -numjobs=1 -iodepth=128 -direct=1 -ioengine=libaio -sync=1 -rw=write -bs=4k -size=500M -time_based -runtime=90 -name=Fiow -directory=/75

Мой сервер NFS основан на Ганеша и получил вывод «64 Inflight», используя ganesha_stats.py.

Итак, у меня есть два варианта:

  1. Изучите граф вызова и прочитайте код, чтобы найти проблема

    1. Я загружаю linux код ядра, но не могу. Какую функцию / исходный файл я должен начать, может быть, vfs. c: nfsd_write?
    2. Попытка использовать «perf» для отслеживания графов вызовов для ускорения моего цикла чтения кода для ядра linux, но не удалось , Потому что «отчет о выполнении» показывает символ общей библиотеки без имени функции.
  2. Изучите протокол nfs / mount cmd для поиска предела.

Может кто-нибудь помочь мне с этим? :)

1 Ответ

1 голос
/ 12 января 2020

Предполагается, что вы используете NFSv4.1 ( RF C 5661 ):

В NFSv4.1 количество ожидающих запросов ограничено размером таблица слотов [...].

И в Linux:

#define NFS4_DEF_SLOT_TABLE_SIZE (64U)

Это значение по умолчанию для этого модуля param :

module_param(max_session_slots, ushort, 0644);
MODULE_PARM_DESC(max_session_slots, "Maximum number of outstanding NFSv4.1 "
        "requests the client will negotiate");

IIU C всего максимум для этого:

#define NFS4_MAX_SLOT_TABLE (1024U)
...