Optimizing Linux los lis 1.2 lab JSON thov ib ob

Cov lus qhia ntxaws ntxaws tau tshaj tawm ntawm kev kho Linux ib puag ncig kom ua tiav qhov kev ua tau zoo tshaj plaws rau kev ua HTTP thov. Cov txheej txheem tau hais tseg ua rau nws muaj peev xwm ua kom muaj kev ua tau zoo ntawm JSON processor raws li lub tsev qiv ntawv libreactor hauv Amazon EC2 ib puag ncig (4 vCPU) los ntawm 224 txhiab API thov ib ob nrog cov qauv teeb tsa ntawm Amazon Linux 2 nrog cov ntsiav 4.14 txog 1.2 lab thov ib. thib ob tom qab kev ua kom zoo (qhov nce ntawm 436%), thiab tseem ua rau txo qis hauv kev ua tiav kev thov los ntawm 79%. Cov txheej txheem tau hais tseg tsis yog tshwj xeeb rau libreactor thiab ua haujlwm thaum siv lwm tus http servers, suav nrog nginx, Actix, Netty thiab Node.js (libreactor tau siv hauv kev sim vim tias kev daws teeb meem raws li nws pom kev ua tau zoo dua).

Optimizing Linux los lis 1.2 lab JSON thov ib ob

Basic optimizations:

  • Optimizing libreactor code. Qhov kev xaiv R18 los ntawm cov khoom siv Techempower tau siv los ua lub hauv paus, uas tau txhim kho los ntawm kev tshem tawm cov lej los txwv cov lej ntawm CPU cores siv (kev ua kom zoo tso cai rau kev ua haujlwm nrawm los ntawm 25-27%), sib sau ua ke hauv GCC nrog "-O3" kev xaiv (nce 5-10%) thiab "-march-native" (5-10%), hloov kev nyeem / sau hu nrog recv / xa (5-10%) thiab txo nyiaj siv ua haujlwm thaum siv pthreads (2-3%) . Qhov kev ua tau zoo tag nrho tom qab kev ua kom zoo dua yog 55%, thiab cov khoom siv tau nce los ntawm 224k req / s rau 347k req / s.
  • Disable tiv thaiv tawm tsam speculative execution vulnerabilities. Siv cov kev txwv "nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off" thaum thauj cov ntsiav tso cai rau kev ua haujlwm nce ntxiv los ntawm 28%, thiab dhau los ntawm 347k req / s mus rau 446k req / s. Cais, qhov nce ntawm qhov parameter "nospectre_v1" (kev tiv thaiv los ntawm Spectre v1 + SWAPGS) yog 1-2%, "nospectre_v2" (kev tiv thaiv los ntawm Spectre v2) - 15-20%, "pti = tawm" (Spectre v3 / Meltdown) - 6 %, "mds=off tsx_async_abort=off" (MDS/Zombieload and TSX Asynchronous Abort) - 6%. Cov chaw rau kev tiv thaiv L1TF/Foreshadow (l1tf=flush), iTLB multihit, Speculative Store Bypass thiab SRBDS tawm tsam tsis hloov pauv, uas tsis cuam tshuam rau kev ua tau zoo vim lawv tsis cuam tshuam nrog kev sim teeb tsa (piv txwv li, tshwj xeeb rau KVM, nested virtualization thiab lwm yam CPU qauv).
  • Disabling auditing thiab system hu blocking mechanisms siv cov lus txib "auditctl -a never,task" thiab qhia qhov "--security-opt seccomp=unconfined" kev xaiv thaum pib lub thawv docker. Qhov kev ua tau zoo tag nrho yog 11%, thiab kev xa tawm tau nce los ntawm 446k req / s rau 495k req / s.
  • Disabling iptables / netfilter los ntawm unloading cov txuam kernel modules. Lub tswv yim los lov tes taw firewall, uas tsis tau siv rau hauv ib qho kev daws teeb meem ntawm server, tau tshwm sim los ntawm cov txiaj ntsig profile, txiav txim siab los ntawm qhov ua haujlwm nf_hook_slow tau siv 18% ntawm lub sijhawm los ua. Nws tau sau tseg tias nftables ua haujlwm tau zoo dua li iptables, tab sis Amazon Linux tseem siv iptables. Tom qab disabling iptables, qhov kev ua tau zoo nce yog 22%, thiab dhau los ntawm 495k req / s rau 603k req / s.
  • Txo kev tsiv teb tsaws chaw ntawm cov neeg ua haujlwm ntawm cov sib txawv CPU cores txhawm rau txhim kho kev ua haujlwm ntawm processor cache siv. Kev ua kom zoo tau ua tiav ob qho tib si ntawm qib kev sib txuas cov txheej txheem libreactor rau CPU cores (CPU Pinning) thiab los ntawm pinning kernel network handlers (Tau Txais Side Scaling). Piv txwv li, irqbalance yog neeg xiam oob qhab thiab kab affinity rau CPU tau qhia meej meej hauv /proc/irq/$IRQ/smp_affinity_list. Txhawm rau siv tib lub CPU core los ua cov txheej txheem libreactor thiab cov kab ke network ntawm cov pob khoom tuaj, tus neeg siv kev cai BPF yog siv, txuas los ntawm kev teeb tsa SO_ATTACH_REUSEPORT_CBPF chij thaum tsim lub qhov (socket). Txhawm rau khi cov kab ntawv ntawm cov pob ntawv tawm mus rau CPU, qhov chaw / sys / class / net / eth0 / queues / tx- tau hloov pauv /xps_cwb. Qhov kev ua tau zoo tag nrho yog 38%, thiab kev xa tawm tau nce los ntawm 603k req / s rau 834k req / s.
  • Kev ua kom zoo ntawm kev cuam tshuam kev tuav thiab siv kev xaiv tsa. Ua kom lub adaptive-rx hom nyob rau hauv ENA tsav tsheb thiab tswj sysctl net.core.busy_read nce kev ua tau zoo los ntawm 28% (throughput nce los ntawm 834k req / s rau 1.06M req / s, thiab latency txo los ntawm 361ΞΌs rau 292ΞΌs).
  • Disabling system cov kev pab cuam uas ua rau tsis tsim nyog thaiv nyob rau hauv lub network pawg. Disabling dhclient thiab manually teem tus IP chaw nyob ua rau ib tug 6% kev ua tau zoo nce thiab throughput nce los ntawm 1.06M req/s rau 1.12M req/s. Yog vim li cas dhclient cuam tshuam kev ua tau zoo yog nyob rau hauv kev tsom xam tsheb khiav siv lub qhov (socket) raw.
  • Sib ntaus Spin Lock. Hloov cov pawg network mus rau "noqueue" hom ntawm sysctl "net.core.default_qdisc = noqueue" thiab "tc qdisc hloov dev eth0 root mq" ua rau nce 2% kev ua tau zoo, thiab cov khoom siv tau nce los ntawm 1.12M req / s rau 1.15M req/s.
  • Qhov kawg me me optimizations, xws li disabling GRO (Generic Txais Offload) nrog cov lus txib "ethtool -K eth0 gro off" thiab hloov lub cubic congestion algorithm nrog reno siv sysctl "net.ipv4.tcp_congestion_control=reno". Tag nrho cov khoom tsim tau nce yog 4%. Kev xa tawm tau nce los ntawm 1.15M req / s rau 1.2M req / s.

Ntxiv nrog rau qhov kev ua kom zoo tshaj plaws uas tau ua haujlwm, tsab xov xwm tseem tham txog txoj hauv kev uas tsis ua rau qhov kev xav tau nce ntxiv. Piv txwv li, cov hauv qab no tau ua tsis tau zoo:

  • Khiav libreactor cais tsis txawv hauv kev ua haujlwm los ntawm kev khiav nws hauv lub thawv. Hloov writev nrog xa, nce maxevents hauv epoll_wait, thiab sim nrog GCC versions thiab chij tsis muaj txiaj ntsig (cov nyhuv pom tau tsuas yog rau "-O3" thiab "-march-native" chij).
  • Txhim kho Linux ntsiav rau versions 4.19 thiab 5.4, siv SCHED_FIFO thiab SCHED_RR cov sijhawm teem sijhawm, tswj hwm sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages = clocktever, kev ua haujlwm
  • Hauv ENA tsav tsheb, ua kom Offload hom (segmentation, scatter-sau, rx/tx checksum), lub tsev nrog "-O3" chij, thiab siv cov ena.rx_queue_size thiab ena.force_large_llq_header tsis muaj txiaj ntsig.
  • Kev hloov pauv hauv pawg network tsis tau txhim kho kev ua haujlwm:
    • Disable IPv6: ipv6.disable=1
    • Disable VLAN: modprobe -rv 8021q
    • Disable pob qhov chaw kuaj xyuas
      • net.ipv4.conf.all.rp_filter=0
      • net.ipv4.conf.eth0.rp_filter=0
      • net.ipv4.conf.all.accept_local=1 (cov nyhuv tsis zoo)
    • 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

    Tau qhov twg los: opennet.ru

Ntxiv ib saib