Jul 6, 2009

Optimización del kernel de Linux con sysctl

Los sistemas operativos pertenecientes a la familia GNU/Linux suelen traer configurado por defecto unos valores para los parámetros del kernel que no son los más adecuados, ya que en la mayoría de los casos éstos suelen ser muy dependientes de las características hardware y de los tipos de servicios que se quieren ofrecer; los valores que vienen por defecto no aprovechan al máximo las características de la máquina.

A través del comando sysctl pueden observarse todos los parámetros de configuración del kernel así como sus valores.
[root@centos ~]# sysctl -a
sunrpc.max_resvport = 1023
sunrpc.min_resvport = 665
sunrpc.tcp_slot_table_entries = 16
sunrpc.udp_slot_table_entries = 16
...

A continuación vamos a ver los parámetros más importantes que pueden afectar al rendimiento del sistema, así como sus valores más óptimos. Estas variables del kernel deben de ser configuradas dentro del fichero /etc/sysctl.conf. Una vez que hayamos editado el fichero, ejecutaremos el comando sysctl -p para aplicar los cambios y hacer que éstos sean persistentes después de un reinicio.
[root@centos ~]# cat /etc/sysctl.conf
...
# Buffer de envío de datos (valores mínimo, defecto y máximo - bytes)
net.ipv4.tcp_wmem = 8192 87380 16777216

# Buffer de recepción de datos (valores mínimo, defecto y máximo - bytes)
net.ipv4.tcp_rmem = 8192 87380 16777216

# Límite máximo para el buffer de envío de datos (bytes)
net.core.wmem_max = 16777216

# Límite máximo para el buffer de recepción de datos (bytes)
net.core.rmem_max = 16777216

# Rango de puertos locales que pueden ser empleados
net.ipv4.ip_local_port_range = 1024 65000

# Buffer para los paquetes SYN
net.ipv4.tcp_max_syn_backlog = 2048

# Tiempo que permanece el socket abierto al cerrar una conexión (sg)
net.ipv4.tcp_fin_timeout = 25

# Intervalo para comprobar que una conexión abierta pero no utilizada sigue viva (sg)
net.ipv4.tcp_keepalive_time = 1200

# Número máximo de archivos que el kernel podrá asignar
fs.file-max = 407020

# Límite de empleo de memoria física a partir del cual se recurrirá a la swap
vm.swappiness=10
...


[root@centos ~]# sysctl -p

Con respecto al parámetro fs.file-max, su valor por defecto suele ser un 10% de la cantidad de memoria RAM en KB. Se puede optimizar empleando un 20%.

Por último, vamos a detenernos en uno de las opciones más importantes de cara a la configuración del comportamiento del kernel: vm.swappiness. Este valor se corresponde a un porcentaje comprendido entre 0 y 100, y representa el momento a partir del cual el sistema comenzará a utilizar memoria swap.

Por ejemplo, el valor que viene por defecto es 60, lo que significa que cuando el uso de la memoria física alcance un 40% (sin tener en cuenta la cacheada), se comenzará a utilizar el área swap.

Que un sistema operativo utilice la memoria swap es totalmente contraproducente, ya que esta memoria es un espacio reservado en el disco duro y como tal, los accesos serán muchos más lentos en comparación con la memoria RAM, con lo que el rendimiento general del sistema podrá verse seriamente deteriorado.

No comments:

Post a Comment