Linux performance tuning
Linux yra naudojamas tiek laikrodžiuose, toasteriuose, kavos aparatuose tiek ir darbinėse stotyse ar net super kompiuteriuose. Todėl, linux'as yra pritaikytas ir gali būti konfigūruojamas pagal sisteminius poreikius, darbo pobūdį, apkrovą. Pramoninėse distribucijose tai jau būna atlikta, bet visada yra galimybė pasiekti dar aukštesnius rezultatus, suderinti programinę įrangą "geležies" teikiamiems resursams. Šis straipsnis apjungs sistemos stebėseną, analizavimą ir daugelį Linux derinimo parametrų, kuriuos galėsite reguliuoti pagal savo poreikius. Taip suderinta sistema gali veikti iki 30% ar net greičiau.
Naudota aparatinė/programinė įranga:
OS: Debian GNU/Linux Versija: Stretch HW: 4x Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz, 24GB Ram SF: nginx 1.10.3, mysql-5.7.23(percona branch), php-fpm-7.0.30
Jeigu serveryje ar darbinėje stotyje nereikalinga grafinė vartotojo sąsaja, tai jos ir nenaudokite, išmeskite iš sistemos visai!
Pusiausvyra sistemoje[keisti]
"Irqbalance" yra daemonas, padedantis išlaikyti pusiausvyrą CPU apkrovoje, kurią sukelia pertraukos visose sistemos procesoriuose. "Irqbalance" nustato didžiausios apimties pertraukimo šaltinius ir juos išskiria į vieną unikalų procesorių, kad apkrova būtų kuo labiau išplitusi per visą procesorių rinkinį, tuo pat metu sumažinant "irq" tvarkyklių talpyklos praleidimo dažnius.
apt-get install irqbalance
Pagreitinam programų krovimąsi[keisti]
"Preload" yra daemonas, kuris veikia fone ir analizuoja tai, ką darai, atidaromas programas, jis daro kešavimą ir paspartina įkrovos darbą bei bendrą našumą. Defaultinio konfigūravimo turėtų užtekti, bet norint papildomos konfigūracijos redaguojame /etc/preload.conf, taip pat visą statusą galima peržvelgti /var/lib/preload/preload.state
apt-get install preload
Sumažinam swap[keisti]
Šiais laikais sistemos turi pakankamai ramo, kad naudoti swap ir bružinti diską, ypac jei jis ne SSD. Peržiūra:
cat /proc/sys/vm/swappiness
Nustatymas
sysctl –w vm.swappiness=1
Temp nustatymas:
dedam į /etc/sysctl vm.swappiness=1 ir paleidžiam sysctl -p
Galimi nustatymų variantai:
- vm.swappiness = 0 Kernelis naudos swapą tiktai tada kai norės išvengti out of memory.
- vm.swappiness = 1 Kernelio versija 3.5 ir didesnė: Minimalus swapo naudojimas, jo neišjungiant.
- vm.swappiness = 10 Šis nustatymas kartais būna rekomenduotinas kai ne įtin daug atminties turi sistema.
- vm.swappiness = 60 Įprastinis nustatymas pagal nutylėjimą.
- vm.swappiness = 100 Agresyviai naudos swap'a.
Diskų greitaveika[keisti]
- noatime – Šis parametras nebeleidžia rašyti paskutinio kreipimosi į failą laiko štampo. Išjungus šį parametrą į diską kaskart nerašoma informacija kai failas bandomas pasiekti. Rašymo komanda daroma tik tada kai tuo pačiu failas keičiamas/rašomas.
- relatime – Failų sistemos užmontavimas su šiuo parametru leidžia atnaujinti prieigos laiką, jei jis yra (prieš atnaujinimą) anksčiau nei modifikavimo laikas. Tai žymiai sumažina įrašus, kuriuos sukelia atnaujinimai atime.
- atime – Ši parinktis verčia Linux įrašyti paskutinesnį (arba paskutinį) laiką, kai buvo pasiektas tam tikras failas. Ši informacija ypač naudinga sysadminams ar kai kurioms programoms (ypač pašto programoms), kad žinotų, kada paskutinį kartą buvo naudojamas / pasiektas konkretus failas. "Atime" atnaujinimai yra didžiausias IO veikimo trūkumas, kurį šiandien turi "Linux".
- noatime,data=writeback - Greičiausiai bus *gana* pastebimas (su skirtingu poveikiu skirtingoms apkrovoms), bet beveik niekas iš tikrųjų to nedaro.
Jeigu naudojate extX failų sistemą, rekomenduojama naudoti data=writeback, turėsite nustatyti FS iš naujo:
tune2fs -o journal_data_writeback /dev/sdxN tune2fs -O ^has_journal /dev/sdxN e2fsck -f /dev/sdxN
Dabar galėsite naudoti data=writeback mount parametrą. Įspėjimas: nežinia kas gali nutikti naudojant šį parametrą, neparuošus failų sistemos iš anksto. Ką mes naudojame?
defaults,noatime,data=writeback,barrier=0,nobh,errors=remount-ro
Ką tai reiškia?
- writeback mode - Ext4 nedaro žurnalo duomenims visai. Šis režimas pateikia panašų žurnalų lygį kaip ir XFS, JFS ir ReiserFS numatytojo režimo - metaduomenų žurnalavimas. "Crash + atkūrimas" gali sukelti duomenų įrašytų prieš incidentą, nepasiekiamumą. Šis režimas paprastai užtikrina geriausią "ext4" našumą.
- ordered mode - Ext4 nutylimai daro žurnalą tiktai metadata duomenims, tačiau jis logiškai su duomenų pakeitimais susijusią metaduomenų informaciją su duomenų blokais įtraukia į vieną vienetą, vadinamą transakcija. Kai ateina metas įrašyti naujus metaduomenis į diską, pirmieji rašomi susiję duomenų blokai. Apskritai, šis režimas veikia šiek tiek lėčiau nei writeback, bet žymiai greičiau nei žurnalo režimas.
- commit - Padidina įrašymo intervalą (pagal nutylėjimą: 5s). Iš tikrųjų tai yra duomenų ir metaduomenų sinchronizavimo operacija, kuri yra svarbi duomenų saugos funkcija.
- nouser_xattr - Išjungia išplėstinio vartotojo atributus, jei jų nereikia. Jei naudojate darbalaukio nustatymą namuose (arba mažame biurų tinkle), jums gali neprireikti šios funkcijos.
- errors=remount-ro - Daugelis distribucijų prideda ir šią įkrovos parinktį. Iš tikrųjų šis įkrovos parinktis turi būti be jokių abejonių, nes ši įkėlimo parinktis yra nustatoma pagal nutylėjimą.
Kiti neprivalomi parametrai, skirti padidinti HDD ar SSD našumą
- noatime ir nodiratime
- no acl
- data=writeback,nobh
- delalloc - šis turėtų jau būti vienas iš numatytūjų
- commit=N Pagal nutylejimą 5 sekundės, gerai saugumui bet blogai spartos atžvilgiu. Keičiant parametrą į aukštesnį skaičių, galite prarasti 'X' darbo sekundžių kai sistema užlūžta. Žurnalai vis dar saugomi, todėl diskas nepaveikiamas.
- inode_readahead=n
- max_batch_time=N
CPU Pažeidžiamumų pataisų išjungimas[keisti]
Pataisos, kurios iš esmės nieko nepataiso, tik pablogina ir degraduoja CPU našumą, jas galima apeiti kitais, plačiajai visuomenei neviešintais metodais. Eilutę reikia įterpti į /etc/default/grub failą, šiame kintamajame:
GRUB_CMDLINE_LINUX_DEFAULT=""
Naujesnis kaip 5.1.13 branduolys[keisti]
mitigations=off
Reikšmės:
- nopti [X86,PPC] - Control Page Table Isolation of user and kernel address spaces. Disabling this feature removes hardening, but improves performance of system calls and interrupts.
- kpti=0 [ARM64] - Control page table isolation of user and kernel address spaces.
- nobp=0 [S390] - Undocumented. Does something on S390 systems, nobody knows what.
- nospectre_v1 [X86,PPC] - Disable mitigations for Spectre Variant 1 (bounds check bypass). With this option data leaks are possible in the system.
- nospectre_v2 [X86,PPC,S390,ARM64] - Disable all mitigations for the Spectre variant 2 (indirect branch prediction) vulnerability. System may allow data leaks with this option.
- spectre_v2_user=off [X86] - Control mitigation of Spectre variant 2 (indirect branch speculation) vulnerability between user space tasks
- spec_store_bypass_disable=off [X86,PPC] - Control Speculative Store Bypass (SSB) Disable mitigation (Speculative Store Bypass vulnerability)
- ssbd=force-off [ARM64] - Speculative Store Bypass Disable control
- l1tf=off [X86] - Control mitigation of the L1TF vulnerability on affected CPUs
- mds=off [X86] - Control mitigation for the Micro-architectural Data Sampling (MDS) vulnerability.
Senesnis kaip 5.1.13 branduolys[keisti]
noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off
Reikšmės:
- noibrs - We don't need no restricted indirect branch speculation
- noibpb - We don't need no indirect branch prediction barrier either
- nospectre_v1 and nospectre_v2: Don't care if some program can get data from some other program when it shouldn't
- l1tf=off - Why would we be flushing the L1 cache, we might need that data. So what if anyone can get at it.
- nospec_store_bypass_disable - Of course we want to use, not bypass, the stored data
- no_stf_barrier - We don't need no barriers between software, they could be friends
- mds=off - Zombieload attacks are fine
- mitigations=off - Of course we don't want no mitigations
Tuomet paleidžiame (debian paremtose distribucijose):
update-grub