Capita sovente di sentire e/o vedere che le installazioni dei sistemi operativi sono lasciati allo stato impostato dall’installer del brand che si utilizza: redhat, debian, suse etc. Il problema con le impostazioni di default è che non si ottiene mai il massimo specie se ospitato in ambiente virtuale. La mia esperienza mi ha portato a modificare i seguenti valori:
Il kernel di Linux si porta in dote diversi algoritmi per lo scheduler dell‘IO. Quello predefinito è il CFQ. Il cfq si adatta a tutti i carichi di lavoro ma non è il migliore in ogni situazione occorre dunque fare delle prove per trovare, fra quelli disponibili, il migliore. Nell’ambiente Virtuale la macchine ospite utilizza un driver generico per l’accesso al disco e dunque non è in grado di ottimizzare le letture/scritture. Affidiamo dunque il compito di decidere come e quando eseguire tali operazioni all’hypervisor. Vediamo come.
Aggiungere ai parametri di boot:
- noapic nolapic acpi=off clocksource=acpi_pm elevator=noop
l’ultimo parametro: elevator=noop è molto importante fa si che lo scheduler venga disattivato (o quanto meno non ottimizzi le richieste ma le mette solo in coda cosi come arrivano). Affinchè tali parametri vengano interpretati occorre fare il reboot del sistema.
Nel prossimo paragrafo vediamo come ottimizzare l’utilizzo del RAM fisica e dello SWAP. Di norma il kernel quando la ram inizia a riempirsi e vi sono programmi che non la utilizzano “molto spesso” trasferisce tale contenuto nello SWAP. Tale meccanismo è governato da un parametro: vm.swappiness. Il valore predefinito (quantomeno sulle redhat e derivate) è 60 ovvero al raggiungimento del 60% di utilizzo della ram il kernel è “libero” di spostarne il contenuto. Modifichiamolo:
in /etc/sysctl.conf aggiungere o modificare i valori (effettuate un backup con sysctl -a> /path/sysctl.backup.conf prima delle modifiche):
- vm.swappiness = 10 # Provare con valori fino allo 0
- vm.overcommit_memory = 1
- vm.dirty_background_ratio = 5
- vm.dirty_ratio = 10
- vm.dirty_expire_centisecs = 1000
- dev.rtc.max-user-freq = 1024
eseguire il comando: sysctl -p per eseguire le modifiche.
Ovviamente fate delle prove prima di effettuare le modifiche in produzione.
Riferimenti:

