Copyright
Copyright © José Luis Lara Carrascal 2007-2025 
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]
* Planificador de E/S, Adaptive Deadline I/O scheduler (ADIOS).
* 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).
[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 está aún disponible para la versión 6.14, ni creo que lo llegue a estar.
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 - (14.2.0) o Clang - (20.1.1)
* Gawk - (5.3.1)
* Make - (4.4.1)
* Bison - (3.8.2)
* Flex - (2.6.4)
Librerías de Desarrollo
* Xorg - (7.7 / xorg-server 21.1.16)
* Freetype2 - (2.13.3)
* GTK+ - (2.24.33) - (si vamos a usar la interfaz gráfica GTK+ con make gconfig)
* Qt5 - (5.15.16) - (si vamos a usar la interfaz gráfica Qt con make xconfig)
* Ncurses - (6.5) - (si vamos a usar la interfaz gráfica Ncurses (en consola) con make menuconfig)
Aplicaciones
* GNU Binutils - (2.44)
* E2fsprog - (1.47.2)
* Kmod - (34.1)
* Mkinitrd - (6.0.93)
* Procps-ng - (4.0.5)
* Udev - (251)
* Util-linux - (2.41)
* Xfsprogs - (6.12.0)
* XZ Utils - (5.6.4)
Descarga
linux-6.14.0-ml.tar.lz
Firma Digital 
linux-6.14.0-ml.tar.lz.asc
Verificar la firma digital del paquete
$ gpg --import manualinux.asc
$ gpg --verify linux-6.14.0-ml.tar.lz.asc linux-6.14.0-ml.tar.lz
|
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. |
arrowlake |
Intel Arrow Lake 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, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 14. |
arrowlake-s |
Intel Arrow Lake S 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, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD,
AVXVNNIINT16, SHA512, SM3, SM4 y extensiones 64-bit. Esta opción
está disponible a partir de GCC 14. |
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. |
clearwaterforest |
Intel
Clearwater 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, ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8,
AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4, USER_MSR,
PREFETCHI y extensiones 64-bit. Esta opción está
disponible a partir de GCC 14 y Clang 18. |
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. |
diamondrapids |
Intel Xeon Diamond Rapids. Esta opción está disponible a partir de Clang 20. |
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. |
graniterapids-d |
Intel Granite Rapids D 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, ENQCMD, CLDEMOTE, PTWRITE,
WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8,
AVX-VNNI, AVX512FP16, AVX512BF16, AMX-FP16, PREFETCHI, AMX-COMPLEX y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 14 y Clang 17. |
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. |
lunarlake |
Intel Lunar Lake. Esta opción está disponible a partir de GCC 14 y es equivalente a la opción arrowlake-s. |
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. |
pantherlake |
Intel
Panther Lake 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, UINTR, AVXIFMA, AVXVNNIINT8,
AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4, PREFETCHI y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 14 y Clang 18. |
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, 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. |
znver5 |
Procesadores basados en
AMD Family 1ah 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, AVXVNNI, MOVDIRI,
MOVDIR64B, AVX512VP2INTERSECT, PREFETCHI) y extensiones 64-bit. Esta
opción está disponible a partir de GCC 14. |
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 axvf linux-6.14.0-ml.tar.lz
# cd linux-6.14.0-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 axvf linux-6.14.0-ml.tar.lz
# cd linux-6.14.0-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 axvf linux-6.14.0-ml.tar.lz
# cd linux-6.14.0-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
|