Назад | Перейти на главную страницу

Постоянные изменения в / proc / sys / sunrpc / tcp_slot_table_entries

Я пытаюсь постоянно менять sunrpc.tcp_slot_table_entries в Linux CentOS 5.5. Это значение было признано важным для производительности наших клиентов NFS и должно быть установлено до завершения монтирования NFS.

Просто поместив ценность в /etc/sysctl.conf не работает, потому что /etc/rc.d/rc.sysinit (который выполняет sysctl -p) выполняется до загрузки модуля sunrpc.

Та же проблема с RHEL 4:

Я пытался:

И я бы предпочел не изменять /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 ...

Я использую RHEL5.4, и мне кажется, что каким-то образом настройки sysctl.conf применяются (каким-то образом?) До того, как netfs смонтирует тома. Как вы это проверили?

Я изменил сценарий netfs initscript, чтобы записать значение sunrpc.tcp_slot_table_entries перед выполнением монтирования nfs, и он записал «128» вместо значения по умолчанию «16».

  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

Наконец, я создал почти фиктивный сценарий инициализации, вставленный в S15 (см. В /etc/rc3.d/), поскольку модуль загружен в S14 (nfslock) и используется в S25 (netfs).

/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

Я пробовал что-то похожее на то, что пробовал 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 $?

После этого параметр вроде бы надежно устанавливается после перезагрузки.

Вы могли бы положить /sbin/sysctl -w sunrpc.tcp_slot_table_entries=64 в /etc/rc.d/rc.local.