Optimization Linux i brosesu 1.2 miliwn o geisiadau JSON yr eiliad

Mae canllaw manwl ar gyfer tiwnio'r amgylchedd wedi'i gyhoeddi. Linux i sicrhau'r perfformiad mwyaf posibl ar gyfer prosesu ceisiadau HTTP. Roedd y dulliau arfaethedig yn caniatáu inni gynyddu perfformiad y dadansoddydd JSON yn seiliedig ar lyfrgell y libreactor mewn amgylchedd Amazon EC2 (4 vCPU) o 224 o geisiadau API yr eiliad o dan osodiadau safonol Amazon. Linux Cynyddodd fersiwn 2 gyda chnewyllyn 4.14 y trwybwn i 1.2 miliwn o geisiadau yr eiliad ar ôl optimeiddio (cynnydd o 436%), a lleihaodd hefyd yr oedi prosesu ceisiadau 79%. Nid yw'r dulliau arfaethedig yn benodol i libreactor ac maent yn gweithio gyda gweinyddion HTTP eraill, gan gynnwys nginx, Actix, Netty, a Node.js (defnyddiwyd libreactor yn y profion, gan fod yr ateb yn seiliedig arno wedi dangos perfformiad gwell).

Optimization Linux i brosesu 1.2 miliwn o geisiadau JSON yr eiliad

Optimeiddio sylfaenol:

  • Optimeiddio cod libreactor. Defnyddiwyd yr opsiwn R18 o'r pecyn Techempower fel sail, a gafodd ei wella trwy gael gwared ar y cod i gyfyngu ar nifer y creiddiau CPU a ddefnyddir (roedd optimeiddio yn caniatáu cyflymu gwaith 25-27%), gan gydosod yn GCC gyda'r opsiynau “-O3”. (cynnydd o 5-10%) a "-march-brodorol" (5-10%), disodli galwadau darllen/ysgrifennu gyda recv/anfon (5-10%) a lleihau gorbenion wrth ddefnyddio edreadau (2-3%) . Y cynnydd cyffredinol mewn perfformiad ar ôl optimeiddio cod oedd 55%, a chynyddodd trwybwn o 224k cais/s i 347k cais/s.
  • Analluogi amddiffyniad rhag gwendidau a achosir gan weithredu cyfarwyddiadau ar hap. Gan ddefnyddio'r paramedrau cychwyn cnewyllyn "nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off" cynyddodd perfformiad 28%, a chynyddodd y trwybwn o 347k req/s i 446k req/s. Yn unigol, roedd yr enillion o'r paramedr "nospectre_v1" (amddiffyniad rhag Spectre v1 + SWAPGS) yn 1-2%, "nospectre_v2" (amddiffyniad rhag Spectre v2) - 15-20%, "pti=off" (Spectre v3/Meltdown) - 6%, "mds=off tsx_async_abort=off" (MDS/Zombieload ac TSX Asynchronous Abort) - 6%. Gadawyd y gosodiadau ar gyfer amddiffyn rhag ymosodiadau L1TF/Foreshadow (l1tf=flush), iTLB multihit, Speculative Store Bypass ac SRBDS, nad oeddent yn effeithio ar berfformiad, heb eu newid, gan nad oeddent yn croestorri â'r cyfluniad a brofwyd (er enghraifft, maent yn benodol i KVM, rhithwiroli nythu a modelau CPU eraill).
  • Analluogi archwilio a mecanweithiau blocio galwadau system gan ddefnyddio'r gorchymyn "auditctl -a never,task" a nodi'r opsiwn "--security-opt seccomp=unconfined" wrth gychwyn y cynhwysydd docwr. Y cynnydd cyffredinol mewn perfformiad oedd 11%, a chynyddodd trwybwn o 446k o ofynion i 495k o ofynion.
  • Analluogi iptables/netfilter drwy ddadlwytho modiwlau cnewyllyn cysylltiedig. Ysgogwyd y syniad i analluogi wal dân nad oedd yn cael ei defnyddio mewn datrysiad gweinydd penodol gan ganlyniadau proffilio, a ddangosodd fod y swyddogaeth nf_hook_slow yn treulio 18% o'r amser yn gweithredu. Nodwyd bod nftables yn fwy effeithlon nag iptables, ond ar Amazon Linux Mae iptables yn parhau i gael ei ddefnyddio. Ar ôl analluogi iptables, cynyddodd perfformiad 22%, a chynyddodd y trwybwn o 495k req/s i 603k req/s.
  • Llai o ymfudiad trinwyr rhwng gwahanol greiddiau CPU i wella effeithlonrwydd y defnydd o storfa prosesydd. Cyflawnwyd optimeiddio ar lefel prosesau rhwymol libreactor i creiddiau CPU (Pinnio CPU) a thrwy drinwyr rhwydwaith cnewyllyn pinio (Derbyn Graddio Ochr). Er enghraifft, analluogwyd irqbalance a gosodwyd affinedd ciw i'r CPU yn benodol yn /proc/irq/$IRQ/smp_affinity_list. I ddefnyddio'r un craidd CPU i brosesu'r broses libreactor a'r ciw rhwydwaith o becynnau sy'n dod i mewn, defnyddir triniwr BPF wedi'i deilwra, wedi'i gysylltu trwy osod baner SO_ATTACH_REUSEPORT_CBPF wrth greu'r soced. Er mwyn clymu ciwiau o becynnau sy'n mynd allan i'r CPU, mae'r gosodiadau / sys/class/net/eth0/queues/tx- wedi'u newid /xps_cpus. Y cynnydd cyffredinol mewn perfformiad oedd 38%, a chynyddodd trwybwn o 603k o ofynion i 834k o ofynion.
  • Optimeiddio trin ymyriadau a defnyddio pleidleisio. Cynyddodd galluogi'r modd addasol-rx yn y gyrrwr ENA a thrin sysctl net.core.busy_read berfformiad 28% (cynyddodd trwybwn o 834k req/s i 1.06M req/s, a gostyngodd hwyrni o 361μs i 292μs).
  • Analluogi gwasanaethau system sy'n achosi cloeon pentwr rhwydwaith diangen. Analluogi dhclient a gosod Cyfeiriadau IP Arweiniodd cyflawni'r dasg hon â llaw at gynnydd o 6% mewn perfformiad, gyda'r trwybwn yn cynyddu o 1.06M req/s i 1.12M req/s. Y rheswm dros effaith dhclient ar berfformiad yw oherwydd dadansoddiad traffig gan ddefnyddio soced amrwd.
  • Ymladd Spin Lock. Arweiniodd newid y pentwr rhwydwaith i'r modd “noqueue” trwy sysctl “net.core.default_qdisc=noqueue” a “tc qdisc replace dev eth0 root mq” at gynnydd perfformiad o 2%, a chynyddodd trwybwn o 1.12M req/s i 1.15M gofyn/au.
  • Mân optimeiddiadau terfynol, megis analluogi GRO (Generic Receive Offload) gyda'r gorchymyn “ethtool -K eth0 gro off” a disodli'r algorithm rheoli tagfeydd ciwbig gyda reno gan ddefnyddio sysctl “net.ipv4.tcp_congestion_control=reno”. Y cynnydd cyffredinol mewn cynhyrchiant oedd 4%. Cynyddodd trwybwn o 1.15M o ymholiad i 1.2M o ymholiad.

Yn ogystal â'r optimizations a weithiodd, mae'r erthygl hefyd yn trafod dulliau nad oedd yn arwain at y cynnydd perfformiad disgwyliedig. Er enghraifft, roedd y canlynol yn aneffeithiol:

  • Nid oedd perfformiad rhedeg libreactor ar wahân yn wahanol o ran perfformiad i'w redeg mewn cynhwysydd. Ni chafodd disodli writev ag anfon, cynyddu maxevents yn epoll_wait, ac arbrofi gyda fersiynau GCC a baneri unrhyw effaith (dim ond ar gyfer y baneri “-O3” a “-march-native” yr oedd yr effaith yn amlwg.
  • Ni effeithiodd y diweddariad cnewyllyn ar berfformiad. Linux hyd at fersiynau 4.19 a 5.4, gan ddefnyddio'r amserlenwyr SCHED_FIFO a SCHED_RR, gan drin sysctl kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, transparent_hugepages=never, skew_tick=1 a clocksource=tsc.
  • Yn y gyrrwr ENA, nid oedd gan alluogi moddau Offload (segmentu, gwasgariad-gasglu, checksum rx/tx), adeiladu gyda'r faner “-O3”, a defnyddio'r paramedrau ena.rx_queue_size ac ena.force_large_llq_header unrhyw effaith.
  • Ni wnaeth newidiadau yn y pentwr rhwydwaith wella perfformiad:
    • Analluogi IPv6: ipv6.disable=1
    • Analluogi VLAN: modprobe -rv 8021q
    • Analluogi gwirio ffynhonnell pecyn
      • net.ipv4.conf.all.rp_filter=0
      • net.ipv4.conf.eth0.rp_filter=0
      • net.ipv4.conf.all.accept_local=1 (effaith negyddol)
    • net.ipv4.tcp_sack = 0
    • net.ipv4.tcp_dsack=0
    • net.ipv4.tcp_mem/tcp_wem/tcp_rmem
    • net.core.netdev_gyllideb
    • net.core.dev_pwysau
    • 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

    Ffynhonnell: opennet.ru

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd â diogelwch DDoS, gweinyddwyr VPS VDS 🔥 Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster