2022年6月2日 星期四

nfs kernel server 一點筆記

 偶然間發現在 16 core Denverton C3958 的機器上發現 nfsd 只會跑到 8 個 thread 時發現的. 

改這個:

/etc/default/nfs-kernel-server
# Number of servers to start up
RPCNFSDCOUNT=4
# Options for rpc.mountd.
RPCMOUNTDOPTS="--manage-gids -p 65502"

RPCNFSDCOUNT 這裡建議機器有多少 h/w thread, 或說 lscpu 列的 CPUs 寫多少就填多少, 雖然 nfsd 頂多一顆 CPU 用到 55% (以 atom c3958 來說), 但個人反復實驗的結果是跟能用上多少 h/w therads 數一樣就好, 寫多也沒有用.

RPCMOUNTDOPTS 後面的 -p 65502 這個原本是為了穿防火牆用的. nfs server 原本會用 port 2049, 還有一個亂數決定 port 號的傳輸口, 在這裡下這個 -p 可以指定都走哪一個 port 出去. 但很奇怪的, 我發現設定上這個參數時 nfs server 可以跑的比較快.


另外呢, 如果本身用的都是 mellanox connectX2 以上的卡的話, 直接掛上 RDMA 吧, 什麼都不用調, 也不用管 h/w threads 有多少, 就直接最佳化到底.

-------------------------------- 以下是 RDMA 的部份 --------------------------------

那 nfs server 如何支援 RDMA 呢? 想想我還是寫在同一篇裡好了. 不過先說在前面, 非 mellanox 硬體支援 RDMA 的卡給它跑 RDMA 意義不大, 要跑可以, 速度直接砍一半. 原本文中的主角 atom c3958 用的 intel x553 個人沒實驗成功跟 connectX2 或 X3 對連成功, 所以我無法告知能跑到什麼程度. 

ok 進正文. ubuntu 20.04 底下要 nfs server 支援 RDMA, 首先先裝上 rdma-core 還有跟它相關的套件後, 起動 nfs server 之後, 下:

echo rdma 20049 > /proc/fs/nfsd/portlist

接著 client 端就可以掛起來:

mount -t nfs4 -o rdma,port=20049 10.1.1.1:/dir /mount/dir

server 跟 client 端要掛什麼 kernel module 都幫你自動掛起來. 唯 rdma 看來只有支援 ipv4, 沒有支援 ipv6.

以上我是用 MCX353 對連測試的, 連結設定是 ethernet, 不是 infiniband. 
-------------------------------- 以上是 RDMA 的部份 --------------------------------

最後, 網卡 mtu 有沒有設到 9000 有不小的差別.

1 則留言:

匿名 提到...

瓦斯神諭讚!