7 votos

¿Cómo puedo limitar el uso del disco de la caché de Rosetta 2 oah?

En MacOS 11, Rosetta2 aparentemente almacena en caché los programas traducidos y las bibliotecas compartidas bajo /var/db/oah .

En una instancia de CI basada en M1 donde estamos probando binarios x86_64 por compromiso bajo Rosetta2, este directorio parece crecer sin límites y eventualmente termina consumiendo todo el espacio libre en el disco de la máquina. Actualmente /var/db/oah es de aproximadamente 800 GB y contiene unos 2,4 millones de directorios.

Esperaba que dicha caché tuviera un límite de tamaño y un comportamiento LRU incorporado, o al menos algún tipo de comando administrativo para podarla (¿tal vez basado en el tiempo?) que pudiera programarse, pero hasta ahora no he podido encontrar ningún ajuste para configurar dicho límite para la caché ni ningún comando para interactuar con ella, y mucho menos para limpiarla. Idealmente, nos gustaría no inhibir el almacenamiento en caché o eliminar las traducciones utilizadas recientemente, ya que esperamos que el almacenamiento en caché ofrezca un beneficio de rendimiento cuando se reutiliza el mismo binario, lo que ocurre en nuestro entorno de pruebas.

¿Alguien conoce alguna herramienta o configuración del sistema que nos permita limitar el tamaño del oah caché para Rosetta2, o podarla manualmente, o si es necesario desactivar la caché por completo?

5voto

Jose Chavez Puntos 645

Desgraciadamente, no creo que Apple ofrezca ninguna opción de configuración o herramienta que permita al usuario limitar el tamaño de la caché de Rosetta2, ni herramientas para podarla o similares.

Para este caso de uso particular con un servidor CI, probablemente sugeriría hacer una pequeña adición a su CI build script que elimine sus adiciones a la caché de Rosetta2.

En particular, cada vez que se construye un nuevo ejecutable y se ejecuta por primera vez con Rosetta2, se genera un nuevo .aot aparecerá en /var/db/oah . Una vez que haya terminado de utilizar el producto de compilación, podría simplemente hacer que el build script elimine ese archivo.

Puede encontrar el nombre del archivo rastreando el programa la primera vez que lo ejecute, lo que revelará el nombre del archivo de caché. Otra alternativa es establecer la variable de entorno ROSETTA_PRINT_SEGMENTS antes de ejecutar el programa. Esto mostrará el nombre del .aot a stderr cuando se ejecuta el programa (normalmente se verán múltiples .aot porque se cargan las dependencias, pero el principio es el mismo).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X