Problemas con prefetch y en el rendimiento de Linux

Error, procesador demasiado inteligente. Con este simpático título, Diego Calleja se hace eco de una nota publicada en LWN acerca de unas pruebas realizadas por Andi Kleen e Igno Molnar, dos reconocidos hackers del kernel donde dejan bastante claro que las técnicas de prefetch utilizadas no solo no mejoran el rendimiento de Linux si no que en algunos casos incluso lo empeoran.

Las instrucciones de prefetch son herramientas que permiten a los programadores (y compiladores) optimizar el tiempo de acceso a memoria. Por ejemplo, cuando se accede a un elemento en memoria de una lista, también se busca el siguiente elemento por que es muy probable que se se vaya a utilizar muy pronto. Esto se hace haciendo un prefetch del siguiente elemento explícitamente. Resulta que los procesadores modernos cuentan con complejísimos sistemas que hacen análisis heurísticos del código y automáticamente hacen los prefetchs  más eficazmente que cualquier programador o compilador y estas optimizaciones manuales influyen negativamente en esos sistemas.

Con motivo de esto, en la versión 3.0 del kernel se están eliminando estas instrucciones en algunos lugares donde se demostró que eran contraproducentes. En muchos lugares todavía son necesarias y probablemente lo sigan siendo por mucho tiempo.

Comentarios