En los últimos años, Linus Torvalds no ha tenido tiempo de escribir demasiado código nuevo original para el kernel de Linux y, en la actualidad, administra principalmente desarrolladores, proporciona publicaciones detalladas en la lista de correo y revisa el código para fusionarlo con el árbol del kernel junto con tareas relacionadas. Para Linux 6.4, sin embargo, logró escribir un código nuevo.

La semana pasada, Linus Torvalds fusionó su propia rama”x86-rep-insns”con el kernel para la ventana de fusión de Linux 6.4. El enfoque en el código de Torvalds para Linux 6.4 está en limpiar el código de copia de memoria x86. Explicó en la fusión de Git:

“Esto limpia gran parte de nuestro código de copia de memoria x86, en particular para los accesos de los usuarios. Durante mucho tiempo he estado presionando para obtener soporte de microarquitectura para una buena copia y limpieza de memoria, y ha sido visible en cómo el kernel ha usado agresivamente’rep movs’y’rep stos’siempre que ha sido posible.

Y ese soporte de microarquitectura ha ido mejorando a lo largo de los años, hasta el punto de que en la CPU moderna es la mejor opción para una copia de memoria que se convertiría en una llamada de función (en lugar de ser algo que simplemente se puede convertir en instrucciones’mov’individuales) es ahora alinear la secuencia de instrucciones de cadena.

Sin embargo, eso solo tiene sentido cuando tenemos los marcadores modernos para esto: las capacidades x86 FSRM y FSRS (“Fast Short REP MOVS/STOS”).

Esto limpia gran parte de nuestro código histórico, elimina el uso de marcadores heredados (“REP_GOOD”y”ERMS”) de los casos memcpy/memset y reemplaza con esa realidad moderna. Tenga en cuenta que REP_GOOD y ERMS terminan siendo utilizados por los grandes casos conocidos (es decir, copia y compensación de páginas).

La razón por la que gran parte de esto termina siendo sobre los accesos a la memoria del usuario es que los casos normales en el kernel los realiza el compilador (__builtin_memcpy() y __builtin_memset()) y llegamos al punto en el que podemos usar nuestra reescritura de instrucciones para alinearlas para que sean instrucciones de cadena necesitará algo de soporte del compilador.

Por el contrario, las funciones de acceso del usuario están completamente controladas por el código del núcleo, por lo que podemos cambiarlas arbitrariamente”.

La ventana de combinación de Linux 6.4 permanece abierta hasta el próximo fin de semana se seguirán publicando más códigos de funciones.

Categories: IT Info