Questo e` un elenco di ottimizzazioni per il kernel Linux quando installato come guest in una VM.
L'elevator (lo scheduler di I/O sul disco) ideale per una virtuale, dove il disco e` in realta` virtualizzato e quindi dotato di uno scheduler e una cache "esterni", ovvero presenti nell' host fisico, e` quello che non fa nulla e lascia fare all'host fisico. Per ottenere questo risultato e` possibile impostare come parametro di avvio del kernel in grub questo:
elevator=noop
E` possibile per prova impostare lo scheduler a noop (o a quello che volete voi) leggendo e scrivendo su /sys/block/sdX/queue/scheduler
. Ad esempio qui si vede che lo scheduler attivo e` cfq, e poi si imposta lo scheduler noop.
# cat /sys/block/sda/queue/scheduler noop deadline [cfq] # echo noop > /sys/block/sda/queue/scheduler
La "swappiness" e` un indice di quanto il kernel "preferisce" usare lo swap oppure tenere quanti piu` dati in ram, passando a usare lo swap solo quando e` assolutamente necessario. Quando si gira sotto un virtualizzatore in linea di massima e` meglio evitare di swappare se non e` necessario. Per modificare l'impostazione, e` possibile impostarre un parametro dentro a /etc/sysctl.conf oppure dentro a un file dedicato con un nome a vostra scelta dentro a /etc/sysctl.d/nomechevolete.conf. Ad esempio possiamo vedere quale e` la swappiness attuale e modificarla, semplicemente cosi`:
# cat /proc/sys/vm/swappiness 60 # echo "vm.swappiness = 1" > /etc/sysctl.d/swappiness.conf # sysctl --system
Il kernel Linux consente ai programmi di allocare piu` memoria (RAM + swap) di quanta non ce ne sia davvero disponibile. Questo comportamento puo` provocare piantamenti o comunque causare il killing di programmi piu` o meno a caso quando la memoria e` finita. (OOM killer)
Queste impostazioni impediscono l'overcommit. Possono essere una buona idea oppure no, dipende dall'uso che si fa della macchina e soprattutto dal fatto che si usino o meno programmi che richiedono enormi quantita` di memoria senza poi usarla realmente.
# echo "vm.overcommit_memory = 2" > /etc/sysctl.d/overcommit.conf # echo "vm.overcommit_ratio = 80" >> /etc/sysctl.d/overcommit.conf # sysctl --system
Queste sono ottimizzazioni varie, utilizzabili sia in macchine virtuali che in macchine fisiche. Si tratta sempre di parametri impostabili in /etc/systl.conf
o dentro a un file in /etc/sysctl.d/
. Ricordate poi di eseguire sysctl --system
per caricarle. Al reboot si caricano da sole.
Queste impostazioni, salvate dentro a un file come ad esempio /etc/sysctl.d/disableipv6autoconf.conf
, servono ad impedire l'autoconfigurazione ipv6. Questo di per se` non disabilita ipv6, ma solo l'autoconfigurazione.
# ipv6 settings (no autoconfiguration) net.ipv6.conf.default.autoconf=0 net.ipv6.conf.default.accept_dad=0 net.ipv6.conf.default.accept_ra=0 net.ipv6.conf.default.accept_ra_defrtr=0 net.ipv6.conf.default.accept_ra_rtr_pref=0 net.ipv6.conf.default.accept_ra_pinfo=0 net.ipv6.conf.default.accept_source_route=0 net.ipv6.conf.default.accept_redirects=0 net.ipv6.conf.default.forwarding=0 net.ipv6.conf.all.autoconf=0 net.ipv6.conf.all.accept_dad=0 net.ipv6.conf.all.accept_ra=0 net.ipv6.conf.all.accept_ra_defrtr=0 net.ipv6.conf.all.accept_ra_rtr_pref=0 net.ipv6.conf.all.accept_ra_pinfo=0 net.ipv6.conf.all.accept_source_route=0 net.ipv6.conf.all.accept_redirects=0 net.ipv6.conf.all.forwarding=0
Se dovete mettere assieme un server che deve servire migliaia di connessioni ip contemporanee, queste impostazioni possono aiutare. Io personalmente non le ho mai provate.
net.ipv4.ip_local_port_range = 10000 65535 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 2500 net.core.somaxconn = 65000
Queste impostazioni possono avere senso a seconda delle vostre necessita`. Sono commentate ad una ad una.
# per impedire l'overcommit della ram (come anche mostrato sopra per le virtuali, ma vale anche per le fisiche) vm.overcommit_memory = 2 vm.overcommit_ratio = 80 # increase the number of allowed mmapped files vm.max_map_count = 1048576 # Increase the number of file handles available globally fs.file-max = 1048576 # Auto reboot per kernel panic (occhio!!!) kernel.panic = 10 # Controls the default maxmimum size of a mesage queue kernel.msgmnb = 65536 # Controls the maximum size of a message, in bytes kernel.msgmax = 65536 # Controls the maximum shared segment size, in bytes kernel.shmmax = 68719476736 # Controls the maximum number of shared memory segments, in pages kernel.shmall = 4294967296