m-vychytavky: linux performance tuning

21.02.2006 13:42 | blackhole

skriptik ktory davam do rc.local na optimalizaciu komunikacnych parametrov s diskami. dnes uz jadra zvyknu zapinat DMA by default, takze to mozno nic nepomoze, ze sak za pokus to stoji :)

# HDD optimisation
for disk in hda hdb hdc hdd hde hdf hdg hdh hdi; do
/usr/sbin/hdparm -c 1 /dev/$disk # 32 bit komunikacia
/usr/sbin/hdparm -d 1 /dev/$disk # zapni DMA
/usr/sbin/hdparm -u 1 /dev/$disk # unmasq IRQ
/usr/sbin/hdparm -W 1 /dev/$disk # zapni WRITE chache na disku (pozor na power failures.)
/usr/sbin/hdparm -M 254 /dev/$disk # zrus noise managemnet disku (viac vrci, ale aj slape.)
done

ak su nejake problemy s autonegociaciou na sietovke a vieme co podporuje switch na druhej strane (huby a ine hribiky snad uz dnes nikto neopuziva) tak si mozme dovolit natvrdo povedat sietovke ze ma chodit 100mbps full duplex:

/sbin/mii-tool -F 100baseTx-FD eth0

obcas moze pomoct zvysit send buffer na sietovke
ifconfig eth0 txqueuelen 1000

v pripade ze mate dost ramky a chcete skusit zoptimalizovat TCP/IP stack, mozte skusit toto, len upozornujem, ze niekedy to zlepsi jeden smer trafficu na ukor druheho (upload vs download a naopak)

echo "65536 1398080 2796160" > /proc/sys/net/ipv4/tcp_wmem
echo "2097136" > /proc/sys/net/core/rmem_max
echo "1048560" > /proc/sys/net/core/rmem_default
echo "2097136" > /proc/sys/net/core/wmem_max
echo "1048560" > /proc/sys/net/core/wmem_default
echo "163840" > /proc/sys/net/core/optmem_max
echo "3129344 3137536 3145728" > /proc/sys/net/ipv4/tcp_mem
echo "65536 1398080 2796160" > /proc/sys/net/ipv4/tcp_rmem

na zrychlenie bootovania je dobre vyhodil ldconfing z init skriptov, detekcie hardwerov a podobne zbytocnosti co si spravite rucne sami po pridani novych kniznic/hardwaru, do lila je vhodne dopisat lba32 a compact optiony..

k optimalizacii fs len tolko, ze pri mkfs.ext3 pokial netreba rezervovat nejake miesto pre roota je dobre dat mkfs.ext3 -m 0 co znamena ze nemude standartnych 10percent rezervovanych pre roota. dalej sa oplati v /etc/fstab mat v optionoch dopisane noatime, pripadne pre XFS este aj nodiratime a osyncisdsync. XFS spominam prave preto, ze sa mi javi ako najrychlejsi fs co sa obrovskeho mnozstva malych suborov tyka (maildir napr.) a aj velke subory zvlada dobre. zato pomaly nastavuje atributy a zere viac cpu (takze kompilacia jadra vam mozno rychlejsie zbehne na ext3).

    • este by som dodal pre nove 22.02.2006 | 14:43
      Avatar stanojr   Používateľ

      este by som dodal
      pre nove sietovky pouzit ethtool na nastavovanie (tie co su teraz gigabitove rovno na doskach napr.)
      btw niektore typy e1000 (intel sietovky) maju bug a obcas sa resetuju, tak to sa da fixnut vypnutim tso ethtool -K eth0 tso off

      dalej co sa tyka dma, tak nove zakladne dosky maju sata/pata porty obsluhovany jednym radicom (trebars piix), potom to robi neskutocne problemy, lebo dma maju zapnute iba sata (sata obsluhuje libata co je pod scsi menu a normalne pata oblsuhuje stary ata driver CONFIG_IDE v configu kernela) a tie drivre sa tam biju
      potom najlepsie uplne vypnut CONFIG_IDE a nabootovat kernel z append="libata.atapi_enabled=1" v lilo.conf
      potom libata bude obsluhovat aj pata aj sata porty a vsetky budu mat zapnute dma (vsetky disky budu /dev/sdx aj na pata portoch) len treba kernel 2.6.15 aspon
      pripadne nove dosky maju 2 radice, jeden obsluhuje sata/pata druhy iba pata, tak na sata radic pouzit libata a na ten samostatny radic co obsluhuje iba pata pouzit driver pod CONFIG_IDE
      jediny problem libata ze nepodporuje smart a ziadne nastavenia cez hdparm, ale bez ficat bez dma je strach a hroza

    • question 26.03.2006 | 10:21
      Avatar blackhole_ventYl   Používateľ
      podobne parametre pre pevny disk mam v rc.local aj ja. ma to vsak jeden drobatko hacik... sem tam pri boote to zahlasi nejake errory presne v case, ked necham pevnemu disku zozrat tie parametre. vsetko ide dalej dobre, dokonca z erroru je patrne, ze vznikol "na zelenej luke" a nie pri vykonavani nejakej operacie. ErrorOpcode: unknown alebo nieco podobne, skusal som to obalit do sleepov, aby tam este nedobiehavali nejake ine diskove operacie, obalit to syncami, ale stale nepomaha. proste sa to sem tam objavi a neviem, ci je to chyba medzi klavesnicou a stolickou, alebo to mozem jednoducho ignorovat... what to do?
      --- Cuchat s nadchou, to je ako sniffovat bez promiscu.
      • solusn 04.04.2006 | 22:34
        Avatar blackhole_ventYl   Používateľ

        pomohlo presunut na kusa ine miesto v skriptoch... evidentne sa tam, kde to sedelo predtym, robilo este nieco, co bolo nezastavitelne zosyncovanim, ani sleepom.

        --- Cuchat s nadchou, to je ako sniffovat bez promiscu.
    • hdparm pre ATA disky 22.05.2006 | 10:44
      Avatar blackhole   Návštevník

      Moj config hdparmu pre ATA disky je nasledovny

      hdparm -d1c3u1m32A1a256 /dev/hd?

      d1 = zapne DMA prenosy
      c3 = IO operacie su vykonavane v 32bit blokoch (na PCI zbernici, treba zapnut aj v BIOSe) so specialnou sync sekvenciou
      u1 = umozni odmaskovat ostatne prerusenia pocas vykonavanie diskoveho IO prerusenia, zvysi interaktivitu systemu
      m32 = zapne tzv. IDE block mode (32 blokov na jedno IO prerusenie) Pozor! nevhodne pre WD, odporucaju nastavenie 4 alebo 8)
      A1 = zapina predcitavaciu funkciu disku (read-lookahead)
      a256 = pocet sektorov ktore sa maju citat vopred (128 KB) toto je vhodne pri velkom sekvencnom citani (niektore databazy, image suborov, filmy, vytvaranie image particii). Default hodnota je 8 sektorov (4KB). V systemoch s nahodnym seekovanim a citanim s velkym mnozstvom malych suborov moze mensia hodnota zvysit vykon.

      --

      Never trust an operating system You don't have sources for.

      • re 22.05.2006 | 10:54
        Avatar blackhole   Návštevník

        c3 je skor pre starsie disky. sync nie je potrebny (c1).
        parameter m32 je redundantny, DMA to robi automaticky (pouziva sa len pre PIO).

        ---
        Ale je to smutná epocha, keď je ľahšie rozbiť atóm ako predsudky. Einstein.