C’est un processus de modification des paramètres kernel dont le but est d’améliorer la performance du système sur un cas d’utilisation particulier (ex serveur base de donnée oracle).
La pluspart de ses paramètres se trouvent dans un fichier dans le répertoire /proc/sys, dont la modification de la valeur consiste à modifier tout simplement le fichier correspondant. Cependant Linux propose l’outil “sysctl” permettant de faire ces modifications de façons plus sûre et fiable.
Quelques commande d’usage :
- sysctl -a
Affiche tous les paramètres avec leur valeur
[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]
#sysctl -a
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 10000000
kernel.sched_latency_ns = 5000000
kernel.sched_wakeup_granularity_ns = 15000000
kernel.sched_tunable_scaling = 1
kernel.sched_features = 3183
kernel.sched_migration_cost = 500000
kernel.sched_nr_migrate = 32
...
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
vm.nr_pdflush_threads = 0
vm.swappiness = 30
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.hugetlb_shm_group = 0
vm.hugepages_treat_as_movable = 0
[/pastacode]
- sysctl -w <param>=val
Permet de modifier la valeur d’un paramètre.
Exemple : activation du routage IP (à condition que le serveur possède plusieurs cartes réseaux).
[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]
#sysctl net|grep forward
net.ipv4.conf.all.forwarding = 0
net.ipv4.conf.all.mc_forwarding = 0
...
net.ipv4.ip_forward = 0
#sysctl -w net.ipv4.ip_forward=1
#sysctl -a|grep forward
net.ipv4.conf.all.forwarding = 0
net.ipv4.conf.all.mc_forwarding = 0
...
net.ipv4.ip_forward = 1
[/pastacode]
- sysctl -n
Affiche uniquement les valeurs des paramètres
- sysctl -N
Affiche uniquement le nom des paramètres
Les modifications seront perdu au prochain redémarrage du serveur. Pour les rendre persistent, il faut les mettre dans le fichier de configuration de sysctl qui est /etc/sysctl.conf.
Comme on a dit au début, les paramètres se trouvent dans /proc/sys/. Ils sont regroupés par catégorie et se trouvent dans leurs répertoires respectifs :
[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]
#pwd
/proc/sys
[admsrv@clay71avm sys]$ ls
abi crypto debug dev fs kernel net sunrpc vm
[admsrv@clay71avm sys]$
[/pastacode]
Il est aussi possible de faire la liaison entre le nom d’un paramètre retourné par sysctl et le fichier contenu dans /proc/sys/ en remplacant le “/” par “.“.
Exemple : avec sysctl net.ipv4.ip_forward correspond à /net/ipv4/ip_forward dans /proc/sys
Avec sysctl, on peut aussi n’afficher que tous les paramètres d’un catégorie donné :
- sysctl abi
Affiche tous les paramètres de la catégorie abi
- sysctl net
Affiche tous les paramètres de la catégorie net
- sysctl kernel
Affiche tous les paramètres de la catégorie kernel
- sysctl vm
Affiche tous les paramètres de la catégorie vm ( tous ce qui est mémoire)
[pastacode lang=”bash” message=”” highlight=”” provider=”manual”]
#sysctl kernel
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 10000000
kernel.sched_latency_ns = 5000000
kernel.sched_wakeup_granularity_ns = 15000000
kernel.sched_tunable_scaling = 1
...
[/pastacode]
Exemples de modification
- # Controls IP packet forwarding (routage)
net.ipv4.ip_forward = 0 - # Controls source route verification
net.ipv4.conf.default.rp_filter = 1 - # Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536 - # Disable response to broadcasts.
net.ipv4.icmp_echo_ignore_broadcasts = 1 - # enable ipV6 forwarding
net.ipv6.conf.all.forwarding = 1 - #Controls the size of a huge page (tenir compte de la taille d’un huge page )
vm.nr_hugepages=512