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の更新によって上書きされる可能性があるため、そのファイルを直接変更する必要があるかどうかはわかりません...
最後に、モジュールが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
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
/sbin/sysctl -w sunrpc.tcp_slot_table_entries=64
を/etc/rc.d/rc.local
に入れることができます。
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 $?
その後、再起動後にパラメータが確実に設定されるようです。