Ottimizzazzjoni Linux biex jipproċessa 1.2 miljun talba JSON kull sekonda

Ġiet ippubblikata gwida dettaljata dwar l-irfinar tal-ambjent. Linux biex niksbu l-massimu tal-prestazzjoni għall-ipproċessar tat-talbiet HTTP. Il-metodi proposti ppermettewlna nżidu l-prestazzjoni tal-parser JSON ibbażat fuq il-librerija libreactor f'ambjent Amazon EC2 (4 vCPUs) minn 224 talba API kull sekonda taħt settings standard ta' Amazon. Linux 2 bil-kernel 4.14 żied ir-rendiment għal 1.2 miljun talba kull sekonda wara l-ottimizzazzjoni (żieda ta' 436%), u naqqas ukoll il-latenza tal-ipproċessar tat-talbiet b'79%. Il-metodi proposti mhumiex speċifiċi għal libreactor u jaħdmu ma' servers HTTP oħra, inklużi nginx, Actix, Netty, u Node.js (libreactor intuża fit-testijiet, peress li s-soluzzjoni bbażata fuqu wriet prestazzjoni aħjar).

Ottimizzazzjoni Linux biex jipproċessa 1.2 miljun talba JSON kull sekonda

Ottimizzazzjonijiet bażiċi:

  • Ottimizzazzjoni tal-kodiċi tal-libreactor. L-għażla R18 mill-kit Techempower intużat bħala bażi, li ġiet imtejba billi tneħħiet il-kodiċi biex jillimita n-numru ta 'cores CPU użati (l-ottimizzazzjoni ppermettiet li titħaffef ix-xogħol b'25-27%), assemblaġġ f'GCC bl-għażliet "-O3" (żieda ta '5-10% ) u "-march-native" (5-10%), tissostitwixxi sejħiet ta' qari/kitba b'recv/send (5-10%) u tnaqqas l-overhead meta tuża pthreads (2-3%) . Iż-żieda fil-prestazzjoni ġenerali wara l-ottimizzazzjoni tal-kodiċi kienet ta '55%, u l-fluss żdied minn 224k req/s għal 347k req/s.
  • Id-diżattivazzjoni tal-protezzjoni kontra vulnerabbiltajiet ikkawżati minn eżekuzzjoni spekulattiva ta' struzzjonijiet. L-użu tal-parametri tal-bidu tal-kernel "nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off" żied il-prestazzjoni bi 28%, u t-throughput żdied minn 347k req/s għal 446k req/s. Individwalment, il-qligħ mill-parametru "nospectre_v1" (protezzjoni minn Spectre v1 + SWAPGS) kien ta' 1-2%, "nospectre_v2" (protezzjoni minn Spectre v2) - 15-20%, "pti=off" (Spectre v3/Meltdown) - 6%, "mds=off tsx_async_abort=off" (MDS/Zombieload u TSX Asynchronous Abort) - 6%. Is-settings għall-protezzjoni kontra l-attakki L1TF/Foreshadow (l1tf=flush), iTLB multihit, Speculative Store Bypass u SRBDS, li ma affettwawx il-prestazzjoni, tħallew l-istess, peress li ma intersekawx mal-konfigurazzjoni ttestjata (pereżempju, huma speċifiċi għal KVM, virtualizzazzjoni nested u mudelli oħra ta' CPU).
  • Id-diżattivazzjoni tal-mekkaniżmi tal-awditjar u l-imblukkar tas-sejħiet tas-sistema billi tuża l-kmand "auditctl -a never,task" u tispeċifika l-għażla "--security-opt seccomp=unconfined" meta tibda l-kontenitur docker. Iż-żieda fil-prestazzjoni ġenerali kienet ta '11%, u l-fluss żdied minn 446k req/s għal 495k req/s.
  • Id-diżattivazzjoni ta' iptables/netfilter billi jitneħħew il-moduli tal-kernel assoċjati. L-idea li jiġi diżattivat firewall li ma ntużax f'soluzzjoni speċifika ta' server ġiet imqanqla mir-riżultati tal-profiling, li wrew li l-funzjoni nf_hook_slow qattgħet 18% tal-ħin teżegwixxi. Ta' min jinnota li nftables hija aktar effiċjenti minn iptables, iżda fuq Amazon Linux iptables għadu jintuża. Wara li ġie diżattivat iptables, il-prestazzjoni żdiedet bi 22%, u t-throughput żdied minn 495k req/s għal 603k req/s.
  • Migrazzjoni mnaqqsa ta 'handlers bejn cores CPU differenti biex tittejjeb l-effiċjenza tal-użu tal-cache tal-proċessur. L-ottimizzazzjoni twettqet kemm fil-livell ta 'proċessi ta' libreactor li jorbtu għal CPU cores (CPU Pinning) kif ukoll permezz ta 'pinning kernel network handlers (Receive Side Scaling). Pereżempju, irqbalance ġie diżattivat u l-affinità tal-kju mas-CPU ġiet issettjata b'mod espliċitu f'/proc/irq/$IRQ/smp_affinity_list. Biex tuża l-istess qalba tas-CPU biex tipproċessa l-proċess ta 'libreactor u l-kju tan-netwerk ta' pakketti deħlin, jintuża handler BPF personalizzat, imqabbad billi tissettja l-bandiera SO_ATTACH_REUSEPORT_CBPF meta toħloq is-sokit. Biex torbot kjuwijiet ta' pakketti ħerġin mas-CPU, is-settings /sys/class/net/eth0/queues/tx- ġew mibdula /xps_cpus. Iż-żieda ġenerali fil-prestazzjoni kienet ta '38%, u l-fluss żdied minn 603k req/s għal 834k req/s.
  • Ottimizzazzjoni tal-immaniġġjar tal-interruzzjonijiet u l-użu tal-votazzjoni. L-attivazzjoni tal-mod adattivi-rx fis-sewwieq ENA u l-manipulazzjoni tas-sysctl net.core.busy_read żiedu l-prestazzjoni bi 28% (il-fluss żdied minn 834k req/s għal 1.06M req/s, u l-latency naqset minn 361μs għal 292μs).
  • Id-diżattivazzjoni tas-servizzi tas-sistema li jikkawżaw serraturi bla bżonn tal-istack tan-netwerk. Id-diżattivazzjoni tad-dhclient u l-installazzjoni indirizzi IP It-twettiq manwali ta' dan il-kompitu rriżulta f'żieda ta' 6% fil-prestazzjoni, bit-throughput jiżdied minn 1.06M req/s għal 1.12M req/s. Ir-raġuni għall-impatt ta' dhclient fuq il-prestazzjoni hija dovuta għall-analiżi tat-traffiku bl-użu ta' socket mhux ipproċessat.
  • Ġlieda kontra Spin Lock. Il-bdil tal-munzell tan-netwerk għall-modalità "noqueue" permezz ta' sysctl "net.core.default_qdisc=noqueue" u "tc qdisc replace dev eth0 root mq" wassal għal żieda fil-prestazzjoni ta' 2%, u l-fluss żdied minn 1.12M req/s għal 1.15M req/s.
  • Ottimizzazzjonijiet minuri finali, bħall-diżattivazzjoni ta 'GRO (Ġeneric Receive Offload) bil-kmand "ethtool -K eth0 gro off" u tibdil tal-algoritmu tal-kontroll tal-konġestjoni kubika b'reno bl-użu ta' sysctl "net.ipv4.tcp_congestion_control=reno". Iż-żieda ġenerali fil-produttività kienet ta' 4%. It-throughput żdied minn 1.15M req/s għal 1.2M req/s.

Minbarra l-ottimizzazzjonijiet li ħadmu, l-artikolu jiddiskuti wkoll metodi li ma wasslux għaż-żieda fil-prestazzjoni mistennija. Pereżempju, dan li ġej irriżulta li ma kienx effettiv:

  • It-tħaddim tal-libreactor separatament ma kienx differenti fil-prestazzjoni milli t-tħaddim tiegħu f'kontenitur. Is-sostituzzjoni ta’ writev ma’ send, iż-żieda tal-maxevents f’epoll_wait, u l-esperimentazzjoni b’verżjonijiet u bnadar tal-GCC ma kellhom l-ebda effett (l-effett kien notevoli biss għall-bnadar “-O3” u “-march-native”).
  • L-aġġornament tal-kernel ma affettwax il-prestazzjoni. Linux sal-verżjonijiet 4.19 u 5.4, bl-użu tal-iskedulaturi SCHED_FIFO u SCHED_RR, li jimmanipulaw sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=never, skew_tick=1 u clocksource=tsc.
  • Fis-sewwieq ENA, l-attivazzjoni tal-modi ta 'Offload (segmentazzjoni, scatter-gather, checksum rx/tx), il-bini bil-bandiera "-O3", u l-użu tal-parametri ena.rx_queue_size u ena.force_large_llq_header ma kellhom l-ebda effett.
  • Bidliet fil-munzell tan-netwerk ma tejbux il-prestazzjoni:
    • Itfi IPv6: ipv6.disable=1
    • Itfi VLAN: modprobe -rv 8021q
    • Iddiżattiva l-iċċekkjar tas-sors tal-pakkett
      • net.ipv4.conf.all.rp_filter=0
      • net.ipv4.conf.eth0.rp_filter=0
      • net.ipv4.conf.all.accept_local=1 (effett negattiv)
    • 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

    Sors: opennet.ru

Ixtri hosting affidabbli għal siti bi protezzjoni DDoS, servers VPS VDS 🔥 Ixtri hosting ta' websajts affidabbli bi protezzjoni DDoS, servers VPS VDS | ProHoster