Chatear en RedIrc

lunes, 9 de mayo de 2016

Optimizar nuestro PC y Linux al máximo

Si dispones de un PC con pocos recursos, o bien, te gusta sacar el máximo rendimiento a tu maquina, esta guía te puede servir para conseguir que tu Sistema Operativo Linux vaya más rápido siguiendo algunos consejos y pautas empezando desde el inicio del ordenador, la BIOS, el gestor de arranque y el Sistema Operativo.


La principal clave está en la RAM


Slot de memoria RAM
La RAM (del inglés Random Access Memory) o memoria de acceso aleatorio juega un papel importante ya que es la que almacena la información del sistema operativo, programas y instrucciones del CPU, no cabe duda que si queremos que nuestro PC rinda bien debemos de disponer de suficiente memoria RAM. ¿ Por qué es importante disponer de mucha RAM ?.

Cuando usamos nuestro sistema, habitualmente usamos aplicaciones, por ejemplo Google Chrome para navegar por Internet, al ejecutarse en el sistema se reserva una cantidad de memoria RAM (de mayor o menor medida dependiendo de la aplicación), cuanta más memoria dispongas libre más rápida ira la aplicación así como las que abramos después, en cambio, sí tenemos muy poca, las aplicaciones irán más lentas llegando a un punto que no podrá ejecutar más programas o tardarán una eternidad en abrirse ralentizando el sistema operativo.



1.0 - Configurando la BIOS


No me voy a extender demasiado con esta sección, os contaré las opciones que más se notan en el rendimiento del sistema según mi experiencia. Recomiendo que tengáis a mano el manual de la placa base y os asegureis antes de cambiar nada, si vuestra BIOS tiene la opción de crear perfiles o copias de seguridad hacerla, así si pasa algo podéis regresar, de todas maneras en caso de un problema se puede hacer un HARD-RESET sin problemas mayores.


1.1 - Optimizar la memoria RAM:


Podemos intentar optimizar los DIMM de RAM siempre y cuando la placa base y la memoria admita overclocking (OC), se puede intentar subir un poco la tensión de las RAM (vDIMM) y el FSB (bus principal del sistema), a penas subir 1 Voltio el vDIMM y 50 MHZ el HTT o FSB se puede mejorar la RAM un 25% garantizando una latencia medianamente baja para obtener un buen rendimiento.

El truco consiste en bajar el multiplicador del CPU y subir la frecuencia del bus FSB para equilibrar debido a que al subir el FSB también lo hace el CPU.
[warning headline="Importante"]Informate del fabricante de la RAM la máxima tensión que puede admitir tu memoria y la frecuencia optima/maxima para evitar problemas en la memoria.[/warning]
En las placas modernas y sobre todo en las preparadas para hacer OC ya disponen de perfiles para optimizarlas sin necesidad de bajar frecuencias o tensiones:


Perfil de OC en RAM

De cualquier manera os recomiendo que reviséis el manual de la placa base/BIOS y consulte las especificaciones técnicas de vuestra memoria antes de hacer OC. Podeis comprobar desde linux la velocidad de escritura con dd mapeando a ram con tmpfs:
sudo mount -t tmpfs /mnt/test1 /mnt/test1
dd if=/dev/zero of=/tmp/test1/test bs=1M 
8010+0 registros leídos8009+0 registros escritos8399081472 bytes (8,4 GB, 7,8 GiB) copied, 1,38479 s, 6,1 GB/s



1.2 - Optimizar los discos duros:


Otro aspecto a tener en cuenta es elegir el modo en el que se comunica la controladora del disco, suele ser: IDE, SATA o AHCI, es recomendado elegir AHCI ya que este ofrece más compatibilidad para los nuevos estándares y un rendimiento mucho mayor que el sistema IDE. Para activarlo en la BIOS revisar el manual de la placa base, aunque suele estar en el menú Integrated Peripherals puede variar según modelos:


BIOS, modo ACHI

Salvar y salir de la BIOS (suele ser pulsando la tecla F10). En Linux no deberíamos tener problemas, se debería de cargar el módulo ahci, si no fuera así, añadir el módulo ahci manualmente a la lista de módulos:
echo "ahci" >> /etc/modules
En WIndows lo más seguro que te de un hermoso BSOD (Blue Screen Of Dead>:D, antes de cambiar nada debemos modificar una clave del registro, ejecutar cmd (Alt + F2) y escribir lo siguiente:
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci" -v Start -d 0x0 -t REG_DWORD -f
Ahora si, cambiamos el modo AHCI, no deberías tener problemas al iniciar Windows.


1.3 - Deshabilitar aquello que no uséis:


Las BIOS vienen con una configuración genérica para mantener una compatibilidad con cualquier PC, lo que pasa que en la mayoría de casos tenemos diferentes dispositivos activados que son innecesarios, estos tienen reservado ciertos recursos hardware y memoria que podemos aprovechar para otras cosas, por ejemplo, si tenemos una tarjeta gráfica por PCIe, no tiene sentido tener activada la GPU interna:

Deshabilitar GPU en la BIOS

Con el sonido pasa lo mismo que con la gráfica, si disponemos de una PCI dedicada para ello deshabilitar la interna, así para los puertos serie, paralelo, tarjetas de red, etc ..., cualquier cosa que no uséis para liberar recursos, de esta manera estaremos optimizando el sistema general.



2.0 - Optimizar el sistema operativo


2.1 - Gestor de arranque


Para que el sistema operativo pueda iniciar se necesita un gestor de arranque (bootloader en inglés), este se encarga de preparar y gestionar ciertos parámetros que se pasaran al kernel de Linux. Yo personalmente uso una partición /boot separada por seguridad y velocidad, también uso un FS ext2, aunque se pueda usar ext3, ext4, ReiserFS, etc ..., lo cierto que me va muy bien, de paso compatible para GRUB/2 (ext4fs no es compatible con GRUB).

Una opción a tener en cuenta consiste en separar las particiones para aumentar la seguridad y velocidad , por ejemplo:

/dev/sda3      ext4        /
/dev/sda2      ext2        /boot
/dev/sda1      ext4        /home
/dev/sda1      reiserfs   /var

Al mantener las particiones separadas se lee/escribe de modo asíncrono. Otra opción a tener muy en cuenta es la creación de un sistema RAID 0, pero para esto último necesitas disponer de 2 o mas discos duros de igual caracteristicas.

También se nota el arranque al usar UEFI BIOS sobre el modo legacy, el problema que resulta engorroso sobre todo si quieres instalar otro OS todos deben de instalarse igual y aun no es compatible al 100% en Linux por lo que no lo use.

Para optimizar el sistema de archivos añadiremos elevator=noop al token GRUB_CMDLINE_LINUX_DEFAULT en el archivo /etc/default/grub quedando algo así:


GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"


Actualizamos el grub:
sudo update-grub

elevator=noop usa un algoritmo de planificación de entrada/salida, tiene como objetivo disminuir los tiempos de búsqueda utilizado principalmente sobre memorias Flash, NAND o SDRAM y en dispositivos que carecen de dependencia a movimientos mecánicos como discos de estado sólido o SSD (Solid State Drive), si usas discos magnéticos probar el planificador cfq, el planificador deadline si vas a usar tu equipo como servidor.


2.2 - Optimizar el inicio del sistema:


En el proceso de arranque se cargan entre otras cosas el intérprete de órdenes /bin/bash, este resulta muy lento por lo que conviene cambiarlo por dash (/bin/sh), el uso de dash como el intérprete de órdenes del sistema mejorará el rendimiento general de éste, esto no altera el intérprete de órdenes que utilizan los usuarios. Para usar dash ejecutamos en un terminal: 
sudo dpkg-reconfigure dash 

Si a menudo haces reinicios del sistema en "caliente", el sistema pasa por todas las etapas del cargador de arranque normalmente (stages), carga el kernel y inicia los servicios normalmente, con kexec podemos evitar este proceso que sería más lento ya que proporciona la carga de un kernel en memoria y luego lo carga directamente utilizando la llamada al sistema kexec sin tener que pasar por todo el proceso normal de carga aumentando considerablemente la carga. Para instalarlo:
sudo apt kexec-tools
Por alguna razón no me funciona si kexec se encarga de los reinicios, por lo visto shutdown no soporta kexec-based, por lo que aquí le digo que no:
sudo dpkg-reconfigure kexec-tools
dpkg-reconfigure kexec-tools
Edito el archivo /sbin/reboot y sustituye la función do_stop () por esta:
do_stop () {
 # Message should end with a newline since kFreeBSD may
 # print more stuff (see #323749)
 log_action_msg "Will now restart"
 if [ -x /sbin/kexec ]; then
            kexec -l --append="`cat /proc/cmdline`" --initrd=/boot/initrd.img-`ls /lib/modules | sort -nr | head -n 1` /boot/vmlinuz-`ls /lib/modules | sort -nr | head -n 1`
            sync
            umount -a
            kexec -e
        else
            reboot -d -f -i
        fi
}
Ahora con ejecutar reboot ya debería funcionar.



2.3 - Usar tmpfs:


Tmpfs (antaño shmfs) es un sistema de ficheros soportado en Linux desde la versión 2.4 del kernel, esta se ubica en RAM, la información se pierde al reiniciar de ahí el nombre tmpfs o sistema de ficheros temporal, su uso habitual es el de crear espacios de trabajo donde hay muchos ciclos de I/O en el disco.

Para optimizar la lectura/escritura así como ahorrar ciclos en el disco duro vamos a crear 3 montajes, añadimos lo siguiente en /etc/fstab:

tmpfs   /home/tu_user/.cache      tmpfs   defaults,mode=1777    0   0
tmpfs   /tmp                                 tmpfs   defaults                        0   0
tmpfs   /var/tmp                           tmpfs   defaults                        0   0

Montamos todos los dispositivos del fstab:
sudo mount --all
Al usar este método también nos va a servir para limpiar los archivos temporales al reiniciar, ya que al volverse a montar se pierden los datos al igual que la memoria RAM.

En ~/.cache/ se guardan datos dinámicos como ~/.cache/thumbnails donde se almacenan las previsualizaciones de las imágenes, con esto se puede aumentar la carga en el explorador de archivos y para los que usen Google Chrome también vendrá bien ya que en ~/.cache se almacenan los archivos temporales de este aumentando la carga de contenido redundante de páginas web.

[update headline="Nota"]Si se agota el espacio asignado que por defecto es la mitad de la total de RAM, se usará la memoria de intercambio igual que cualquier otra partición. Se puede usar la opción size para definir un tamaño personalizado.[/update]



2.4 - Uso de prelink y preload:


Prelink y preload son excelentes utilidades que nos van a permitir acelerar la ejecución de aplicaciones ya que enlaza las librerías compartidas necesarias según vamos usando los programas más habituales cargandolos en RAM y ejecutándose más rápidas.

Para instalar en Ubuntu, debian o derivados usamos apt:
sudo apt install prelink preload
Activamos el servicio en el archivo /etc/default/prelink:

PRELINKING=yes 

Exploramos y enlazamos los binarios con las librerías por primera vez ejecutando:
sudo prelink -amvR
En el archivo /etc/prelink.conf se pueden definir librerías o binarios a considerar por defecto. Cada vez que se actualiza un binario debemos ejecutar prelink para que vuelva a enlazar las librerías, por lo que podemos añadir esto a apt para que se ejecute cada vez que hay cambios en algún binario:
echo DPkg::Post-Invoke {"echo Ejecutando prelink...; /etc/cron.daily/prelink";} >> /etc/apt/99prelink
Con preload en principio no he modificado nada, por defecto se ejecuta en segunda plano, hace comprobaciones cada 20 segundos de los procesos menores de 2 MiB, de todas maneras podemos estimar alguna modificación desde el archivo /etc/preload.conf como el ciclo.


2.5 - Sistema de ficheros


Algunos sistemas de ficheros a tener en cuenta:

  • XFS - Proporciona un rendimiento muy rápido en los archivos y sistemas de archivos grandes y es muy rápido en el formato y montaje, en contra es más lento cuando trata con muchos archivos pequeños.
  • ReiserFS - Es muy rápido, especialmente cuando se trata de muchos archivos pequeños. 
  • Btrfs - Parece ser el futuro de los sistemas de archivos de GNU/Linux y se ofrece como una opción para el sistema de archivos de root en todos las instalaciones de las distribuciones más importantes.
  • Ext4: Sistema de archivos rápido y seguro por excelencia de la mayoría de distribuciones Linux, relativamente reciente, es compatible con ext2 y ext3.


Ext4 (Fourth Extended Filesystem), este es una buena elección para la mayoría de usos, la diferencia con su hermano ext3 es que hace uso de diferentes extents y es algo más rápido. Si tienes un FS ext3 se puede portar a la versión 4 sin perder los datos ejecutando lo siguiente:
sudo apt install e2fsprogs
sudo tune2fs -O extents,uninit_bg,dir_index /dev/sdxy
fsck.ext4 -fyD /dev/sdxy
donde /dev/sdxy es la partición a convertir.

Podemos evitar que los archivos y directorios guarden información de la fecha de acceso para evitar lecturas/escrituras reiteradas cada vez que abrimos una carpeta, dejar que Linux haga la magia del cache, esto se nota sobre todo en portátiles, cada vez que lee algo tiene que escribir haciendo trabajar mas de lo necesario el disco duro que de otra manera estaría cacheado por el sistema.

Para deshabilitar los tiempos de acceso añadimos la opción noatime, ejemplo:

/dev/sda1    /                  ext4    defaults,noatime        0   0
/dev/sda2    /home         ext4    defaults,noatime        0   0
tmpfs          /tmp            tmpfs  defaults,relatime        0   0
/dev/sda3   /var/spool    ext4    defaults,relatime        0   0

Nota que /var/spool y /tmp esta relatime, esto es debido a que estas particiones se suele usar para mail y en la mayoría de casos se suele usar el modificador atime para saber cuando un archivo fue leído. Una opción mas "suave" es usar nodiratime para cubrir solo los directorios en vez de noatime. Si usas un SSD no se te olvide añadir también la opción discard.

Otro punto importante a tener en cuenta es la correcta elección del sistema journal en los FS ext3/4, existen 3 tipos:
  1. ordered: Escribe primero los datos asociados a los metadatos en el sistema de archivos antes de hacerlo en el registro. Si la prioridad es garantizar la integridad de datos o bien se carece de un sistema de respaldo de energía confiable, es la opción que debe utilizarse.
  2. journal: Es lo opuesto a ordered, obliga a escribir primero los datos asociados a los metadatos en el registro por diario y luego en el sistema de archivos, por lo cual utiliza un registro por diario más grande y el cual demora más tiempo en recuperarse en caso de una falla del sistema o interrupción de energía.
  3. writeback: Esta opción resulta la más rápida pero aumenta el riesgo de que los datos modificados recientemente se dañen durante un problema, se suele usar sobre servidores de archivos y/o ftps ya que da prioridad a la escritura.
Para modificar el sistema journal ejecutamos lo siguiente suponiendo que queremos usar writeback:
tune2fs -o journal_data_writeback /dev/sdxy
Ejemplo de partición en /etc/fstab

/dev/sda2    /home         ext4    defaults,noatime,data=writeback        0    0


2.6 - Elegir un entorno de escritorio adecuado


El entorno de escritorio es digamos la parte visual que envuelve al sistema dándole un aspecto mejorado. Entre los escritores más destacados que considero cito los siguientes:
  • KDE - Es una de las mas conocidas y completas, pero también la mas pesada y la que mas recursos consume, tenemos que elegir entre aspecto o velocidad.
  • GNOME - Un Entorno bastante usado en muchas distribuciones, dispone de varias bifurcaciones como mate, una de las usada por Linux Mint, pesa algo menos que KDE.
  • XFCE Se característica principalmente por ser rápido y ligero, sin dejar de ser visualmente atractivo y fácil de usar, es una buena elección para aquellos ordenadores con pocos recursos.
  • Enlightenment Entorno muy ligero, atractivo y configurable para X11 y Wayland, este escritorio es una de las principales opciones para ordenadores de bajas prestaciones, ofrece un aspecto muy bueno a costa de pocos recursos.
Podemos instalar cualquier escritorio, incluso usar varios pero lo normal es bajar una distribución que ya lo integre, por ejemplo, para KDE tenemos Kubuntu, para GNOME podemos usar Ubuntu, para usar XFCE tenemos Xubuntu y para Enlightenment podemos instalarlo así (desde Ubuntu Xenial):
sudo add-apt-repository ppa:niko2040/e19
sudo apt-get update
sudo apt-get install enlightenment

2.7 - Deshabilita servicios innecesarios


Cuantos más procesos estén en ejecución más recursos estaremos gastando, es conviene revisar estos y descartar aquellos que no vayamos a utilizar, en Gnome/Ubuntu disponemos de una aplicación llamada gnome-session-properties donde podemos ver los programas que se van a cargar al iniciar la sesión de Linux, algunos se encuentran ocultos por lo que ejecutamos el siguiente comando para poder mostrar todos y lanzamos la aplicación:
sed -i "s/NoDisplay=true/NoDisplay=false/g" /etc/xdg/autostart/*.desktop
gnome-session-properties

Preferencias de las aplicaciones al inicio

Como vemos en la imagen anterior únicamente damos clic en la casilla para deshabilitar la aplicación o servicio, de esta manera evitamos que se inicien, aunque no lo desinstalamos de esta manera.

También conviene hacer un repaso de los servicios del sistema y deshabilitar los que no usemos usando systemd:
sudo systemctl list-units --all --state=active --type=service
Para deshabilitar un servicio, por ejemplo el servicio ModemManager.service:
sudo systemctl disable ModemManager.service
sudo systemctl stop ModemManager.service


2.8 - Variables recomendadas en el kernel


Linux mantiene una memoria de intercambio ubicada en el disco duro, esta es usada cuando ciertos procesos se encuentran inactivos en mucho tiempo o se está agotando la memoria RAM, cuando esto ocurre el sistema operativo lo mueve al disco duro, de ahí que se denomine a esta memoria de intercambio, este proceso resulta muy lento debido a que la memoria del disco duro suele ser lenta en comparación con la física.

Este proceso de intercambio es manejado por una variable del kernel llamada swapping que define un porcentaje. Podemos comprobar la memoria usada con el comando:
swapon -s
Filename Type Size    Used  Priority
/dev/sda4    partition  3811324    0           -1

Por defecto la variable swappiness está definida a un 60%, por lo que cuando el sistema lo supera comenzará a intercambiar memoria con el disco. Si disponemos de suficiente RAM, al menos 4GB este porcentaje conviene bajarlo para que las aplicaciones trabajen mas en RAM y por lo tanto rindan más, un valor de 20 es suficiente:

echo vm.swappiness=20 | sudo tee -a /etc/sysctl.conf 
sudo sysctl -p
cat /proc/sys/vm/swappiness


4 comentarios:

  1. Un artículo muy completo, gracias por compartirlo

    ResponderEliminar
    Respuestas
    1. Me alegro que te guste. Gracias a ti por comentar compañero, nos vemos ;)

      Eliminar