On 24/10/2013 12:33, Fabrizio Soppelsa wrote:
[...]
Su sistema UNIX puoi provare a ridurre la priorità del tuo programma
con nice.  In aggiunta puoi mettere il processo in pausa dopo aver
letto/scritto un chunk di dati da/verso il disco.

Grazie. Ho già provato con renice, ma da Munin vedo che non riesco a
diminuire i picchi di I/O. Mentre non ho provato con il mettere il
processo in pausa ogni tot di scritture, potrebbe essere un'idea.
Perdona l'ignoranza mi dai un hint su come provare? :)


Se il problema è causato dall'utility di backup di MySQL, su cui non hai controllo, temo ci sia poco da fare, a meno di non fare cose strane a livello di librerie dinamiche.

Una soluzione possibile, su sistemi UNIX, è quello di fare scrivere il file di backup su una FIFO (mkfifo), e avere un processo Python che legga dall'altro lato della FIFO in modo da regolare l'I/O con la procedura che indico in seguito.


Ma il problema di prestazioni lo hai quando viene generato il file di
backup su file su disco dall'utility di backup di MySQL, oppure
durante l'esecuzione del tuo trigger scritto in Python?

Soprattutto in generazione dei file di backup. Ma anche in fase
"trigger" (sono banali .py che creano dei pid, chiamano utility di
sistema ecc.) se i file sono pesanti. Per esempio cifro i file con gpg,
oppure importo da remoto altri file...


Per codice sotto il tuo controllo hai più spazio di manovra.
Ad esempio per cifrare i file di backup puoi fare qualcosa dipo:

while True:
    buf = os.read(fdin, 8196)
    os.sleep(nice_pause)
    cbuf = do_crypt(buf)

Se il file criptato deve essere salvato sulla stessa macchina virtuale, allora puoi fare:

    zbuf = do_compress(cbuf)
    os.write(fdout, zbuf, len(zbuf)
    os.sleep(nice_pause)

altrimenti puoi inviare i dati tramite socket.

Nota la compressione: è molto importante per ridurre l'I/O.

Se chiami utility di sistema, devi fare attenzione che non facciano I/O eccessivo.

Nel caso in cui fai scrivere il file di backup su una FIFO, ed il file di backup originale (non criptato) non ti serve, risparmi molto I/O e sicuramente la procedura di backup avrà un impatto molto minore sul sistema; probabilmente anche se non fai os.sleep ad oggi lettura/scrittura.

Il tutto da verificare.


Ciao  Manlio
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a