Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

DesarrolloEmuladoresInternetJuegosMultimediaSistema

Instalar The Regex Coach con WineOptimización RAM - RAMDefrag

Instalar un Kernel en GNU/Linux




Instalar un Kernel en GNU/Linux




Copyright

Copyright © José Luis Lara Carrascal  2007-2024   http://manualinux.es



Sumario

Introducción
Características
Instalación
Configuración del Kernel
Configuración de Project C
Los módulos
Notas de actualización del manual
Enlaces




Introducción  

Hacer un manual genérico de la instalación de un kernel en GNU/Linux resulta bastante complicado, con lo que en este documento voy a explicar de forma clara y concisa cómo actualizo las versiones del kernel en mi sistema. Salvando las distancias posibles con el mundo Debian mucha de la información aquí expuesta debería de resultar válida para todos los usuarios de todas las distribuciones. En ningún momento pretendo crear un manual genérico, sino más bien una radiografía documentada de un proceso que suelo acometer cuando salen las nuevas versiones del kernel de GNU/Linux.

Lo que empezó siendo un simple manual de instalación, se ha convertido en un documento de descarga del código fuente de un kernel personalizado, con características no incluidas en el oficial.



Características  

* Nivel -O3 predefinido de optimización.
* Planificadores de CPU: BORE y Project C (BMQ o PDS). [1]
* Módulo modificado del kernel, it87 (compatible con placas base como la ASUS TUF-B450-PLUS GAMING, para la monitorización de la temperatura).
* Controlador de monitorización de temperatura, voltaje y potencia de la CPU, Zenpower3.
* Sistema de archivos, SpadFS.
* Unidad de RAM y almacenamiento en caché, RapidDisk. [2]
* Controlador de frecuencia de CPU, AMD-P-State, (actualizado a los últimos cambios realizados en la versión de desarrollo del kernel).
* Sistema de archivos, OpenZFS. (versión de desarrollo con código fuente incluido, además del módulo del kernel).

[1] Los dos planificadores están desactivados por defecto. El usuario tendrá que activar uno u otro, en función de sus necesidades. En el caso de BORE, en General Setup >> Scheduler Features >> Burst-Oriented Response Enhancer, y en el caso de Project C, en General Setup >> Scheduler Features >> Alternative CPU Schedulers. Desde la versión 5.0.0 de BORE, ya no es posible desactivarlo a través de sysctl.

[2]  No es compatible con la versión 6.8.2, cuyo fallo ya ha sido notificado al autor del programa.



Instalación  

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado el Kernel para la elaboración de este documento.

* GCC - (13.2.0) o Clang - (18.1.0)
* Gawk - (5.3.0)
* Make - (4.4.1)
* Bison - (3.8.2)
* Flex - (2.6.4)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 21.1.11)
* Freetype2 - (2.13.2)
* GTK+ - (2.24.33) - (si vamos a usar la interfaz gráfica GTK+ con make gconfig)
* Qt5 - (5.15.13) - (si vamos a usar la interfaz gráfica Qt con make xconfig)
* Ncurses - (6.4) - (si vamos a usar la interfaz gráfica Ncurses (en consola) con make menuconfig)

Aplicaciones

* GNU Binutils - (2.42)
* E2fsprog - (1.47.0)
* Kmod - (32)
* Mkinitrd - (6.0.93)
* OpenZFS - (2.2.99-1-git-27032024)
* Procps-ng - (4.0.4)
* Udev - (251)
* Util-linux - (2.39.3)
* Xfsprogs - (6.6.0)
* XZ Utils - (5.6.0)



Descarga

linux-6.8.2-ml.tar.xz

Firma Digital Clave pública PGP

linux-6.8.2-ml.tar.xz.asc

Verificar la firma digital del paquete

$ gpg --import manualinux.asc
$ gpg --verify linux-6.8.2-ml.tar.xz.asc linux-6.8.2-ml.tar.xz

Optimizaciones

# export CFLAGS='-march=znver3 -mtune=znver3'

Donde pone znver3 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
Nota informativa sobre las optimizaciones para GCC
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Nota informativa sobre las optimizaciones para Clang
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.

* Los valores de color azul no son compatibles con Clang.

* Las filas con el fondo de color amarillo son valores exclusivos de Clang y, por lo tanto, no son aplicables con GCC.
Valores CPU
Genéricos
Intel
AMD

Optimizaciones adicionales

Optimizaciones adicionales
GCC
Graphite
# export CFLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
IPA
# export CFLAGS+=' -fipa-pta'
Clang
Polly
# export CFLAGS+=' -mllvm -polly -mllvm -polly-vectorizer=stripmine'

Parámetros adicionales

Establecer el uso de enlazador dinámico para GNU ld
# export LD='ld.bfd'
Desde la versión 5.3 del kernel, éste no es compatible con GNU gold (versiones de Binutils 2.33 o superiores). Si lo tenemos como enlazador dinámico predefinido de nuestro sistema, estableceremos la variable de entorno correspondiente para que sea GNU ld el utilizado en el proceso de compilación.

Establecer el uso de enlazador dinámico para LLD
Clang
# export LD='ld.lld'

Establecer las variables de entorno para el uso de la optimización LTO/ThinLTO con Clang
# export LLVM=1 LLVM_IAS=1
Si se establecen estas variables no es necesario establecer la variable de entorno para LLD y la de uso de compilador para Clang.

Establecer la variable de entorno de uso de compilador para Clang
# export CC=clang



Configuración del Kernel

1) Interfaz Gráfica - Qt

# tar Jxvf linux-6.8.2-ml.tar.xz
# cd linux-6.8.2-ml
# make xconfig

Parámetros de configuración opcionales

Cuando guardemos el archivo de configuración, ejecutamos los siguentes comandos en función de la optimización que vayamos a utilizar (solo hay que hacerlo la primera vez que vayamos a utilizar estas optimizaciones, en las posteriores se cargará la configuración que tengamos del kernel anterior, que ya las incluirá por defecto):

scripts/config -e LTO_CLANG : Activa el uso de la optimización LTO de Clang a partir de la versión 5.12 del kernel.

scripts/config -e LTO_CLANG_THIN : Activa el uso de la optimización ThinLTO de Clang a partir de la versión 5.12 del kernel.

Interfaz Gráfica - Qt


2) Interfaz Gráfica - GTK+

# tar Jxvf linux-6.8.2-ml.tar.xz
# cd linux-6.8.2-ml
# make gconfig


Parámetros de configuración opcionales

Cuando guardemos el archivo de configuración, ejecutamos los siguentes comandos en función de la optimización que vayamos a utilizar (solo hay que hacerlo la primera vez que vayamos a utilizar estas optimizaciones, en las posteriores se cargará la configuración que tengamos del kernel anterior, que ya las incluirá por defecto):

scripts/config -e LTO_CLANG : Activa el uso de la optimización LTO de Clang a partir de la versión 5.12 del kernel.

scripts/config -e LTO_CLANG_THIN : Activa el uso de la optimización ThinLTO de Clang a partir de la versión 5.12 del kernel.

Interfaz Gráfica - GTK2+


3) Interfaz Ncurses - Consola

# tar Jxvf linux-6.8.2-ml.tar.xz
# cd linux-6.8.2-ml
# make menuconfig


Parámetros de configuración opcionales

Cuando guardemos el archivo de configuración, ejecutamos los siguentes comandos en función de la optimización que vayamos a utilizar (solo hay que hacerlo la primera vez que vayamos a utilizar estas optimizaciones, en las posteriores se cargará la configuración que tengamos del kernel anterior, que ya las incluirá por defecto):

scripts/config -e LTO_CLANG : Activa el uso de la optimización LTO de Clang a partir de la versión 5.12 del kernel.

scripts/config -e LTO_CLANG_THIN : Activa el uso de la optimización ThinLTO de Clang a partir de la versión 5.12 del kernel.

Interfaz Gráfica - Ncurses



En la configuración del kernel la cosa ha mejorado mucho respecto a los de la serie 2.4, por la sencilla razón que, cuando ejecutamos la configuración, éste carga por defecto la que tengamos del kernel que estemos usando en nuestro directorio /boot/config-6.x.x. Lo que tendremos que hacer en primer lugar y quizá en último para muchos usuarios nóveles que no quieran complicarse la vida es seleccionar nuestro procesador en Processor type and features >> Processor family (NEW).

Como se puede ver en la captura de pantalla, la variedad de procesadores soportados para compilar el paquete es ridículo, de ahí que se haya incluido en el manual la información necesaria para que el usuario utilice la definición de procesador que le venga en gana, para compilar el paquete. Alternativamente a esto, si no se desea compilar el kernel como se explica en este manual, en este enlace podemos encontrar un parche que recoge todos los procesadores compatibles, cuya definición podremos seleccionar desde esta misma ventana. Eso sí, las optimizaciones adiciones como Graphite, IPA o Polly según compilador tendremos que añadirlas de la misma forma que explico en el manual.


Tipo de Procesador



Configuración de Project C  

Project C se compone de dos planificadores de CPU: BMQ (el predefinido) y PDS, cuyo uso podemos seleccionar en General Setup >> Scheduler features >> Alternative CPU schedulers de la configuración gráfica del kernel. Mi experiencia personal con PDS (derivado de MuQSS) se remonta a cuando tenía el anterior procesador (AMD Phenom X4 965), y era frustrante ver cómo estando compilando un paquete, abría el navegador web y los núcleos de la CPU descendían en velocidad al mínimo, dejando muerto el proceso de compilación. Con el actual procesador que tengo (AMD Ryzen 5 5500) no lo he probado, pero el escaso tiempo que llevo usando BMQ, no noto ninguna diferencia específica con MuQSS que indique una pérdida de rendimiento del sistema. El temporizador lo tengo configurado en 100 Hz. (valor recomendable si buscamos rendimiento), el kernel es preemptible y la opción sched_timeslice está en 2, que es el valor recomendable para este tipo de kernel.

1) Opciones a pasarle al cargador de inicio del kernel

Opciones a pasarle al cargador de inicio del kernel
Parámetro Descripción
sched_timeslice=4 Establece el intervalo de tiempo en milisegundos que tardará el planificador de CPU, en dar prioridad de un proceso a otro. En sistemas PREEMPTIBLES el valor recomendable es 2 (2 ms.). El valor por defecto es 4 (4 ms.).

2) Opciones adicionales que se pueden establecer en tiempo de ejecución y hacer permanentes editando /etc/sysctl.conf

Opciones adicionales que se pueden establecer en tiempo de ejecución y hacer permanentes editando /etc/sysctl.conf
Parámetro Descripción
kernel.yield_type = 1 Establece el tipo de llamada que se realizará a sched_yield. Puede ser:

0 : Ninguna.
1 : Desimpulsa la tarea y la pone en cola de ejecución (valor por defecto).



Los módulos  

Los kernel que traen las distribuciones de serie vienen atestados de infinidad de módulos que nunca vamos a usar, así que lo primero que deberíamos de hacer es tomar nota de los dispositivos que tenemos en nuestro sistema (si no lo tenemos claro dejarlo todo como está y sólo configurar lo antes comentado respecto al tipo de procesador) y conocer de antemano qué módulos están relacionados con los mismos, bastaría ejecutar un lsmod como root para comprobar esto.

Indicar para finalizar lo referente a la configuración que el sistema de archivos que vayamos a usar por defecto debe de estar siempre soportado directamente por el kernel y que en la interfaz GTK+ los módulos se activan con el guión en el cuadrado y el soporte directo del kernel con el otro símbolo como se puede ver en la imagen de abajo, donde XFS está soportado directamente por el kernel y ReiserFS está configurado para ser compilado como módulo.


Módulos

Una vez lo tenemos claro respecto a la configuración pulsamos en File >> Save y esta quedará guardada, ya sólo nos queda salirnos de la interfaz gráfica de configuración y compilar el kernel.



Compilación

# sed -i '5iKBUILD_CFLAGS := $(filter-out -march=znver3 -mtune=znver3, $(KBUILD_CFLAGS))' net/ipv6/Makefile
# sed -e '954s:-flto:& -funified-lto:' -e '954aKBUILD_LDFLAGS    += --lto=thin --thinlto-cache-dir=$(extmod_prefix).thinlto-cache' -i Makefile
# make -j$(nproc) cflags-y="${CFLAGS}"

Explicación de los comandos

sed -i '5iKBUILD_CFLAGS := $(filter-out -march=znver3 -mtune=znver3, $(KBUILD_CFLAGS))' net/ipv6/Makefile : Soluciona el siguiente mensaje de error con Clang 18. Sustituir znver3 por la definición de CPU que utilice cada uno. Más información en este enlace:

PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.    Running pass 'Function Pass Manager' on module 'net/ipv6/ip6_input.o'.
1.    Running pass 'X86 DAG->DAG Instruction Selection' on function '@ip6_rcv_core'

sed -e '954s:-flto:& -funified-lto:' -e '954aKBUILD_LDFLAGS    += --lto=thin --thinlto-cache-dir=$(extmod_prefix).thinlto-cache' -i Makefile : Convierte la optimización LTO en Unified LTO. Sólo aplicable a partir de la versión 17 de Clang.

-j$(nproc) : Establece el número de procesos de compilación en paralelo, en función del número de núcleos e hilos que tenga nuestro procesador, tomando como referencia la información mostrada por el sistema con el comando correspondiente. Si nuestro procesador es mononúcleo de un solo hilo, no añadir esta opción.

cflags-y="${CFLAGS}" : Sincroniza la variable de entorno CFLAGS establecida en el manual, con la variable específica que utiliza el paquete, para añadir optimizaciones adicionales. Si se añaden optimizaciones de CPU, este parámetro sobrescribirá las que se hayan establecido en la interfaz de configuración del kernel, de eso se trata precisamente.

Instalación de los módulos

# make modules_install

Instalación del Kernel  Bloc de Notas Información general sobre el uso de los comandos

# cp arch/x86/boot/bzImage /boot/vmlinuz-6.8.2-ml
# cp .config /boot/config-6.8.2-ml
# cp System.map /boot/System.map-6.8.2-ml
# mkinitrd /boot/initrd-6.8.2-ml.img 6.8.2-ml

Explicación de los comandos

cp arch/x86/boot/bzImage /boot/vmlinuz-6.8.2-ml : Copiamos la imagen del kernel comprimida al directorio /boot, y la renombramos a vmlinuz-6.8.2-ml.

cp .config /boot/config-6.8.2-ml
: Copiamos el archivo de configuración del kernel que hemos compilado al directorio /boot, renombrándolo a config-6.8.2-ml, y que servirá de referencia para futuras compilaciones del kernel.

cp System.map /boot/System.map-6.8.2-ml
: Copiamos el archivo System.map al directorio /boot, renombrándolo a System.map-6.8.2-ml, este archivo contiene toda la información requerida para la carga de los módulos.

mkinitrd /boot/initrd-6.8.2-ml.img 6.8.2-ml
: Creamos la imagen de carga del kernel tomando como referencia el directorio de los módulos instalados (no es necesario indicar la ruta completa del mismo).



Configuración e Instalación de Lilo

Abrimos el archivo /etc/lilo.conf con un editor de texto y añadimos el kernel nuevo (con y sin el framebuffer activado) dejando el actual como segunda opción de arranque, un ejemplo,

# File generated by DrakX/drakboot
# WARNING: do not forget to run lilo after modifying this file

default="Linux"
boot=/dev/disk/by-id/ata-ST1000DM010-2EP102_ZN1EH4Q3
map=/boot/map
keytable=/boot/es-latin1.klt
menu-scheme=wb:bw:wb:bw
prompt
nowarn
timeout=100
message=/boot/message
image=/boot/vmlinuz
    label="Linux"
    root="UUID=2e9b242e-4cb0-4688-8d5d-7d153b3f0e49"
    initrd=/boot/initrd.img
    append="video=vesafb:ywrap,mtrr:3 iommu=memaper zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4 amd_pstate=active amd_prefcore=enable"
    vga=791
    read-only
image=/boot/vmlinuz-6.8.1-ml
    label="Linux-6.8.1"
    root="UUID=2e9b242e-4cb0-4688-8d5d-7d153b3f0e49"
    initrd=/boot/initrd-6.8.1-ml.img
    append="video=vesafb:ywrap,mtrr:3 iommu=memaper zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4 amd_pstate=active amd_prefcore=enable"
    vga=791
    read-only
image=/boot/vmlinuz
    label="Linux-nofb"
    root="UUID=2e9b242e-4cb0-4688-8d5d-7d153b3f0e49"
    initrd=/boot/initrd.img
    append="noapic iommu=memaper zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4 amd_pstate=active amd_prefcore=enable"
    read-only
other=/dev/sda2
    label="Windows-10"
    table=/dev/sda


Lo guardamos y ejecutamos la instalación del cargador de arranque,

# lilo

Para terminar, es recomendable tener siempre las fuentes completas del kernel con éste compilado, aunque esto en sistemas con poco espacio en disco resulte complicado, pues hagan lo que hacía yo antes de comprarme el nuevo disco duro, comprimir el directorio y guardarlo en un cd, cuando haga falta su uso volver a descomprimirlo en su sitio correspondiente.

Desinstalación del Kernel  

Siguiendo el mismo sistema que he instaurado en los manuales de la web, incluyo los scripts de desinstalación, copia de respaldo y restauración de copia de los binarios creados del kernel (módulos incluidos) y los archivos de configuración ubicados en el directorio /boot. Queda excluido de estos el directorio de las fuentes. 

kernel-6.8.2-ml-scripts.tar.gz

$ su
# tar zxvf kernel-6.8.2-ml-scripts.tar.gz
# cd kernel-6.8.2-ml-scripts
# ./Desinstalar_kernel-6.8.2-ml

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf kernel-6.8.2-ml-scripts.tar.gz
# cd kernel-6.8.2-ml-scripts
# ./Respaldar_kernel-6.8.2-ml

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_kernel-6.8.2-ml



Notas de actualización del manual  

Desde el 14-04-2019 se incluye una versión personal con los parches del planificador de CPU, MuQSS de Con Kolivas y el deduplicador de memoria, UKSM de Nai Xia, una alternativa más rápida que KSM, que impide que se utilice más de un proceso de una misma librería compartida cuando hay varias aplicaciones en ejecución dependientes de esa librería, produciendo un significativo ahorro de memoria a costa de un ligerísimo incremento del uso de la CPU. Este último lo tenemos que activar en la configuración del kernel, en Memory Management options >> Enable KSM for page merging >> Choose UKSM/KSM strategy >> Ultra-KSM for page merging.

Espero en próximas actualizaciones del manual, ampliar la información relativa a estos dos nuevos elementos que se incorporan a este documento. La actualización de este manual se hará siempre que esté disponible y funcional el parche de Con Kolivas, es decir, que ya no se actualizará en función de la nueva versión del kernel que aparezca. Por otro lado, la actualización siempre incluirá la última versión del kernel (con punto), cosa que antes no sucedía.



A partir del 01-01-2020 también se ha añadido soporte para el sistema de archivos Reiser4. Para activarlo como módulo nos vamos a File systems >> Reiser4 (EXPERIMENTAL), y hacemos clic dos veces para que se muestre un guión en la casilla. Si tenemos pensando pasar nuestra partición raíz del sistema a este sistema de archivos, volvemos a hacer clic dos veces para que se compile integrado en el kernel. Para más información sobre el montaje de este sistema de archivos me remito a la sección correspondiente de la wiki de la distribución Arch Linux.



Desde el 24-03-2020, se añaden al manual, las optimizaciones de CPU y adicionales incluidas en la mayoría de manuales de la web, además de incluir soporte de instalación con Clang. Reseñar también que el nivel de optimización por defecto pasa a ser el '-O3'. Si el usuario quiere utilizar el -O2, basta con ejecutar el siguiente comando en el directorio raíz del kernel:

# sed -i 's:-O3:-O2:' Makefile

También, a partir de esta fecha, se incluye otra versión personal, con el parche del planificador de CPU, Project C de Alfred Chen, de características similares a MuQSS, pero diferente desempeño y aplicación (no activa por defecto que el kernel sea preemptible y tampoco modifica la frecuencia del temporizador) al que se le añaden el resto de parches incluidos en la versión que incluye el parche de Con Kolivas



Desde el 19-08-2020, se incluye también una versión modificada del controlador de sensores IT87, cuyo código fuente podemos encontrar en este enlace, para poder visualizar correctamente la información de los sensores de placas base como la ASUS TUF B450-PLUS GAMING. Para poder cargar el controlador al inicio del sistema, ejecutamos el siguiente comando como root.

# echo it87 > /etc/modprobe.preload.d/it87

Desde el 31-08-2022, se incluye el código más actualizado, que podemos obtener en este proyecto derivado del primero.



Desde el 01-09-2021, se incluye el soporte del controlador NTFS3 proporcionado por la compañía Paragon Software, para poder leer y escribir en particiones NTFS, que ya ha sido incluido en la rama principal del kernel, a partir de la versión 5.15. Para activarlo como módulo nos vamos a File systems >> NTFS Read-Write file system support, y hacemos clic dos veces para que se muestre un guión en la casilla. También es recomendable marcar la opción activate support of external compression lxz/xpress, para poder copiar contenidos de una partición de sistema de Windows.

Para sustituir las particiones que tengamos montadas con el vetusto y lento controlador, ntfs-3g, por éste, basta editar las entradas del archivo de configuración /etc/fstab y dejarlas así, un ejemplo.

/dev/sdb7 /mnt/win_o ntfs3 noatime,umask=000 0 0

Todas las opciones de montaje las podemos encontrar en este enlace, además de las opciones nativas del comando mount. Los usuarios que tengan montadas las particiones NTFS en locales que no estén en UTF-8, tendrán que añadir lo siguiente:

/dev/sdb7 /mnt/win_o ntfs3 noatime,umask=000,iocharset=iso8859-15 0 0



A partir del 23-09-2021, y, tras el abandono de Con Kolivas, del desarrollo de los parches del planificador de CPU, MuQSS, la versión del kernel incluida en este manual relativa a este proyecto se sustituyó por una que incluye de forma experimental, el planificador de CPU, CacULE, cuyo desarrollo también ha sido abandonado, pero que, de momento, tiene alguien que lo mantiene.



Desde el 04-11-2021, la versión de CacULE (con el parche adaptado a la versión 5.15 del kernel por el mantenedor de la misma) se ha retirado del manual, por problemas de estabilidad del sistema, cuando se hace un uso intensivo del mismo.



Desde el 29-12-2021, se incluye el soporte del controlador de frecuencia de CPU, AMD-P-State, que mejora el rendimiento de los procesadores de AMD basados en la microarquitectura Zen2 y superiores. Para activarlo como módulo nos vamos a Power management and ACPI options  >> CPU frequency scaling >> AMD Processor P-State driver, y hacemos clic dos veces para que se muestre un guión en la casilla.

Para poder cargar el controlador al inicio del sistema, ejecutamos el siguiente comando como root (puede variar según distribución):

# echo amd_pstate > /etc/modprobe.preload.d/amd_pstate

Y, además, usuarios como era mi caso (AMD Ryzen 3 3100), tendremos que pasarle la siguiente opción de inicio al kernel (ya se encargará el controlador de avisarnos si lo hemos configurado para que se inicie automáticamente):

amd_pstate.shared_mem=1

Procurar también que no se cargue el controlador proporcionado por el kernel, acpi-cpufreq, añadiéndolo a la lista negra de módulos que no se deben de cargar:

# echo "blacklist acpi-cpufreq" > /etc/modprobe.d/acpi-cpufreq.conf

Y, por último, lo fundamental, tenemos que activar en la BIOS, las opciones CPPC y CPPC Preferred Cores, para que el módulo pueda funcionar. Opcionalmente también podemos activar Global C-state Control y configurar Power Supply Idle Control que, en toda la información que podemos encontrar en internet en relación a CPPC, vienen siempre configuradas del modo que aparece en la captura. Este controlador ha sido incluido en la rama principal del kernel, a partir de la versión 5.17.

A partir del kernel 6.1.1, este controlador ya no se puede compilar como un módulo sino que hay activarlo, marcando la correspondiente casilla. Y, a partir del kernel 6.1, tendremos que pasarle lo siguiente a los opciones de inicio del kernel.

amd_pstate=passive



Desde el 05-01-2022, se incluye el soporte del controlador de monitorización de temperatura de la CPU, Zenpower3, que muestra el voltaje, la corriente y la potencia de los procesadores de AMD basados en la microarquitectura Zen y superiores. Para activarlo como módulo nos vamos a Device Drivers  >> Hardware Monitoring support >> AMD ZEN family CPU Sensors Driver, y hacemos clic dos veces para que se muestre un guión en la casilla.

Para poder cargar el controlador al inicio del sistema, ejecutamos el siguiente comando como root (puede variar según distribución):

# echo zenpower > /etc/modprobe.preload.d/zenpower

Procurar también que no se cargue el controlador proporcionado por el kernel, k10temp, añadiéndolo a la lista negra de módulos que no se deben de cargar:

# echo "blacklist k10temp" > /etc/modprobe.d/k10temp.conf

Para comprobar que lo estamos utilizando, basta ejecutar el comando sensors, y éste nos mostrará lo siguiente respecto a este controlador:

zenpower-pci-00c3
Adapter: PCI adapter
SVI2_Core:     1.24 V
SVI2_SoC:      1.09 V
Tdie:         +28.2°C  (high = +95.0°C)
Tctl:         +28.2°C
Tccd1:        +27.5°C
SVI2_P_Core:  13.93 W
SVI2_P_SoC:    7.73 W
SVI2_C_Core:  11.86 A
SVI2_C_SoC:    7.06 A

Si estamos utilizando fancontrol para controlar el ventilador o ventiladores de la CPU, tendremos que volver a ejecutar el comando de configuración, pwmconfig, para seleccionar el controlador, zenpower. Además de todo esto, también podemos descargarnos e instalar la aplicación de monitoreo, Zenmonitor3, desde este enlace y compilarla e instalarla de la siguiente forma (necesitaremos las devel de GTK3):

$ tar zxvf zenmonitor3-2.0.0.tar.gz
$ cd zenmonitor3-2.0.0
$ make
$ su -c "make install PREFIX=/usr"

Requiere que el módulo msr esté cargado para poder utilizarla:

# echo msr > /etc/modprobe.preload.d/msr

Y, para poder visualizar todos los datos como usuario ejecutamos el siguiente comando como root:

# setcap cap_sys_rawio,cap_dac_read_search+ep /usr/bin/zenmonitor

No olvidar que, tanto zenpower3 y zenmonitor3, son derivados de los proyectos originales creados por Ondrej Čerman.



Desde el 11-01-2022, se incluye soporte para el sistema de archivos SpadFS, desarrollado por Mikulas Patocka (uno de los creadores del navegador web Links), a partir de su tesis doctoral, cuyas características principales son la sustitución del registro en diario (journaling) que utilizan la mayoría de sistemas de archivos modernos, por un recuento de bloqueos y el uso del algoritmo hash en lugar del clásico btree para la organización de los directorios, además de incluir soporte para la recuperación de directorios y archivos (undelete). Este sistema de archivos lo he conocido de forma casual, al encontrar el parche del mismo en el repositorio de Piotr Górski.

Para activarlo como módulo nos vamos a File systems >> SPADFS file system support, y hacemos clic dos veces para que se muestre un guión en la casilla. Esto sólo activa el módulo, para poder instalar también las utilidades del sistema de archivos, nos descargamos este archivo y lo extraemos para poder compilar e instalar las utilidades incluido en el mismo (también incluye el módulo).

$ tar zxvf spadfs-1.0.18.tar.gz
$ cd spadfs-1.0.18
$ make mkspadfs spadfsck 
$ su -c "make install-userspace"

Para crear un nuevo sistema de archivos, por ejemplo, en /dev/sdb1, ejecutamos el siguiente comando como root:

# mkfs.spadfs /dev/sdb1

Montamos la partición en el lugar que deseemos, por ejemplo, /mnt/datos, con el siguiente comando:

# mount -t spadfs /dev/sdb1 /mnt/datos

Si queremos que se monte de forma automática al inicio del sistema, lo añadimos al archivo /etc/fstab, un ejemplo:

/dev/sdb1 /mnt/datos spadfs umask=000 0 2

La opción "umask=000" permite a cualquier usuario escribir en la partición, de lo contrario, solo el usuario root podrá escribir en la misma. Para poder recuperar los archivos o directorios borrados, basta con desmontar la partición, y ejecutar el siguiente comando como root:

[root@localhost jose]# spadfsck --undelete /dev/sdb1
checking super block...
checking crash count table...
checking apage index...
checking apages...
checking directories and files...
scanning the device...
preparing recovery of lost data...
recovering directories...
RECOVERING DIRECTORY "/LOST+FOUND.0/DIRECTORY.0"
RECOVER? (Y/N/SAME/ALL)

Escribimos ALL y todos los directorios borrados serán restaurados en el directorio LOST+FOUND.0, eso sí sin recuperar el nombre original de los mismos, pero sí su contenido. Los comandos mkspadfs y spadfsck, no muestran la ayuda de sus opciones de línea de comandos, por lo que, es recomendable leerse el manual de usuario disponible en su web, que es el archivo README incluido en el paquete del mismo.



Desde el 23-02-2022, se sustituye el sufijo prjc por ml, de la versión del kernel incluida en este manual, ya que éste contiene más parches además del proporcionado por Alfred Chen, para no crear confusión.



Desde el 11-03-2022, se añade el soporte de Multigenerational LRU, que optimiza el uso de la memoria para evitar sobrecargas del sistema y mejorar el rendimiento del mismo. Para activarlo nos vamos a Memory Management options >> Multigenerational LRU, y hacemos clic en dicha selección. Si queremos que se active por defecto, marcamos también Enable by default, como aparece en la captura de pantalla. De lo contrario tendremos que añadir el siguiente comando a los scripts de inicio del sistema.

echo 1 > /sys/kernel/mm/lru_gen/enable

Desde el kernel 6.1, esta característica está incluida de forma nativa.



Desde el 21-03-2022, se incluye soporte para la utilidad de creación y gestión de discos RAM, RapidDisk, desarrollado por Petros Koutoupis, cuya característica principal es la posibilidad de crear discos de RAM caché para acelerar las operaciones de los discos que tengamos en nuestro sistema. 

Para activarlo como módulo nos vamos a Device Drivers >> Block Devices >> RapidDisk and RapidDisck-Cache, y hacemos clic dos veces para que se muestre un guión en la casilla.

Para poder cargar los módulos al inicio del sistema, ejecutamos los siguientes comandos como root:

# echo rapiddisk > /etc/modprobe.preload.d/rapiddisk
# echo rapiddisk-cache > /etc/modprobe.preload.d/rapiddisk-cache

Esto sólo activa los módulos, para poder instalar también las utilidades de creación y gestión de discos RAM, nos descargamos este archivo y lo extraemos para poder compilar e instalar las utilidades incluido en el mismo (también incluye los módulos). Requiere de las siguientes dependencias para su compilación: libjansson y libmicrohttpd.

$ tar zxvf rapiddisk-9.1.0.tar.gz
$ cd rapiddisk-9.1.0
$ make tools -j$(nproc)
$ su -c "make tools-install"

En la wiki del proyecto podemos encontrar amplia información sobre el uso del programa.



Desde el 25-05-2022, se retira definitivamente el soporte de UKSM. La razón: no hay nadie que se haga cargo del mantenimiento del mismo y las continuas adaptaciones a las versiones que se publican del kernel, cada vez funcionan peor.



Desde el 22-12-2022, se incluye un parche de características similares a UKSM y se mejora el uso del controlador de frecuencia de la CPU, AMD-P-State, con un parche que permite añadir la opción amd_pstate=guided a las opciones de inicio del kernel, mejorando el rendimiento del mismo. Más información en este enlace.



Desde el 09-06-2023, se incluye soporte para el sistema de archivos ZFS, proporcionado por el proyecto, OpenZFS. Para activarlo como módulo nos vamos a File systems >> ZFS  filesystem support, y hacemos clic dos veces para que se muestre un guión en la casilla. Los programas para crear y gestionar los volumenes los tendremos que instalar aparte y esto, merece otro manual que, de momento, no existe en esta web.

Dados los problemas de licencia de ZFS, para poder compilar correctamente el módulo, tenemos que modificar un archivo concreto del módulo de ZFS, con el siguiente comando:

# sed -i 's:"CDDL":"GPL":' include/zfs/zfs_config.h

Recordar que no podremos distribuir de forma pública el kernel en formato binario con soporte de ZFS, pero si lo podremos utilizar de forma privada en nuestro sistema.

 A partir de la última versión del software de OpenZFS (2.2.0-rc1 en adelante), tendremos que activar (si no le tenemos activado) la opción del kernel, General Setup >> Namespaces support >> User namespace , para poder crear sistemas de archivos dentro de la pila (pool) inicial creada o poder montarlos, si ya existen los mismos. Un ejemplo:

[root@localhost jose]# zpool create zfs -o ashift=12 /dev/sde3 /dev/sdf3
[root@localhost jose]# zfs create -o mountpoint=/mnt/cache2 -o compression=zstd -o relatime=on zfs/cache
cannot create 'zfs/cache': permission denied



Desde el 29-08-2023, se sustituye los planificadores de CPU, proporcionados por Project C, por BORE en combinación con EEVDF, dado el abandono de los primeros por parte de su autor. Si no queremos hacer uso de BORE, añadimos lo siguiente, al archivo /etc/sysctl.conf.

# echo kernel.sched_bore=0 >> /etc/sysctl.conf

Las opciones de configuración las podemos encontrar en el enlace al proyecto en GitHub, aunque de primeras, no es necesario tocar nada. El soporte de EEVDF ya está incluido en el kernel desde la versión 6.6. Desde la versión 5.0.0 de BORE, ya no es posible desactivarlo a través de sysctl.



Desde el 02-09-2023 y, salvo milagro, podemos dar por fenecido el soporte de Reiser4, en el kernel personalizado ubicado en este manual. Desde el kernel 5.18, reiser4 no es compatible con el kernel Linux y viendo la nula actividad en el repositorio git de su único mantenedor, Edward Shishkin, dudo mucho que lo vuelva a ser, una pena.



Desde el 27-03-2024, se vuelven a incluir los planificadores de CPU, proporcionados por Project C, ya que parece ser, su autor ha vuelto a retomar el proyecto.



Enlaces  


http://www.kernel.org >> La web del Kernel.

http://www.users.on.net/~ckolivas/kernel >> La web de Con Kolivas.

https://cchalpha.blogspot.com >> El blog de Alfred Chen, mantenedor del planificador de CPU, Project C, de características similares a MuQSS.

https://github.com/sirlucjan/kernel-patches >> Repositorio recopilatorio de parches para el kernel, mantenido por Piotr Górski, y de los que se nutre este manual, cuando el autor original del parche, no actualiza el mismo a la nueva versión del kernel, además de incluir otros parches adicionales bastante interesantes.

https://reiser4.wiki.kernel.org/index.php/Main_Page >> Enlace a la página principal dedicada a Reiser4 en la web del kernel.

https://wiki.archlinux.org/index.php/Reiser4 >> Enlace a la sección dedicada a Reiser4 en la wiki de la distribución Arch Linux.

https://marc.info/?l=reiserfs-devel&m=157780043509663&w=2 >> Enlace al anuncio de lo que será la próxima versión 5 de Reiser4 y cuyos parches experimentales ya están disponibles en SourceForge.

https://www.phoronix.com/scan.php?page=search&q=Reiser4 >> Información relacionada con Reiser4 en la web de Phoronix.

https://github.com/pkoutoupis/rapiddisk >> Enlace al proyecto de RapidDisk en GitHub.

http://www.jikos.cz/~mikulas/spadfs >> La web del sistema de archivos SpadFS.

https://git.exozy.me/a/zenpower3 >> Enlace al proyecto de Zenpower3 en Gitea.

https://github.com/hamadmarri/cacule-cpu-scheduler >> Enlace al proyecto archivado de CacULE en GitHub.

https://github.com/CachyOS/cacule-cpu-scheduler >> Enlace al continuador del proyecto de CacULE en GitHub.

https://github.com/hamadmarri/TT-CPU-Scheduler >> Enlace al proyecto de TT-CPU-Scheduler en GitHub, del mismo autor de CacULE.

https://github.com/firelzrd/bore-scheduler >> Enlace al proyecto de BORE en GitHub, una modificación del planificador de CPU del kernel, CFS, que aumenta el tiempo de respuesta del sistema, en detrimento del rendimiento.

https://xanmod.org >> Enlace a la web de XanMod, un kernel personalizado que contiene el planificador de CPU, CacULE, además de otras optimizaciones incluidas.

https://github.com/zen-kernel/zen-kernel >> Enlace al proyecto de Zen Kernel en GitHub, un kernel personalizado cuyas características podemos encontrar en este enlace.

https://gitlab.com/post-factum/pf-kernel >> Enlace al proyecto de pf-kernel en GitLab, un kernel personalizado cuyas características podemos encontrar en este enlace.

https://browser.geekbench.com/user/340208 >> Enlace a la cuenta de Manualinux en Geekbench, un medidor de rendimiento de nuestro sistema, en línea.


Foro Galería Blog


Actualizado el 27-03-2024

Instalar un Kernel en GNU/Linux

Instalar The Regex Coach con WineOptimización RAM - RAMDefrag