Hagræðingu Linux að vinna úr 1.2 milljón JSON beiðnum á sekúndu

Ítarleg leiðbeiningar um aðlögun umhverfisins hafa verið gefnar út. Linux til að ná hámarksafköstum fyrir vinnslu HTTP beiðna. Þessar aðferðir sem lagðar voru til gerðu okkur kleift að auka afköst JSON-þáttara byggt á lireactor-bókasafninu í Amazon EC2 umhverfi (4 vCPU) úr 224 API-beiðnum á sekúndu samkvæmt stöðluðum Amazon-stillingum. Linux Útgáfa 2 með kjarna 4.14 jók afköstin í 1.2 milljónir beiðna á sekúndu eftir fínstillingu (436% aukning) og minnkaði einnig seinkun á vinnslu beiðna um 79%. Tillögurnar að aðferðunum sem lagðar eru til eru ekki sértækar fyrir Libreactor og virka með öðrum HTTP netþjónum, þar á meðal nginx, Actix, Netty og Node.js (libreactor var notað í prófunum, þar sem lausnin sem byggði á því sýndi betri afköst).

Hagræðingu Linux að vinna úr 1.2 milljón JSON beiðnum á sekúndu

Grunnhagræðingar:

  • Fínstillir Libreactor kóða. R18 valmöguleikinn úr Techempower settinu var notaður sem grunnur, sem var endurbættur með því að fjarlægja kóða til að takmarka fjölda CPU kjarna sem notaðir voru (hagræðing leyfði að flýta vinnu um 25-27%), setja saman í GCC með "-O3" valkostunum (hækkun um 5-10% ) og "-mars-native" (5-10%), sem kemur í stað les/skrifa símtölum fyrir recv/send (5-10%) og minnkar kostnað við notkun pthreads (2-3%) . Heildarframmistöðuaukningin eftir fínstillingu kóðans var 55% og afköst jukust úr 224k req/s í 347k req/s.
  • Að slökkva á vörn gegn veikleikum af völdum tilgátukenndrar framkvæmdar skipana. Með því að nota kjarnaræsingarbreyturnar "nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off" jókst afköst um 28% og afköst jukust úr 347k req/s í 446k req/s. Fyrir hvert og eitt var aukningin frá "nospectre_v1" breytunni (vernd gegn Spectre v1 + SWAPGS) 1-2%, "nospectre_v2" (vernd gegn Spectre v2) - 15-20%, "pti=off" (Spectre v3/Meltdown) - 6%, "mds=off tsx_async_abort=off" (MDS/Zombieload og TSX Asynchronous Abort) - 6%. Stillingarnar fyrir vörn gegn L1TF/Foreshadow árásum (l1tf=flush), iTLB multihit, Speculative Store Bypass og SRBDS, sem höfðu ekki áhrif á afköst, voru óbreyttar þar sem þær skarast ekki við prófaða stillinguna (til dæmis eru þær sértækar fyrir KVM, innfelld sýndarvæðing og aðrar örgjörvalíkön).
  • Slökkt á endurskoðun og kerfissímtölum með því að nota "auditctl -a never,task" skipunina og tilgreina "--security-opt seccomp=unconfined" valmöguleikann þegar hafnargeymirinn er ræstur. Heildarframmistöðuaukningin var 11% og afköst jókst úr 446k req/s í 495k req/s.
  • Að slökkva á iptables/netfilter með því að afferma tengda kjarnaeiningar. Hugmyndin að slökkva á eldvegg sem var ekki notaður í tiltekinni netþjónslausn kom upp vegna niðurstaðna úr prófílgerð, sem sýndu að nf_hook_slow fallið eyddi 18% af tímanum í keyrslu. Það er tekið fram að nftables er skilvirkara en iptables, en á Amazon... Linux iptables er enn í notkun. Eftir að iptables var slökkt jókst afköstin um 22% og gagnaflutningsgetan jókst úr 495 req/s í 603 req/s.
  • Minni flutningur meðhöndlara milli mismunandi örgjörvakjarna til að bæta skilvirkni skyndiminnis örgjörva. Hagræðing var framkvæmd bæði á því stigi að binda libreactor ferla við CPU kjarna (CPU Pinning) og með því að festa kjarnanetstjórnun (Receive Side Scaling). Til dæmis var irqbalance óvirkt og biðraðarsækni við örgjörva var sérstaklega stillt í /proc/irq/$IRQ/smp_affinity_list. Til að nota sama CPU kjarna til að vinna úr libreactor ferlinu og netröð komandi pakka, er sérsniðinn BPF meðhöndlun notaður, tengdur með því að stilla SO_ATTACH_REUSEPORT_CBPF fánann þegar falsið er búið til. Til að binda biðraðir útgefinna pakka við örgjörvann hefur stillingunum /sys/class/net/eth0/queues/tx- verið breytt /xps_cpus. Heildarframmistöðuaukningin var 38% og afköst jókst úr 603k req/s í 834k req/s.
  • Hagræðing á meðhöndlun truflana og notkun kosninga. Með því að virkja aðlögunarhæfni-rx stillinguna í ENA drivernum og meðhöndla sysctl net.core.busy_read jókst árangur um 28% (afköst jukust úr 834k req/s í 1.06M req/s, og leynd minnkaði úr 361μs í 292μs).
  • Að slökkva á kerfisþjónustum sem valda óþarfa netstakkalásum. Að slökkva á dhclient og setja upp IP tölur Handvirk framkvæmd þessa verkefnis leiddi til 6% aukningar á afköstum, þar sem afköst jukust úr 1.06 milljón kröfum/s í 1.12 milljónir kröfum/s. Ástæðan fyrir áhrifum dhclient á afköst er umferðargreining með því að nota hráan tengil.
  • Fighting Spin Lock. Að skipta um netstafla yfir í „noqueue“ ham í gegnum sysctl „net.core.default_qdisc=noqueue“ og „tc qdisc replace dev eth0 root mq“ leiddi til 2% afkastaaukningar og afköst jukust úr 1.12M req/s í 1.15M beiðni/s.
  • Lokastillingar, eins og að slökkva á GRO (Generic Receive Offload) með skipuninni „ethtool -K eth0 gro off“ og skipta út reikniritinu til að stjórna kubískum þrengslum fyrir reno með því að nota sysctl „net.ipv4.tcp_congestion_control=reno“. Heildarframleiðniaukningin var 4%. Afköst jukust úr 1.15M req/s í 1.2M req/s.

Auk hagræðinganna sem virkuðu er í greininni einnig fjallað um aðferðir sem leiddu ekki til væntanlegrar frammistöðuaukningar. Til dæmis reyndist eftirfarandi árangurslaust:

  • Að keyra Libreactor sérstaklega var ekki frábrugðin frammistöðu frá því að keyra hann í íláti. Það að skipta út writev fyrir send, auka maxevents í epoll_wait og gera tilraunir með GCC útgáfur og fána hafði engin áhrif (áhrifin voru aðeins áberandi fyrir „-O3“ og „-march-native“ fánana).
  • Kjarnauppfærslan hafði engin áhrif á afköstin. Linux Upp að útgáfum 4.19 og 5.4, með því að nota SCHED_FIFO og SCHED_RR tímaáætlunarkerfin, meðhöndla sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=never, skew_tick=1 og clocksource=tsc.
  • Í ENA ökumanninum hafði það engin áhrif að virkja afhleðsluhami (skiptingu, dreifingu, rx/tx checksum), byggja með „-O3“ fánanum og nota ena.rx_queue_size og ena.force_large_llq_header færibreyturnar.
  • Breytingar á netstafla bættu ekki afköst:
    • Slökkva á IPv6: ipv6.disable=1
    • Slökktu á VLAN: modprobe -rv 8021q
    • Slökktu á upprunaathugun pakka
      • net.ipv4.conf.all.rp_filter=0
      • net.ipv4.conf.eth0.rp_filter=0
      • net.ipv4.conf.all.accept_local=1 (neikvæð áhrif)
    • net.ipv4.tcp_sack = 0
    • net.ipv4.tcp_dsack=0
    • net.ipv4.tcp_mem/tcp_wmem/tcp_rmem
    • net.core.netdev_budget
    • net.core.dev_weight
    • 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

    Heimild: opennet.ru

Kauptu áreiðanlega hýsingu fyrir síður með DDoS vernd, VPS VDS netþjónum 🔥 Kauptu áreiðanlega vefhýsingu með DDoS vörn, VPS VDS netþjónum | ProHoster