Server, Desktop o Workstation: El punto de no-retorno de Linux

El día de ayer me encontraba actualizando mi equipo, quitando y poniendo cosas en su sitio, limpiando de cosas que no uso, aplicaciones instaladas “por prueba” o por trabajos anteriores y pensé ¿por qué no de una vez, separar mis dos actividades, trabajo y ocio, en entornos distintos?, aún cuando eso es del común de muchos, en mi caso el “dual boot” no era mi estilo.-

Hasta ayer.

Sobre Escritorios y Servidores

Los sistemas de escritorio suelen ser equipos de gama alta, donde la gente desea el mayor nivel de respuesta de las cosas que ha comprado (tarjetas de video de gama alta, microprocesadores Intel con sandybridge o AMD opteron, etc) y otra serie de cambios que describiremos brevemente.

En cambio, los servidores suelen ser equipos de diferente estructura, con más CPUS, mucho mayor poder de cómputo, donde la mayoría de la latencia del núcleo debe ser dedicada a servicios en segundo plano y a aplicaciones que mantienen una actividad constante sobre el equipo; donde rara vez habrá una interfaz de usuario y mucho menos una aplicación corriendo en el espacio de memoria de usuario.

En cambio, una estación de trabajo (Workstation) es una combinación de ambas cosas, es una computadora de escritorio donde tendremos entornos de programación, ambientes para probar modelos de virtualización (KVM, Virtualbox), donde el equilibrio entre servicios y aplicaciones es más que necesario.

El procesador:

A menos que estés en algún ambiente hostil (como la pista de maiquetía, que está hoy a 47 grados centígrados), el procesador debería mantener un CPUfreq en “performance”, para extraer el máximo a nuestro CPU, o en su defecto en “ondemand” pero con una tasa baja de actualizaciones de velocidad (para disminuir las subidas y bajadas de la frecuencia del CPU).

En el caso del CPUfreq “on demand”, el sampling factor (el factor con el que cambia la frecuencia del CPU) puede ser disminuida a un factor de 10:

echo 10 > /sys/devices/system/cpu/cpufreq/ondemand/sampling_down_factor

Esto hace que el reloj sea evaluado menos veces, haciendo que el CPU se mantenga complementa arriba en caso de estar ocupado y no bajará y subirá constantemente (como cuando el sampling_down_factor = 1).

(sleep 10 && echo -n 25 > /sys/devices/system/cpu/cpufreq/ondemand/up_threshold) &

En otro lado está el threshold, el nivel de carga de CPU necesaria para que la velocidad de reloj sea “elevada”, por defecto es 95 (95% de carga en el CPU), si disminuimos esto (ejemplo: 25%) con sólo un 25% de carga ya estará subiendo el CPU de velocidad.

NOTA: tomen en cuenta que aplicarle más carga al CPU consume más rápido la batería de los equipos portátiles.

Discos y Elevadores:

Linux es un núcleo que puede ser utilizado para diferentes cosas, desde televisores smartTV hasta enrutadores y access points, pasando por servidores y clusters, los “elevadores” es la forma como el kernel Linux gestiona la entrada/salida (I/O) de los datos y desde los discos.

El desarrollador Paolo Valente diseñó un I/O scheduler optimizado de manera agresiva para el trabajo intensivo de escritura en disci de las aplicaciones de escritorio; BFQ (Budget Fair Queueing) I/O scheduler, dicho trabajo no fué aceptado en el árbol general del núcleo Linux pues el código afectaba el desempeño del núcleo en otras áreas críticas como por ejemplo, su uso en servidores.

Pero dicho scheduler puede ser encontrado a manera de “parche” en algunas versiones de Linux, como por ejemplo Liquorix, Liquorix es una versión para Debian del Kernel Zen, un kernel con los parches y optimizaciones más importantes para su uso en desktops, equipos multimedia y alto desempeño para aplicaciones multimedia y juegos.

Luego de instalado el kernel Liquorix, podemos habilitar el scheduler BFQ agregando en el grub:

archivo: /etc/default/grub

GRUB_CMDLINE_LINUX=”numa=on acpi=force acpi_osi=linux apic lapic elevator=bfq”

Agregando “elevator=bfq” en la línea del núcleo, y generando de nuevo el arranque GRUB:

update-grub2

Podemos contar con un scheduler digno de un equipo de escritorio para juegos y multimedia.

Por el contrario, en equipos con hardware especializado para servidores, podemos encontrar el caso contrario, NO NECESITAMOS que el kernel gestione la organización, ordenamiento y agrupamiento de los datos que van a disco, esto es porque contamos con hardware especializado (controladoras SAS, SATA-RAID o SCSI) que puede gestionar correctamente los datos que son entregados “RAW” por el Sistema Operativo; en este caso, el elevador es completamente distinto:

elevator=noop

Con “elevator=noop” el núcleo delega en el hardware subyacente la gestión de almacenamiento en disco (imaginen un RAID-5 y el sistema operativo organiza la data que luego la controladora SAS vuelve a organizar para almacenarla en los stripes del RAID).

Núcleo Liquorix

El núcleo Liquorix es una variante para Debian del fuente del núcleo Zen, una versión del kernel Linux con la mayoría de los parches y optimizaciones para escritorios, sistemas multimedia y para juegos.

Aunque mucha gente lo desconoce, estos núcleos modificados suelen ayudar mucho a las portátiles al ahorro energético, puesto que el CPU “descansa” de procesar todo al delegar correctamente operaciones de video al GPU (debe estar habilitada la aceleración de video en el Xorg) o la gestión de dispositivos al northbridge.

Los servidores no están configurados para pensar en cosas como “ahorro de energía de la batería”, “aceleración de video”, “anti-flicker de la reproducción multimedia” o aceleración de audio con dolby 7.1; pero este tipo de núcleos para escritorio lo están, hay algunos RT (para aplicaciones multimedia, video y sonido).

Para instalar el kernel Liquorix (en la actualidad va por la versión 3.5) simplemente agregamos a nuestros repositorios:

#archivo: /etc/apt/sources.list.d/liquorix.list
deb http://liquorix.net/debian sid main

E instalamos:

aptitude install linux-headers-3.5.0-4.dmz.1-liquorix-amd64 linux-modules-3.5.0-4.dmz.1-liquorix-amd64 linux-headers-liquorix-amd64

La respuesta del CPU

Con Kolivas diseñó un CPU scheduler (gestor del trabajo de los CPU) completamente diferente y más sencillo que la heurística del CFS (Completely Fair Scheduler), este Scheduler es muy óptimo para aplicaciones que requieren acceso directo y multi-hilado al CPU, pero solo es eficiente cuando la cantidad de CPUS sea menor que 16 (¿han visto una portatil con 32 CPUs?); en este caso, el scheduler provee una extremadamente baja latencia y un algoritmo distribuido alrededor de un número fijo de CPUS (o Cores) y no alrededor de un algoritmo heurístico más complejo para determinar la carga de los CPUs.

Tal como BFQ, BFS (Brain-Fuck Scheduler: sugerente nombre, ¿no?) rompe con muchisimas cosas dentro del kernel Linux en su uso para servidores, así que no forma parte del mainline del Kernel, para poder utilizarlo hay que contar con un núcleo que contenga el parche BFS (como el kernel Liquorix).

Grandes bloques de memoria

La memoria de un sistema es gestionada en bloques, en términos generales (y en muchos sistemas operativos), cada bloque de memoria mide 4096bytes, en 1MB de memoria caben 256 bloques; cada bloque es conocido como una página de memoria; cada CPU tiene un “mapa” de páginas de memoria para saber dónde está almacenado qué cosa en cada momento.

Para que un sistema operativo pueda gestionar una gran cantidad de RAM (por encima de 2GB), se pueden hacer 2 cosas: o aumentar el número de páginas que puede almacenar un CPU (algo costoso, implica modificar el comportamiento del hardware) ó hacer las páginas más grandes; cuándo el CPU llena sus “mapas de páginas”, el Sistema Operativo (en este caso el kernel Linux) termina gestionando la memoria vía algoritmos de software, lo que pone a TODO el sistema en un estado “más lento”.

Transparent Huge Pages (THP) permite incrementar el tamaño de las páginas desde 2MB hasta 1GB y permite que las aplicaciones accedan más rápidamente a bloques grandes de memoria, que siguen gestionados por los mapas de memoria del CPU, logrando una mejora notable en el rendimiento general del sistema.

Para habilitar las THP simplemente agregamos al /etc/default/grub y generamos:

GRUB_CMDLINE_LINUX="numa=on acpi=force acpi_osi=linux apic lapic transparent_hugepages=always elevator=bfq

Modos de aceleración exclusivos

En el caso de dispositivos Sandybridge e IvyBridge (como los presentes con algunos CPUs iCore de Intel), hay configuraciones en el video que son exclusivas y que permiten aceleración por hardware, en el caso de Intel se pueden usar el modo UXA (el más nativo) o el más moderno SNA, para contar con aceleración SNA agregamos este archivo al Xorg (/usr/share/X11/xorg.conf.d/):

archivo: 20-device.conf
Section "Device"
    Identifier "Configured Video Device"
    Driver "intel"
    Option "AccelMethod" "SNA"
    Option "BackingStore" "True"
    Option "MonitorLayout" "CRT,LFP"
    Option "XvMC" "on"
    #intel
    Option "SwapbuffersWait" "false"
    Option "TearFree" "true"
EndSection

En algunos casos, la mejora del rendimiento (de contar con el chip requerido) es del 20%.

Conclusiones

Este es solo un conjunto simple de acciones que, aplicadas a un núcleo, podrían mejorar notablemente el performance general del equipo, con el “penalty” que no tendrías “vuelta atrás” para usar tu equipo como un “servidor” o una “estación de trabajo para programadores” (a menos que sean programadores que les guste mucho ver videos en youtube y jugar UrbanTerror); una de las características que ha hecho popular MacOSX está en tomar un núcleo BSD y reducirlo, optimizarlo y compilarlo para el hardware que ESPECIFICAMENTE han diseñado para dicho Sistema Operativo; considero que la cantidad de optimizaciones mayores para escritorio que hay en Linux hoy en día la hacen el blanco ideal para un conjunto de nuevas versiones de GNU/Linux optimizadas y personalizadas “por versión de hardware” y no solo por arquitectura, como se hace ahora.

¿Por qué no tomar un equipo como este, ejemplo, un Thinkpad E420 o uno X1, Sandybridge, Multi-core y reduces y optimizas el kernel para únicamente esta gama de equipos?, sé que es una inversión que empresa alguna realizaría en estos momentos, pero muchos proyectos podrían comenzar a hablar ya de “versiones por hardware”, Canaima podría tener versiones específicas para los equipos de Canaima Educativo.

Espero prontamente reducir y optimizar el kernel liquorix para una versión de hardware específica, pero eso ya será una próxima entrega.

Happy Hacking!

Acerca de phenobarbital

http://about.me/phenobarbital

Publicado el 18 septiembre 2012 en Blogeando!, Cultura Libre, La nota del día, Linux, PlanetaLinux, Software Libre y etiquetado en , , , , , , , . Guarda el enlace permanente. 6 comentarios.

  1. hace unos días (el pana @sinfallas me recomendó en una tarde hablando..) que usara esa misma configuración en el XORG y el vídeo mejoro considerablemente. Ahora con respecto “Grandes bloques de memoria” sería probar… luego te digo🙂

    • El uso de Transparent Hugepages (algo que se me olvidó comentar, después corrijo) es para aplicaciones que son grandes devoradoras de memoria y que necesitan miles de bloques contiguos (libreOffice?, Firefox? xD) lo que facilita enormemente la gestión de la RAM en estos entornos, pero recuerda, THP solo debe ser habilitada cuando tienes un equipo con MÁS de 2GB de RAM, menos de eso, es una pérdida y más bien causará bloqueos en el equipo.
      Saludos!
      Nota: OjO! SNA tampoco es usable por cualquiera (de hecho, si revisas, si pones SNA y no lo soportas, el video cae al fallback EXA) es solo para usuarios que posean tarjetas de video en equipos Sandybridge e IvyBridge.

  2. Excelente tutorial doña voy a probar a ver: soy de esos que prefiere jugar Urban Terror y programar (en ese orden)😄
    Una pregunta: ¿Si uso LVM no puedo usar elevadores?

    • El único elevador que no podrías usar con LVM es noop (y eso, si ese LVM no descansa sobre un RAID por hardware u otra controladora), pero al final, deadline y noop son elevadores para servidores que “me imagino”, no te interesan …

      Yo uso BFQ sobre LVM (mi /home está en LVM, igual que el root, en ext4 optimizado).

      Saludos!

  3. Excelente artículo, lo sé porque he quedado con muchas nuevas preguntas que san google me irá respondiendo. Gracias.

  4. Realmente detallado y practico. Muchas gracias por la informacion.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: