Linux a bharrfheabhsú chun 1.2 milliún iarratas JSON a láimhseáil in aghaidh an tsoicind

Foilsíodh treoir mhionsonraithe maidir le tiúnadh timpeallacht Linux chun an fheidhmíocht uasta a bhaint amach chun iarratais HTTP a phróiseáil. Leis na modhanna molta bhíothas in ann feidhmíocht an phróiseálaí JSON bunaithe ar an leabharlann lireactor i dtimpeallacht Amazon EC2 (4 vCPU) a mhéadú ó 224 míle iarratas API in aghaidh an tsoicind le socruithe caighdeánacha Amazon Linux 2 le eithne 4.14 go 1.2 milliún iarratas in aghaidh an tsoicind. sa dara háit tar éis leas iomlán a bhaint (méadú 436%), agus mar thoradh air sin tháinig laghdú 79% ar mhoill ar iarratais a phróiseáil. Níl na modhanna molta sainiúla maidir le lireactor agus obair nuair a bhíonn freastalaithe http eile á n-úsáid, lena n-áirítear nginx, Actix, Netty agus Node.js (úsáideadh lireactor i dtástálacha toisc gur léirigh réiteach bunaithe air feidhmíocht níos fearr).

Linux a bharrfheabhsú chun 1.2 milliún iarratas JSON a láimhseáil in aghaidh an tsoicind

Optamaithe bunúsacha:

  • Cód lireactor a bharrfheabhsú. Baineadh úsáid as an rogha R18 ó threalamh Techempower mar bhunús, a feabhsaíodh trí chód a bhaint chun líon na gcroí LAP a úsáidtear a theorannú (cheadaigh an leas iomlán a bhaint as obair a bhrostú 25-27%), ag cur le chéile i GCC leis na roghanna “-O3”. (méadú 5-10%) agus “-march-dúchasach” (5-10%), ag cur recv/seoladh (5-10%) in ionad glaonna léite/scríofa agus ag laghdú forchostais nuair a úsáidtear snáitheanna púdair (2-3%) . Ba é an méadú foriomlán feidhmíochta tar éis barrfheabhsú cód ná 55%, agus mhéadaigh tréchur ó 224k req/s go 347k req/s.
  • Díchumasaigh cosaint i gcoinne leochaileachtaí forghníomhaithe amhantrach. Trí na paraiméadair “nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off” a úsáid agus an t-eithne á lódáil, ceadaíodh an fheidhmíocht a mhéadú 28%, agus mhéadaigh tréchur ó 347k req/s go 446k req/s. Ar leithligh, b’ionann an méadú ón bparaiméadar “nospectre_v1” (cosaint ó Specter v1 + SWAPGS) 1-2%, “nospectre_v2” (cosaint ó Specter v2) - 15-20%, “pti=off” (Spectre v3/Meltdown) - 6 %, "mds=as tsx_async_abort=off" (MDS/Zombieload agus TSX Tobscoireadh Asincrónach) - 6%. Níor athraíodh na socruithe cosanta in aghaidh ionsaithe L1TF/Foreshadow (l1tf=flush), iTLB multihit, Seachbhóthar Stórais Amhantrach agus SRBDS, rud nár chuir isteach ar fheidhmíocht toisc nach raibh siad trasnaithe leis an gcumraíocht a tástáladh (mar shampla, go sonrach le KVM, neadaithe fíorúlú agus samhlacha eile LAP).
  • Iniúchadh agus meicníochtaí blocála glaonna córais a dhíchumasú ag baint úsáide as an ordú "auditctl -a never,task" agus ag sonrú an rogha "--security-opt seccomp=unconfined" agus an coimeádán docker á thosú. Ba é an méadú foriomlán feidhmíochta ná 11%, agus mhéadaigh tréchur ó 446k riachtanas go 495k riachtanas.
  • Díchumasú iptables/netfilter trí na modúil eithne a bhaineann leo a dhíluchtú. Spreagadh torthaí próifílithe an smaoineamh an balla dóiteáin a dhíchumasú, nár úsáideadh i réiteach freastalaí ar leith, ag glacadh leis an méid a ghlac an fheidhm nf_hook_slow 18% den am lena fhorghníomhú. Tugtar faoi deara go n-oibríonn nftables níos éifeachtaí ná iptables, ach leanann Amazon Linux ag baint úsáide as iptables. Tar éis iptables a dhíchumasú, ba é an méadú feidhmíochta ná 22%, agus mhéadaigh tréchur ó 495k req/s go 603k req/s.
  • Imirce laghdaithe láimhseálaithe idir croíleacáin éagsúla LAP chun éifeachtúlacht úsáid taisce próiseálaí a fheabhsú. Rinneadh optamú ag leibhéal na bpróiseas ceangailteach leabhránaithe chuig croíleacáin LAP (CPU) agus trí láimhseálaithe líonra eithne feannadh (Faigh Scálú Taobh). Mar shampla, díchumasaíodh irqbalance agus socraíodh cleamhnas scuaine leis an LAP go sainráite i /proc/irq/$IRQ/smp_affinity_list. Chun an croí LAP céanna a úsáid chun an próiseas libreactor agus an scuaine líonra de phaicéid isteach a phróiseáil, úsáidtear láimhseálaí saincheaptha BPF, ceangailte trí bhratach SO_ATTACH_REUSEPORT_CBPF a shocrú agus an soicéad á chruthú. Chun scuainí de phaicéid amach a cheangal leis an LAP, athraíodh na socruithe /sys/class/net/eth0/queues/tx- /xps_cpus. Ba é an méadú foriomlán feidhmíochta ná 38%, agus mhéadaigh tréchur ó 603k req/s go 834k req/s.
  • Láimhseáil idirbhriste agus úsáid vótaíochta a bharrfheabhsú. Mhéadaigh an fheidhmíocht oiriúnaitheach-rx sa tiománaí ENA agus ionramháil sysctl net.core.busy_read 28% (méadaigh tréchur ó 834k req/s go 1.06M req/s, agus laghdaigh an fhoighne ó 361μs go 292μs).
  • Seirbhísí córais a dhíchumasú as a dtagann blocáil neamhriachtanach sa chairn líonra. Mar thoradh ar dhíchumasú dhclient agus an seoladh IP a shocrú de láimh tháinig méadú feidhmíochta 6% agus méadaíodh an tréchur ó 1.06M req/s go 1.12M req/s. Is é an fáth a mbíonn tionchar ag dhclient ar fheidhmíocht ná anailís tráchta ag baint úsáide as soicéad amh.
  • Troid Spin Lock. Tháinig méadú 0% ar fheidhmíocht mar thoradh ar chruach an líonra a aistriú go mód “noqueue” trí sysctl “net.core.default_qdisc=noqueue” agus “tc qdisc replace dev eth2 root mq”, agus mhéadaigh tréchur ó 1.12M req/s go 1.15M req/s.
  • Mionleasuithe deiridh, mar shampla GRO (Ginearálta Faigh Offload) a dhíchumasú leis an ordú “ethtool -K eth0 gro off” agus reno a chur in ionad an algartam rialaithe plódaithe ciúbach ag baint úsáide as sysctl “net.ipv4.tcp_congestion_control=reno”. Ba é an méadú iomlán táirgiúlachta ná 4%. Méadaíodh tréchur ó 1.15M req/s go 1.2M req/s.

Chomh maith leis na optimizations a d'oibrigh, pléann an t-alt freisin modhanna nach raibh mar thoradh ar an méadú feidhmíochta ionchais. Mar shampla, ní raibh na rudaí seo a leanas éifeachtach:

  • Ní raibh difríocht idir an fheidhmíocht a ritheadh ​​lireactor ar leithligh agus é a rith i gcoimeádán. Ní raibh aon éifeacht ag baint le seoltaí a chur in ionad writev, méadú ar mhéaduithe in epoll_wait, agus triail a bhaint as leaganacha agus bratacha GCC (ní raibh an éifeacht le sonrú ach amháin do na bratacha “-O3” agus “-march-dúchais”).
  • Uasghrádú an eithne Linux go leaganacha 4.19 agus 5.4, ag baint úsáide as na sceidealóirí SCHED_FIFO agus SCHED_RR, ionramháil sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, trédhearcach_hugepages=riamh, skew = ní raibh tionchar ag clocksource agus feidhmíocht
  • Sa tiománaí ENA, ní raibh aon éifeacht ag cumasú modhanna Offload (deighilt, scaip-bhailiú, rx/tx checksum), ag tógáil leis an mbratach “-O3”, agus ag baint úsáide as na paraiméadair ena.rx_queue_size agus ena.force_large_llq_header.
  • Níor chuir athruithe sa chruach líonra feabhas ar fheidhmíocht:
    • Díchumasaigh IPv6: ipv6.disable=1
    • Díchumasaigh VLAN: modprobe -rv 8021q
    • Díchumasaigh seiceáil foinse an phacáiste
      • net.ipv4.conf.all.rp_filter=0
      • net.ipv4.conf.eth0.rp_filter=0
      • net.ipv4.conf.all.accept_local=1 (éifeacht dhiúltach)
    • net.ipv4.tcp_sack = 0
    • net.ipv4.tcp_dsack=0
    • net.ipv4.tcp_mem/tcp_wem/tcp_rmem
    • net.core.netdev_buiséad
    • net.core.dev_meáchan
    • net.core.netdev_max_backlog
    • net.ipv4.tcp_slow_start_after_idle=0
    • net.ipv4.tcp_moderate_rcvbuf=0
    • net.ipv4.tcp_timestamps=0
    • net.ipv4.tcp_low_latency = 1
    • SO_PRIORITY
    • TCP_NODELAY

    Foinse: oscailtenet.ru

Add a comment