====== Use /proc/sys and sysctl to modify and set kernel runtime parameters ====== Note: This was a RHCE 7 exam objective until June 2016. It is now removed from the curriculum. ====== Presentation ====== When you want to improve the performance or the characteristics of your server, you need to set the kernel runtime parameters. In order to do this, you’ve got three ways: * through the **/proc** filesystem, * with the **sysctl** command, * through the **/etc/sysctl.conf** file. ====== The /proc Filesystem ====== To get the value of a kernel runtime parameter (here /proc/sys/net/ipv4/ip_forward used for allowing a host to act as an router), type: # cat /proc/sys/net/ipv4/ip_forward To set the value of the same parameter, type: # echo 1 > /proc/sys/net/ipv4/ip_forward Note: **1** is used for **On** and **0** for **off**. This change is instantaneously active but doesn’t persist a reboot. You have to write it into the /etc/rc.d/rc.local file to get it re-applied at each boot. See below for a better solution. ====== The sysctl Command ====== With the sysctl command, you can get all the available kernel runtime parameters with their current value. # sysctl -a | grep vm.swappiness vm.swappiness = 30 But you can also set a kernel runtime parameter with the **-w** option. # sysctl -w vm.swappiness=20 vm.swappiness = 20 Still like the previous method, this change is instantaneously active but doesn’t persist a reboot. You have to write it into the /etc/rc.d/rc.local file to get it re-applied at each boot. See below for a better solution. ====== The /etc/sysctl.conf File ====== To permanently store kernel runtime parameters, you need to write them into the /etc/sysctl.conf file. For example, edit the **/etc/sysctl.conf** file and paste the following line: # allow IPv4 forwarding net.ipv4.ip_forward = 1 **Caution**: Comments are only allowed on a separate line and not at the end of a line! Note: It is not a coincidence if the **net.ipv4.ip_forward** kernel runtime parameter name matches the **/proc/sys/net/ipv4/ip_forward** path name. Then, you need to apply the change: # sysctl -p Many kernel runtime parameters can be set this way. Here are only a few examples: # don't respond to a ping net.ipv4.icmp_echo_ignore_all = 1 # don't respond to a ping to the broadcast address net.ipv4.icmp_echo_ignore_broadcasts = 1 # disable IPv6 for all network interfaces net.ipv6.conf.all.disable_ipv6 = 1 **Note**: As seen before, the **sysctl -a** command gets all the kernel runtime parameters with their current value. By redirecting the output to a file, this is also a good way to back up your configuration before any change. Default kernel runtime configuration is located in the **/usr/lib/sysctl.d** directory and is executed before anything else (see **sysctl –system**). **Caution**: Kernel runtime parameters set in the **/etc/sysctl.conf** file can be overrided by the application of a **tuned** profile.