# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

sysctl y /proc/sys – modificar parámetros de kernel


El kernel Linux permite modificar una gran cantidad de parámetros sin necesidad de recompilarlo. Estos parámetros afectan al funcionamiento del sistema en mayor o menor medida así que conviene saber el modo de optimizarlos y/o saber como modificarlos. El comando sysctl suele ser la forma más común de hacerlo. Los valores se almacenan en el directorio /proc/sys.

Hay que tener en cuenta que cuando modificamos los parámetros vía sysctl los cambios surten efecto al instante, pero tras un reinicio se pierden, por eso conviene guardar las personalizaciones y cambios en el fichero de configuración de sysctl /etc/sysctl.conf. En alguna otra entrada ya hemos visto algún cambio de estos parámetros, como por ejemplo el valor del swappiness para optimizar el uso de memoria, que hacer ante un kernel panic o ip_conntrack_max.

Lo primero que podemos observar con el comando sysctl -a es un listado de los parámetros configurables junto con su valor actual:

# sysctl -a
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 4000000
kernel.sched_latency_ns = 12000000
kernel.sched_wakeup_granularity_ns = 2000000
kernel.sched_shares_ratelimit = 500000
kernel.sched_tunable_scaling = 1
kernel.sched_shares_thresh = 4
kernel.sched_migration_cost = 500000
...
...

Vamos a trabajar con el ejemplo de la variable para kernel panic. Vamos a modificarlo de 0 a 5 para indicar que ante un kernel panic el sistema se reinicie pasados 5 segundos. Por defecto está a 0:

# sysctl -a | grep panic
kernel.panic = 0

Podemos cambiarlo de dos formas: cambiando el parámetro con sysctl o volcando el “5″ directamente al fichero en /proc/sys:

# echo 5 > /proc/sys/kernel/panic
# sysctl -a | grep panic
kernel.panic = 5
# sysctl -w kernel.panic=5
# sysctl -a | grep panic
kernel.panic = 5

Para guardarlo tras el reinicio tendríamos que añadir la siguiente línea a /etc/sysctl.conf:

kernel.panic = 5

Si únicamente lo añadimos al fichero de configuración y no ejecutamos sysctl ni echo tenemos que actualizar la configuración con sysctl -p para que los cambios sean efectivos al instante:

# sysctl -p
kernel.panic = 5
# sysctl -a | grep panic
kernel.panic = 5

Esta es la forma de utilizar el comando sysctl linux, a partir de aquí solo es necesario utilizarlo para “tunear” aquellos parámetros de kernel que necesitemos.

Cómo utilizar 4GB de RAM o más en CentOS /RHEL / Fedora


Si tienes un equipo con 4GB de RAM o más instalados, y monta un sistema operativo GNU/Linux CentOS/RHEL/Fedora probablemente veas que al mostrar la cantidad de RAM de la que dispone el sistema no llega a mostrar más de 3.3 GB aproximadamente.

Para permitir que nuestro sistema sea compatible con una capacidad de memoria RAM igual o superior a 4GB tenemos que instalar un kernel compilado de forma especial para ello (PAE kernel). La forma de hacerlo es sencilla:

yum install kernel-PAE

Una vez instalado, reiniciamos el sistema y con el comando uname -a comprobamos si ya estamos utilizando el nuevo kernel, y con el comando free verificamos que efectivamente la memoria RAM que detecta el sistema es la correcta.

Entrevista a Linus Torvalds sobre el Kernel Linux


Os dejo un vídeo de una entrevista realizada a Linus Torvalds por la Linux Fundation en la que se charla sobre el Kernel Linux, su evolución, calidad e impresiones:

Mapa interactivo del kernel Linux


Mapa kernel linux

El Kernel Linux es uno de los proyectos Open Source más complejos que existen, y a pesar de la gran cantidad de documentación y libros que existen del Kernel Linux, sigue siendo difícil de comprender para muchos.

Este mapa interactivo, muestra una visión clara de las distintas capas del kernel, funcionalidades, módulos, funciones y llamadas. Cada función en el mapa tiene un enlace directo a su código fuente, y el mapa dispone de Zoom.

Por cierto, está disponible en tamaño poster.

Enlace al mapa interactivo del kernel Linux

Traducción del texto original de Slashdot.