Copyright
Copyright © José
Luis Lara Carrascal 2007-2023 
Sumario
Introducción
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.
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.1.0) o Clang - (16.0.5)
* Gawk - (5.2.2)
* Make - (4.4.1)
* Bison - (3.8.2)
* Flex - (2.6.4)
Librerías
de Desarrollo
*
Xorg - (7.7 / xorg-server 21.1.8)
* Freetype2 - (2.13.0)
* GTK+ - (2.24.33) - (si vamos a usar la
interfaz gráfica GTK+ con make
gconfig)
* Qt5 - (5.15.9) - (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
* Binutils - (2.40)
* E2fsprog - (1.47.0)
* Kmod
- (30)
* Mkinitrd - (6.0.93)
* Procps-ng - (4.0.3)
* Reiser4progs
- (1.2.2)
* Udev
- (173)
* Util-linux
- (2.38.1)
* Xfsprogs - (6.3.0)
* XZ Utils - (5.4.3)
Descarga
linux-6.3.6-ml.tar.xz
Firma
Digital 
linux-6.3.6-ml.tar.xz.asc
Verificar la
firma digital del paquete
$
gpg --import manualinux.asc
$ gpg --verify linux-6.3.6-ml.tar.xz.asc linux-6.3.6-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 |
generic |
Produce un código binario
optimizado para la mayor parte de procesadores existentes. Utilizar
este valor si no sabemos el nombre del procesador que tenemos en
nuestro equipo. Este valor sólo es aplicable en la opción
'-mtune=', si utilizamos GCC. Esta opción está disponible a partir de GCC 4.2. |
native |
Produce un código binario
optimizado para el procesador que tengamos en nuestro sistema, siendo
éste detectado utilizando la instrucción cpuid.
Procesadores antiguos pueden no ser detectados utilizando este valor.
Esta opción está disponible a partir de GCC 4.2. |
x86-64 |
Procesador genérico con extensiones 64-bit. Esta opción está disponible a partir de GCC 8 y Clang 1.9. |
x86-64-v2 |
Procesador genérico con con
soporte de instrucciones X86-64 (MMX, SSE, SSE2, LAHFSAHF, POPCNT,
SSE3, SSE4.1, SSE4.2, SSSE3) y extensiones 64-bit. Esta opción
está disponible a partir de GCC 11 y Clang 12. |
x86-64-v3 |
Procesador genérico con con
soporte de instrucciones X86-64 (MMX, SSE, SSE2, LAHFSAHF, POPCNT,
SSE3, SSE4.1, SSE4.2, SSSE3, AVX, AVX2, F16C, FMA, LZCNT, MOVBE, XSAVE,
XSAVEC, FMA4) y extensiones 64-bit. Esta opción está
disponible a partir de GCC 11 y Clang 12. |
x86-64-v4 |
Procesador genérico con con
soporte de instrucciones X86-64 (MMX, SSE, SSE2, LAHFSAHF, POPCNT,
SSE3, SSE4.1, SSE4.2, SSSE3, AVX, AVX2, F16C, FMA, LZCNT, MOVBE, XSAVE,
XSAVEC, AVX512*, FMA4) y extensiones 64-bit. Esta opción
está disponible a partir de GCC 11 y Clang 12. |
Intel |
alderlake |
Intel Alderlake con soporte de
instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI,
AVX512BF16, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE,
PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE,
AMX-INT8, AVX-VNNI) y extensiones 64-bit. Esta opción
está disponible a partir de GCC 11 y Clang 12. |
atom |
Intel Atom con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y extensiones
64-bit. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición bonnell. |
bonnell |
Intel Bonnell con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 y extensiones
64-bit. Esta opción está disponible a partir de GCC 4.9. |
broadwell |
Intel Broadwell con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
RDSEED, ADCX, PREFETCHW y extensiones 64-bit. Esta opción
está disponible a partir de GCC 4.9 y Clang 3.6. |
cannonlake |
Intel Cannonlake Server con soporte
de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
UMIP y extensiones 64-bit. Esta opción está
disponible a partir de GCC 8 y Clang 3.9. |
cascadelake |
Intel Cascadelake con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI y extensiones
64-bit. Esta opción está disponible a partir de GCC 9 y Clang 8. |
cooperlake |
Intel Cooper
Lake con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND,
FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD,
AVX512VNNI, AVX512BF16 y extensiones 64-bit. Esta opción
está disponible a partir de GCC 10 y Clang 9. |
core2 |
Intel Core2 con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y extensiones 64-bit. Esta
opción está disponible a partir de GCC 4.3. |
core-avx2 |
Intel Core (Haswell). Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición haswell. |
core-avx-i |
Intel Core (ivyBridge)
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones
64-bit. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición ivybridge. |
corei7 |
Intel Core i7 con soporte
de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 y SSE4.2 y
extensiones 64-bit. Soporta también los procesadores Intel Core
i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición nehalem. |
corei7-avx |
Intel Core i7 con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES y
PCLMUL y extensiones 64-bit. Soporta también los procesadores
Intel Core i3 e i5. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición sandybridge. |
emeraldrapids |
Intel Emerald Rapids. Esta opción está disponible a partir de GCC 13 y Clang 16. |
goldmont |
Intel Goldmont con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE y extensiones
64-bit. Esta opción está disponible a partir de GCC 9 y Clang 5. |
goldmont-plus |
Intel Goldmont Plus con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE, RDPID,
SGX, UMIP y extensiones 64-bit. Esta opción está
disponible a partir de GCC 9 y Clang 7. |
grandridge |
Intel Grand Ridge con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,
AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, RAOINT y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 13 y Clang 16. |
graniterapids |
Intel Grand Ridge con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C,
AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES,
CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES,
AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG,
WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD,
CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16,
AMX-TILE, AMX-INT8, AVX-VNNI, AVX512-FP16, AVX512BF16, AMX-FP16,
PREFETCHI y extensiones 64-bit. Esta opción está
disponible a partir de GCC 13 y Clang 16. |
haswell |
Intel Haswell con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C y
extensiones 64-bit. Esta opción está disponible a
partir de GCC 4.9. |
i386 |
Intel i386.
|
i486 |
Intel i486. |
i586, pentium |
Intel Pentium sin soporte de instrucciones MMX. |
i686 |
Produce un código binario
optimizado para la mayor parte de procesadores compatibles con la serie
80686 de Intel. Todos los actuales lo son. |
icelake-client |
Intel Icelake Client con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG,
AVX512VNNI, VPCLMULQDQ, VAES y extensiones 64-bit. Esta
opción está disponible a partir de GCC 8 y Clang 7. |
icelake-server |
Intel Icelake Server con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA,
CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG,
AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG, WBNOINVD y extensiones
64-bit. Esta opción está disponible a partir de GCC 8 y Clang 7. |
intel |
Intel Haswell y Silvermont. Este
valor sólo es aplicable en la opción '-mtune='. Esta
opción está disponible a partir de GCC 4.9. |
ivybridge |
Intel Ivy Bridge con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones 64-bit. Esta
opción está disponible a partir de GCC 4.9. |
knl |
Intel Knights Landing con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER y extensiones
64-bit. Esta opción está disponible a partir de GCC 5 y Clang 3.4. |
knm |
Intel Knights Mill con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD,
AVX5124VNNIW, AVX5124FMAPS, AVX512VPOPCNTDQ y extensiones 64-bit. Esta
opción está disponible a partir de GCC 8 y Clang 6. |
lakemont |
Intel Quark Lakemont MCU, basado en el procesador Intel Pentium. Esta opción está disponible a partir de GCC 6 y Clang 3.9. |
meteorlake |
Intel Meteor Lake. Esta opción está disponible a partir de GCC 13 y Clang 16. |
nehalem |
Intel Nehalem con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT y
extensiones 64-bit. Esta opción está disponible a
partir de GCC 4.9. |
nocona |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2, SSE3 y extensiones 64-bit. |
penryn |
Intel Penryn con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y SSE4.1. |
pentiumpro |
Intel PentiumPro. |
pentium2 |
Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX. |
pentium3, pentium3m |
Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE. |
pentium4, pentium4m |
Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2. |
pentium-m |
Versión de bajo consumo de
Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2. Utilizado
por los portátiles Centrino. |
pentium-mmx |
Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX. |
prescott |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
raptorlake |
Intel Raptor Lake. Esta opción está disponible a partir de GCC 13 y Clang 16. |
rocketlake |
Intel Rocket Lake con soporte de
instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 11 y Clang 13. |
sandybridge |
Intel Sandy Bridge con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
AES, PCLMUL y extensiones 64-bit. Esta opción está
disponible a partir de GCC 4.9 y Clang 3.6. |
sapphirerapids |
Intel Sapphire Rapids con soporte
de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI,
AVX512BF16, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE,
PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE,
AMX-INT8 and AVX-VNNI) y extensiones 64-bit. Esta opción
está disponible a partir de GCC 11 y Clang 12. |
silvermont |
Intel Silvermont con soporte de
instrucciones MOVBE, MMX, SSE, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PCLMU, RDRND y extensiones
64-bit. Esta opción está disponible a partir de GCC 4.9 y Clang 3.6. |
sierraforest |
Intel Sierra Forest con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT,
FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B,
CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT,
PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL,
AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD y extensiones
64-bit. Esta opción está disponible a partir de GCC 13 y Clang 16. |
skylake |
Intel Skylake con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES y extensiones
64-bit. Esta opción está disponible a partir de GCC 6 y Clang 3.6. |
skylake-avx512 |
Intel Skylake Server con soporte
de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C,
RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL,
AVX512BW, AVX512DQ, AVX512CD y extensiones 64-bit. Esta opción
está disponible a partir de GCC 6 y Clang 3.9. |
tigerlake |
Intel Tiger Lake
con soporte de instrucciones OVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES,
AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG, WBNOINVD, MOVDIRI,
MOVDIR64B, AVX512VP2INTERSECT y extensiones 64-bit. Esta opción
está disponible a partir de GCC 10 y Clang 10. |
tremont |
Intel Tremont con soporte de
instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE, RDPID,
SGX, UMIP, GFNI-SSE, CLWB, ENCLV y extensiones 64-bit. Esta
opción está disponible a partir de GCC 9 y Clang 7. |
westmere |
Intel Westmere con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
PCLMUL y extensiones 64-bit. Esta opción está
disponible a partir de GCC 4.9. |
yonah |
Procesadores basados en la microarquitectura de Pentium M, con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
AMD |
amdfam10, barcelona |
Procesadores basados en AMD Family
10h core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, SSE3,
SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones 64-bit). Esta
opción está disponible a partir de GCC 4.3. La definición barcelona está disponible a partir de Clang 3.6. |
athlon, athlon-tbird |
AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch. |
athlon4, athlon-xp, athlon-mp |
Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE. |
bdver1 |
Procesadores basados en AMD Family
15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES,
PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
y extensiones 64-bit). Esta opción está disponible a
partir de GCC 4.7. |
bdver2 |
Procesadores basados en AMD Family
15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP,
AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción
está disponible a partir de GCC 4.7. |
bdver3 |
Procesadores basados en AMD Family
15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES,
PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM
y extensiones 64-bit). Esta opción está disponible a
partir de GCC 4.8 y Clang 3.4. |
bdver4 |
Procesadores basados en AMD Family
15h core con soporte de instrucciones x86-64 (BMI, BMI2, TBM, F16C,
FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir de GCC 4.9 y Clang 3.5. |
btver1 |
Procesadores basados en AMD Family
14h core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, SSE3,
SSE4A, CX16, ABM y extensiones 64-bit). Esta opción
está disponible a partir de GCC 4.6. |
btver2 |
Procesadores basados en AMD Family
16h core con soporte de instrucciones x86-64 (MOVBE, F16C, BMI, AVX,
PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE,
MMX y extensiones 64-bit). Esta opción está
disponible a partir de GCC 4.8. |
geode |
AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3. |
k6 |
AMD K6 con soporte de instrucciones MMX. |
k6-2, k6-3 |
Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!. |
k8, opteron, athlon64, athlon-fx |
Procesadores basados en AMD K8 core
con soporte de instrucciones x86-64 (MMX, SSE, SSE2, 3DNow!, enhanced
3DNow! y extensiones 64-bit). |
k8-sse3, opteron-sse3, athlon64-sse3 |
Versiones mejoradas de AMD K8 core
con soporte de instrucciones SSE3. Esta opción está
disponible a partir de GCC 4.3. |
znver1 |
Procesadores basados en AMD Family
17h core con soporte de instrucciones x86-64 (BMI, BMI2, F16C, FMA,
FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL,
CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM,
XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones 64-bit). Esta
opción está disponible a partir de GCC 6 y Clang 4. |
znver2 |
Procesadores basados en AMD Family
17h core con soporte de instrucciones x86-64 (BMI, BMI2, ,CLWB, F16C,
FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones
64-bit). Esta opción está disponible a partir de GCC 9 y Clang 9. |
znver3 |
Procesadores basados en AMD Family
19h core con soporte de instrucciones x86-64 (BMI, BMI2, CLWB, F16C,
FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, WBNOINVD, PKU,
VPCLMULQDQ, VAES) y extensiones 64-bit. Esta opción
está disponible a partir de GCC 11 y Clang 12. |
znver4 |
Procesadores basados en AMD Family
19h core con soporte de instrucciones x86-64 (BMI, BMI2, CLWB, F16C,
FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, WBNOINVD, PKU,
VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, AVX512BW,
AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI,
AVX512BITALG, AVX512VPOPCNTDQ, GFNI) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 12.3 y Clang 16. |
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. En cambio, si que es necesario
establecer la de uso de Ccache con Clang. |
Establecer la variable de entorno de uso de
compilador para Clang |
# export
CC=clang |
Si utilizamos Clang con Ccache,
establecemos la variable de entorno correspondiente de uso de
compilador. |
# export
CC="ccache clang" |
Configuración
del Kernel
1) Interfaz
Gráfica -
Qt
#
tar Jxvf linux-6.3.6-ml.tar.xz
# cd linux-6.3.6-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.
2) Interfaz
Gráfica -
GTK+
#
tar Jxvf linux-6.3.6-ml.tar.xz
# cd linux-6.3.6-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.
3) Interfaz
Ncurses - Consola
#
tar Jxvf linux-6.3.6-ml.tar.xz
# cd linux-6.3.6-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.
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.
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).
2 : Establece la tarea de omisión de la cola de ejecución.
|
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.
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
#
make -j$(nproc) cflags-y="${CFLAGS}" |
Explicación de los
comandos
-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 sobreescribirá las
que se hayan establecido en la interfaz de configuración del
kernel, de eso se trata precisamente.
Instalación
de los módulos
Instalación
del Kernel 
#
cp arch/x86/boot/bzImage /boot/vmlinuz-6.3.6-ml
# cp .config /boot/config-6.3.6-ml
# cp System.map /boot/System.map-6.3.6-ml
# mkinitrd /boot/initrd-6.3.6-ml.img 6.3.6-ml |
Explicación de los
comandos
cp
arch/x86/boot/bzImage /boot/vmlinuz-6.3.6-ml : Copiamos
la imagen del kernel comprimida al directorio /boot, y
la renombramos a vmlinuz-6.3.6-ml.
cp .config /boot/config-6.3.6-ml
: Copiamos el archivo de configuración del kernel que hemos
compilado al directorio /boot, renombrándolo
a config-6.3.6-ml, y que
servirá de referencia para futuras compilaciones del kernel.
cp System.map
/boot/System.map-6.3.6-ml
: Copiamos el archivo System.map
al directorio /boot,
renombrándolo a System.map-6.3.6-ml,
este archivo contiene toda la información requerida para la
carga de los módulos.
mkinitrd
/boot/initrd-6.3.6-ml.img 6.3.6-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 sched_timeslice=2
clocksource=tsc tsc=reliable amd_pstate=guided"
vga=791
read-only
image=/boot/vmlinuz-6.3.5-ml
label="Linux-6.3.5"
root="UUID=2e9b242e-4cb0-4688-8d5d-7d153b3f0e49"
initrd=/boot/initrd-6.3.5-ml.img
append="video=vesafb:ywrap,mtrr:3 iommu=memaper zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4
sched_timeslice=2 clocksource=tsc tsc=reliable amd_pstate=guided"
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
sched_timeslice=2 clocksource=tsc tsc=reliable amd_pstate=guided"
read-only
other=/dev/sda2
label="Windows-10"
table=/dev/sda
|
Lo guardamos y ejecutamos la instalación del cargador de
arranque,
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.3.6-ml-scripts.tar.gz
$ su
# tar zxvf kernel-6.3.6-ml-scripts.tar.gz
# cd kernel-6.3.6-ml-scripts
# ./Desinstalar_kernel-6.3.6-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.3.6-ml-scripts.tar.gz
# cd kernel-6.3.6-ml-scripts
# ./Respaldar_kernel-6.3.6-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.3.6-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):
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.
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.17.tar.gz
$ cd spadfs-1.0.17
$ 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:
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.
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://github.com/Ta180m/zenpower3
>> Enlace al
proyecto de Zenpower3 en
GitHub.
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://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.
|