偶然間發現在 16 core Denverton C3958 的機器上發現 nfsd 只會跑到 8 個 thread 時發現的.
改這個:
# 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
1 則留言:
瓦斯神諭讚!
張貼留言