El único consejo que puedo darte es el uso cuidadoso de mlock()/mlockall() .. mientras busco controladores de globo con errores.
Por ejemplo, si un invitado Xen se inicia con 1 GB, luego se redujo a 512 MB, es muy típico que el dominio privilegiado NO analice la cantidad de memoria que promete el kernel paravirtualizado para procesar (es decir, Committed_AS). En realidad, con Xen, a menos que este valor se coloque en Xenbus, el host privilegiado no tiene idea de lo que hará un globo. Creo que esto también coincide con KVM, dependiendo de cómo esté configurado el kernel ... pero su pregunta presupone que no sabemos nada acerca de tales cosas :)
Proteja las cosas (tenga cuidado pero sea prudente) que simplemente no pueden ser paginado, siempre cuenta para el escenario 'cielo está cayendo'.
Del mismo modo, el uso de posix_fadvise()/posix_madvise() para decirle al kernel de PV cuánto necesita o no necesita almacenar en búfer siempre es una buena idea.
Más allá de eso, hay muy poco que puedes hacer ... ya que estás hablando solo del kernel paravirtualizado, que está diseñado para hacer que los procesos olviden la virtualización en primer lugar.
No uso mucho KVM (todavía), aunque planeo explorarlo más en el futuro. Sin embargo, el 90% de las cosas que he estado escribiendo últimamente está específicamente diseñado para ejecutar en invitados Xen paravirtualizados. Siento ser un poco más centrada en Xen/C, pero ahí es donde mi experiencia y es pv_ops está en la línea principal (pronto también xen-ops) 0 :)
Buena pregunta, por cierto :)
Editar:
Cuando dije 'cuidado pero prudente', quise decir un paso por encima de conservador. Si su programa asigna alguna estructura de trabajo que la mayoría de las funciones necesitan, trábela. Si sus búferes de asignación leen archivos enormes, no los bloquee ... y asegúrese de llamar a posix_fadvise() para informarle al kernel que solo tiene la intención de acceder a él una vez (si ese es el caso). Además, asegúrese de informar al kernel sobre el uso de los archivos mapeados en la memoria, especialmente si sirven para organizar la concurrencia.
En resumen, ayude a sus anfitriones gestionar la memoria del kernel, no deje que los bloques asignados críticos son arrojados en paginación sucio, no asuma que su programa es más importante que cualquier otra cosa mediante el bloqueo de todo lo que asigna :)
Perdón por la ambigüedad. La mejor frase que pude encontrar fue 'cuidadosa, pero prudente'.
+1, pero, "(tenga cuidado, pero prudente)"? ¿Qué quieres decir? esos son prácticamente sinónimos ... –
Editado para explicar :) –
+ 1.adición: "Al escribir esto (2.6.21) Linux no recuerda POSIX_FADV_DONTNEED asesoramiento para un archivo abierto. Actúa cuando se da el consejo, y cuando no puede cumplirlo olvida el consejo. Por lo tanto, depende de usted asegurarse de que Linux cumpla ". –
VolkerK