0

背景:我正在测试一个带有fio. 而且我发现无论“iodepth”设置多少fio。nfs-server 只能有“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-server 基于 ganesha,并通过使用ganesha_stats.py.

所以我现在有两个选择:

  1. 研究调用图并阅读代码以找到问题

    1. 我下载了 linux 内核代码,但很难 . 我应该从哪个函数/源文件开始,也许是 vfs.c:nfsd_write?
    2. 尝试使用“性能”来跟踪调用图以加快我的 linux 内核代码阅读之旅,但失败了。因为“性能报告”显示没有函数名称的共享库符号。
  2. 学习 nfs 协议/mount cmd 来寻求限制。

有人可以帮我吗?:)

4

1 回答 1

1

假设您使用的是 NFSv4.1 ( RFC 5661 ):

在 NFSv4.1 中,未完成请求的数量受槽表大小的限制 [...]。

Linux中:

#define NFS4_DEF_SLOT_TABLE_SIZE (64U)

这是此模块参数的默认值:

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

IIUC 的总最大值为:

#define NFS4_MAX_SLOT_TABLE (1024U)
于 2020-01-12T08:13:54.467 回答