web-dev-qa-db-ja.com

/ proc / sys / sunrpc / tcp_slot_table_entriesへの永続的な変更

Linux CentOS5.5でsunrpc.tcp_slot_table_entriesに永続的な変更を加えようとしています。この値は、NFSクライアントのパフォーマンスにとって重要であることがわかっており、NFSマウントを実行する前に設定する必要があります。

/etc/sysctl.conf(sysctl -pを実行)はsunrpcモジュールがロードされる前に実行されるため、値を/etc/rc.d/rc.sysinitに入力するだけでは機能しません。

RHEL4と同じ問題:

私がしようとしました:

  • install sunrpc /sbin/modprobe -q --ignore-install sunrpc;/sbin/sysctl -w sunrpc.tcp_slot_table_entries=64/etc/modprobe.confに(および/etc/modprobe.d/sunrpcに)入れます
  • SUBSYSTEM=="module" ACTION=="add" DEVPATH=="*/sunrpc" RUN+="/sbin/sysctl -w sunrpc.tcp_slot_table_entries=64"(CentOS 5では変更する必要があるかもしれません)を/etc/udev/rules.d/23-sunrpc.rulesに入れますが、役に立ちません。

そして、私は/etc/init.d/netfs(initscriptsパッケージから)を変更したくありません。

それで、CentOS 5でそれを適切に行うことに成功しましたか?もしそうなら、どのように?

編集:/etc/modprobe.d/modprobe.conf.distで見つかりました:

install sunrpc /sbin/modprobe --first-time --ignore-install sunrpc && { /bin/mount -t rpc_pipefs sunrpc /var/lib/nfs/rpc_pipefs > /dev/null 2>&1 || :; }

それが、modprobeへの私自身の追加が考慮されなかった理由かもしれません。しかし、module-init-toolsの更新によって上書きされる可能性があるため、そのファイルを直接変更する必要があるかどうかはわかりません...

1
David142

最後に、モジュールがS14(nfslock)にロードされ、S25(netfs)で使用されるため、S15に挿入されるほぼダミーのinitスクリプトを作成しました(/etc/rc3.d/を参照)。

/etc/init.d/sunrpc_tuning

#!/bin/sh
#
# sunrpc_tuning       Tunes /proc/sys/sunrpc (launched after lockd)
#
# chkconfig: 345 15 85
# description: set values to sunrpc after module is loaded
# probe: true

case "$1" in
   start)
      echo "Setting sunrpc.tcp_slot_table_entries ..."
      /sbin/sysctl -w sunrpc.tcp_slot_table_entries=128
      ;;
   *) ;;
esac

次に:chkconfig --add sunrpc_tuning

1
David142

RHEL5.4を実行していますが、netfsがボリュームをマウントする前に、どういうわけかsysctl.conf設定が(どういうわけか?)適用されているようです。これをどのように確認しましたか?

Nfsマウントが実行される前にsunrpc.tcp_slot_table_entries値を書き込むように、netfs initscriptを変更し、デフォルトの「16」に対して「128」を書き出しました。

  start)
    # Let udev handle any backlog before trying to mount file systems
    /sbin/udevsettle --timeout=30
    [ -n "$NFSFSTAB" ] &&
      {
        [ ! -f /var/lock/subsys/portmap ] && service portmap start
 /sbin/sysctl sunrpc.tcp_slot_table_entries >> /tmp/sunrpc
        action $"Mounting NFS filesystems: " mount -a -t nfs,nfs4
1
jau

/sbin/sysctl -w sunrpc.tcp_slot_table_entries=64/etc/rc.d/rc.localに入れることができます。

0
Mark Wagner

David142が試したのと同様のことを試しましたが、これはRedHat 6.3システムでしたが、S15またはS20でも、sunrpcカーネルモジュールがロードされていないため、まだ設定されていないことがわかりました。 S52netfsが起動してsysctl-pを実行しようとしても、失敗します。

私が試した修正はあなたのものと似ていましたが、modprobeコマンドを追加しました:

#!/bin/bash
#
# set_nfs_parms        Set kernel parmeters for NFS
#
# chkconfig: 235 15 85
# description: At boot time, sunrpc.tcp_slot_table_entries cannot be set since
#              the nfs module is not loaded.  This sets it later in the boot
#              sequence. 
#

# Source function library.
. /etc/rc.d/init.d/functions

case "$1" in
    start)
          #/sbin/sysctl -w sunrpc.tcp_slot_table_entries=128
          /sbin/modprobe sunrpc
          /sbin/sysctl -p
       ;;
    stop)
       ;;
    *)
       echo $"Usage: $0 {start}"
       exit 2
esac
exit $?

その後、再起動後にパラメータが確実に設定されるようです。

0
Carl