jump to navigation

Passing parameters to the kernel at run-time on Linux February 7, 2011

Posted by Tournas Dimitrios in Linux.

Sometimes, you might need to  change some of the Linux kernel behavior , a previous article demonstrated how to pass parameters to the kernel at boot time . At run-time we can  load / unload kernel modules , or change some parameters to squeeze out a bit more performance  . The key point for tuning the kernel is the virtual file-system directory  ” /proc ”  , most of the files in /proc are read-only representations of information about your system. There is an exception to this rule: the files in /proc/sys/. The /proc/sys/ directory contains a tree of writable files, each of which represents a different kernel setting.

There are too many kernel settings in /proc/sys/ to cover what each of them does here. Complete coverage for the curious is available in the Red Hat Enterprise Linux Reference Guide.
In total , there are over 500 tunable parameters on an average Linux system . If you want to examine that list more closely issue the command
sysctl -a > param-file” . Open that file with your favorite editor .

While files in /proc/sys/ can be written to and read from directly, the most common method for manipulating them is with the sysctl command. This command allows you to turn on / off numerous kernel parameters on the fly or you can edit a specific file to tune those same parameters . When using sysctl, the settings in /proc/sys/ are referred to by a period-delimited name instead of a filesystem path. The basic usage of the command is  :
sysctl  options  path.to.seting=value

First example : The setting in /proc/sys/fs/file-max which, dictates the maximum number of files that may be opened at once, is referred to by sysctl as simply fs.file-max.

  1. sysctrl  -w  fs.file-max=60000
    The maximum number of open files on this system is now 60,000 (default is 52000)

Second example : Say you want to re-enable <CTL><Alt><Del> that some distributions have disabled . First let’s make sure your distribution has disabled this functionality , do this with the command :

  1. sysctrl  kernel.ctrl-alt-del
    what you should see as output is :  kernel-ctrl-alt-del=0
  2. sysctrl -w kernel.ctrl-alt-del=1
    You can , of course , reset this value again passing the value 0

Third example : The setting in /proc/sys/net/ipv4/ip_forward which, dictates the routing functionality .

  1. sysctrl  -w  net.ipv4.ip_forward=1
    Now  your Linux box  will act as a router (of course , also the routing table must be configured )

However, because /proc is a pseudo-filesystem, existing only in RAM, all non-default settings will be lost when the system reboots. In order to make changes to /proc/sys/ persistent, sysctl must be configured to automatically reinstate settings when the system boots up. Custom sysctl commands can be stored in the /etc/sysctl.conf file, which is read in during system initialization by the sysctl -p command, which is run by /etc/rc.d/rc.sysinit. Each line in sysctl.conf follows the format “path.to.setting = value”. The default sysctl.conf usually looks like this.

# Kernel sysctl configuration file for Red Hat Linux
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 4294967295

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456

To make our change to fs.file-max permanent, we would add the following line to /etc/sysctl.conf.
# Increase maximum filehandles
fs.file-max = 60000

Be aware that altering sysctl.conf has no affect until the system is rebooted or sysctl -p is run manually.



1. Passing parameters to the kernel at boot time on Linux « Tournas Dimitrios - February 7, 2011

[…] At run-time, by writing to files in the /proc and /sys directories. […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s