LINUX KERNEL-

Recientemente, el kernel de Linux de la línea principal ha visto muchas mejoras en su conjunto de características al compilarlo bajo Clang de LLVM en lugar de GCC como tradicionalmente el único compilador compatible. La característica más reciente que se trajo al kernel de Linux cuando se usa Clang es finalmente permitir el uso de optimizaciones guiadas por perfiles de compilador (PGO) para obtener un rendimiento aún mayor del sistema al permitir que el compilador aproveche los perfiles/métricas del mundo real recopilados para hacer Decisiones de optimización/generación de código más informadas.

Al hacer Clang en el kernel de Linux, recientemente se ha introducido soporte para optimizaciones de tiempo de enlace (LTO) como otra ganancia de rendimiento. A su vez, esto también permitió que compatibilidad con Clang Control Flow Integrity (CFI) también aterriza en el núcleo de la línea principal. En el pasado, había parches para el kernel de Linux para admitir la funcionalidad LTO y PGO de GCC, pero no se habían generalizado.

El soporte de Clang PGO para el kernel de Linux reside actualmente en for-next/clang/features de Kees Cook de Google. Este soporte de Clang PGO para el kernel fue trabajado por ingenieros de Google donde durante años han estado usando Clang para construir el kernel de Linux y sus otros componentes para Android y Chrome OS. Dada la marcación para el siguiente, parece que este soporte de PGO para el kernel se enviará para la próxima ventana de fusión de Linux 5.14.

La infraestructura de Clang PGO permite recopilar datos de perfil sin procesar a través de /sys/kernel/debug/pgo/profraw. . Luego, esos datos de perfil sin procesar deben procesarse utilizando la herramienta llvm-profdata , en la que también se pueden fusionar varios perfiles. Al reconstruir para el kernel optimizado para PGO, los datos de perfil procesados ​​se pueden devolver a través de los indicadores del compilador, como make LLVM=1 KCFLAGS=-fprofile-use=vmlinux.profdata .

Inicialmente, este Clang PGO para el soporte del kernel de Linux está limitado a x86/x86_64 hasta que se verifique en otras arquitecturas.

Todavía hay más mejoras pendientes para este soporte de PGO del kernel de Linux que aún no están en esa rama de Git, como datos del perfil del módulo . Con el código actualmente preparado, los datos de perfil de los módulos del kernel no se manejan correctamente, pero esa serie de parches pendientes aborda que los módulos del kernel también pueden beneficiarse adecuadamente de PGO.

Para resumir, este trabajo que con suerte aterrizará en Linux 5.14 permite Optimizaciones guiadas por perfiles para trabajar con el compilador de Clang. Los interesados ​​pueden construir un kernel con esta nueva infraestructura PGO, arrancar ese kernel y ejecutar sus cargas de trabajo deseadas/relevantes, recopilar los perfiles y procesarlos, y luego reconstruir el kernel aprovechando dichos datos de perfil. Idealmente, esta compilación de kernel habilitada para PGO debería tener algunos beneficios de rendimiento gracias a que Clang puede tomar decisiones más inteligentes gracias a los datos recopilados.

Será interesante comparar este soporte de Clang PGO para el kernel de Linux para ver cómo funciona. PGO realmente puede ayudar al rendimiento de la aplicación para bases de código suficientemente complejas y donde se pueden recopilar perfiles precisos.

Categories: IT Info