L'unico consiglio che posso darti è l'uso attento di mlock()/mlockall() .. mentre si guardano i driver con palloncini buggati.
Ad esempio, se un guest Xen viene avviato con 1 GB, quindi ridotto a 512 MB, è tipico che il dominio privilegiato NON guardasse quanta memoria il kernel paravirtualizzato stava effettivamente promettendo ai processi (cioè Committed_AS). In realtà, con Xen, a meno che questo valore non sia posto su Xenbus, l'host privilegiato non ha idea di cosa faccia un tale pallone. Credo che questo coincida anche con KVM, a seconda di come è configurato il kernel .. ma la tua domanda presume che non sappiamo nulla di queste cose :)
Quindi, proteggere le cose (attenzione, ma prudenza) che semplicemente non può essere sfasato, considera sempre lo scenario "il cielo sta calando".
Allo stesso modo, l'uso di posix_fadvise()/posix_madvise() per indicare al kernel PV quanto basta o non è necessario il buffering è sempre una buona idea.
Oltre a ciò, c'è ben poco che tu possa fare .. dato che stai parlando solo del kernel paravirtualizzato, che è stato progettato per rendere i processi ignari alla virtualizzazione in primo luogo.
Non uso molto KVM (ancora), anche se ho intenzione di esplorarlo di più in futuro. Tuttavia, il 90% delle cose che sto scrivendo ultimamente è specificamente progettato per essere eseguito su guest Xen paravirtualizzati. Mi dispiace di essere un po 'centric Xen/C, ma questo è dove la mia esperienza è e dovrebbe essere presente con in linea principale (ops presto anche Xen-0) :)
Buona domanda, btw :)
Edit:
Quando ho detto "attento ma prudente", intendevo un gradino sopra il conservatore. Se il programma assegna una struttura del lavoro che richiede la maggior parte delle funzioni, bloccala. Se assegnate buffer per leggere file enormi, non bloccarli .. e assicuratevi di chiamare posix_fadvise() per far sapere al kernel che intendete accedervi solo una volta (se questo è il caso). Inoltre, assicurati di consigliare il kernel sull'utilizzo dei file mappati in memoria, specialmente se servono ad organizzare la concorrenza.
In breve, aiutare i vostri kernel ospitanti gestire la memoria, non lasciare i blocchi allocati critiche vengono gettati in paging sporca, non date per scontato il vostro programma è più importante di qualsiasi altra cosa, bloccando tutto ciò alloca :)
Ci scusiamo per l'ambiguità. La frase migliore che ho potuto fare è stata "attenta, ma prudente".
+1, ma, "(attenzione, ma prudenza)"? Cosa intendi? quelli sono praticamente sinonimi ... –
Modificato per spiegare :) –
+ 1.addizione: "Al momento della stesura di questo documento (2.6.21) Linux non ricorda POSIX_FADV_DONTNEED consiglio per un file aperto: agisce quando viene dato un consiglio e quando non può conformarsi dimentica il consiglio, quindi spetta a te assicurarti che Linux possa rispettare ". –
VolkerK