¿Se puede influir en el comportamiento de almacenamiento en caché del sistema de archivos de Mac OS X / Darwin?

Tengo el siguiente problema: cuando ejecuto procesos que consumen mucha memoria, Mac OS X parece negarse a liberar una gran parte del caché del sistema de archivos:

monitor de actividad

De hecho, en lugar de dejar ir los ~ 30 GB de memoria inactiva, prefiere intercambiar 45 GB (que estaban aumentando en el momento capturado en la imagen).

La ejecución purgeliberó una gran parte de esa memoria, lo que llevó a ~ 15 GB de memoria libre y Mac OS X finalmente se detuvo para molestarme con ese cuadro de diálogo OOM realmente inútil que me pedía que saliera de una de mis aplicaciones GUI...

Cuadro de diálogo OOM inútil

¿Hay alguna forma en que se le pueda indicar al kernel que insista menos cuando se trata de almacenar en caché la E/S de archivos?

Si ignoró por un momento que la memoria inactiva se clasificó de manera diferente a la memoria libre y consideró que ambas estaban en el "grupo listo para usar", ¿hay algo medible que esté viendo como un problema, como los tiempos de carga del programa, la falla de malloc, etc.? ??? Un reinicio borra las tablas de memoria virtual y si abre programas que asignan RAM, inmediatamente consumirán "inactivos", por lo que seguramente no me parece un problema.
@bmike Como dije... Mac OS X me molesta constantemente con ese cuadro de diálogo OOM (Seleccione aplicaciones para cerrar...), también el sistema dejó de responder parcialmente (aunque no se utilizaron todos los núcleos de la CPU) y ese archivo de intercambio de 45 GB en disco también me molesta.
Cuadro de diálogo OOM: tal vez expandir eso podría ayudar. Supongo que con 45 G de intercambio, realmente tiene un problema de código con fugas y no un problema de algoritmo de paginación. Si cambia el sistema de asignación de paginación, aún se descompondrá, solo que de otra manera. Intentaré hacer tiempo este fin de semana para dar una respuesta adecuada que explique cómo atacaría esto sin necesidad de piratear el sistema VM. Eché de menos lo profundo que era el problema en mi primer comentario. ¿Ha presentado un error con Apple si puede hacer que esto suceda a pedido? sysdiagnosedebe dar a los ingenieros todo lo que necesitan para recomendar una solución de ajuste.
@bmike Este es el cuadro de diálogo OOM: photomics.org/IeWia1Ee_OOM.png - el texto es bastante confuso, supongo que significa decir que Mac OS X no cambiará más de lo que lo hace ahora (todavía había cientos de GB libres en mi disco de inicio). El texto es solo otra prueba de que las Mac no están destinadas a ser utilizadas como procesadores de números, dado que enumera solo mis aplicaciones GUI con poca memoria mientras que mi software de análisis está utilizando toda la memoria...
A pesar de haber ejecutado software empresarial como OracleDB durante años en OS X y no tener ningún problema con el kernel o la memoria, puedo ver cómo si no funciona para su software, se enfadaría y sentiría que no es adecuado. Sin embargo, si observa detenidamente, necesita espacio en su sistema de archivos de volumen de arranque. Trabajaré en una respuesta corta en caso de que esto ayude.

Respuestas (1)

Es difícil saberlo sin acceso a su sistema o pasos para reproducir su error, pero en mi experiencia, el sistema operativo funciona como cualquier otro UNIX cuando el dispositivo de intercambio y el sistema de archivos raíz se llenan. La forma más sencilla de evitar el cuadro de diálogo es asegurarse de tener suficiente espacio libre para crear otro archivo de intercambio (creo que alcanzan un máximo de 2 GB en Mountain Lion).

A la mayoría de las personas les gusta tener un 25 % (o más) de espacio libre, ya que el sistema operativo optimiza los archivos activos y los desfragmenta sobre la marcha, y estos se desactivan automáticamente cuando el espacio libre es bajo para evitar agitar la E/S cuando no hay espacio para escribir o mucho espacio libre. lugares en el disco para elegir para un acceso más rápido a los archivos.


Una diferencia notable entre OS X y otros UNIX es que Apple OS realiza una asignación tardía de páginas para intercambiar, por lo que no ve archivos de intercambio grandes cuando no se necesitan. Para esto, puede deshabilitar el intercambio por completo o asegurarse de que su disco tenga suficiente espacio libre para manejar cualquier cantidad de intercambio que vea en la práctica.

No he oído hablar de nadie que se haya metido con el algoritmo de paginación en sí, pero Apple ha abierto esa parte del sistema operativo, por lo que cualquiera que se preocupe puede hacer cambios en el nivel del código y ejecutarlo.

Comenzaría comprando la siguiente unidad de almacenamiento lateral más grande y controlaría su uso de espacio para asegurarme de que no obtenga menos de 10 GB vacíos como regla general inicial. Si está haciendo un trabajo serio, puede invertir más en espacio en disco para asegurarse de que no se quede sin espacio.

Como dije... Había cientos de GB de espacio libre disponible en el disco de inicio. El intercambio simplemente se detuvo en 50 GB. Sin embargo, no consideraría aún más cambiar una solución, esperaría que el sistema elimine el caché FS y comience a usarlo para la memoria del programa.
Hmm, parece extraño que aparezca ese mensaje. He tenido máquinas con mucho más intercambio. ¿Has presentado un error con Apple sobre esto? Podría ser algo en una compilación específica / conjunto de chips específico que está mal en el código. No vi cuánto espacio libre tenía en la pregunta, tal vez me lo perdí en el hilo de comentarios ...