針對 NFS Server 效能調教

  • NFS Server 有 4G RAM
  • OS : Alpine Linux 3.22
  • /etc/sysctl.d/nfsd.conf
    # ============================================
    # 網路參數優化
    # ============================================
    # TCP 緩衝區 (128MB max)
    net.core.rmem_max=134217728
    net.core.wmem_max=134217728
    net.ipv4.tcp_rmem=4096 87380 67108864
    net.ipv4.tcp_wmem=4096 65536 67108864
    
    # 網路佇列
    net.core.netdev_max_backlog=5000
    net.ipv4.tcp_max_syn_backlog=8192
    
    # TCP 效能優化
    net.ipv4.tcp_window_scaling=1
    net.ipv4.tcp_timestamps=1
    net.ipv4.tcp_sack=1
    net.ipv4.tcp_no_metrics_save=1
    net.ipv4.tcp_moderate_rcvbuf=1
    net.ipv4.tcp_congestion_control=cubic
    
    # ============================================
    # 檔案系統與記憶體管理 (4GB RAM 最佳化)
    # ============================================
    # 寫入快取設定
    # 4GB * 20% = 0.8GB 寫入快取 (非常充裕)
    vm.dirty_ratio=20
    # 4GB * 15% = 600MB 開始背景清理
    vm.dirty_background_ratio=15
    
    # 快取清理時機
    vm.dirty_expire_centisecs=1500      # 15 秒後髒頁視為過期
    vm.dirty_writeback_centisecs=500    # 每 5 秒執行一次清理
    
    # 記憶體管理
    vm.swappiness=10                    # 盡量避免 swap
    vm.vfs_cache_pressure=50            # 平衡 inode/dentry 快取回收
    
    # 透明大頁面 (對 NFS 有幫助)
    vm.nr_hugepages=128
    
    # ============================================
    # 檔案系統參數
    # ============================================
    fs.file-max=2097152
    fs.aio-max-nr=1048576
    
    # ============================================
    # NFS/RPC 特定參數
    # ============================================
    # TCP slot 表 (提升併發能力)
    sunrpc.tcp_slot_table_entries=128
    sunrpc.tcp_max_slot_table_entries=256
  • 更改後執行

    sysctl -p /etc/sysctl.d/nfsd.conf

    讓設定生效

  • /etc/conf.d/nfs
    :
    # 新增以下設定
    # Number of servers to start
    RPCNFSDCOUNT=12
    
    # Options for rpc.mountd
    RPCMOUNTDOPTS=""
    
    # Options for rpc.statd
    RPCSTATDOPTS=""
  • 修改後重啟 nfs

    rc-service nfs restart

  • 掛載路徑 Exp. /mnt/t
  • 順序寫入測試

    fio --name=seq-write \
      --directory=/mnt/t \
      --rw=write \
      --bs=1M \
      --size=2G \
      --numjobs=1 \
      --time_based \
      --runtime=60 \
      --group_reporting

  • 順序讀取測試

    fio --name=seq-read \
      --directory=/mnt/t \
      --rw=read \
      --bs=1M \
      --size=2G \
      --numjobs=1 \
      --time_based \
      --runtime=60 \
      --group_reporting

  • tech/nfs-ps-tuning.txt
  • 上一次變更: 2025/10/29 12:14
  • jonathan