Երկաթի և ռեսուրսների օպտիմիզացումը
Live ռեզյումե
Օպտիմիզացիան ոչ թե «մեկ բան արագացնելը» է, այլ արտադրողականությունը նվազեցնել ռուսական էներգիայի արժեքը։ Հիմնական քայլերը 'չափել SLI/SLO և պրոֆիլները, գտնել նեղ տեղեր, «ճիշտ չափել» կարողությունները, ավտոմատացնել մասշտաբը և ամրացնել բարելավումները պատկերներում/գծապատկերներում/քաղաքականություններում։
Նպատակներն ու սկզբունքները
UX-ից մինչև երկաթը, սկսենք SLO-ից (p95 latency, վիրահատությունների հաջողությունը), մենք փնտրում ենք սահմանափակող ռեսուրս։
Ճիշտ չափսը (rightsizing) 'ռեսուրսները և ինստանսների տեսակները բեռի բնույթի տակ։
Քեշը և հարևանությունը 'նվազեցրեք «թանկ» քայլերը պահեստների և ցանցերի համար։
Ավտոմատիզացիա 'autoscaling, կյանքի ցիկլի քաղաքականություն, IaC։
Դիտարկումը '«չորս ազդանշաններ», CPU/alloc, թրեյսինգ։
Անվտանգություն = արտադրողականություն: mTSA/ստորագրություններ/լիմիտներ - ապարատային արագացումով, որտեղ հնարավոր է։
CPU և պլանավորումը
Առաջադրանքները 'նվազագույնի հասցնել և քեշի բացթողումները, հաշվի առնել NUMA-ը և ընդհատել։
NUMA-տեղեկությունը 'pinning-ը հանգույցների վրա («numactl--cpunodebind--membind»), BD/brocers-ի համար - ամրագրել։
IRQ/sportirq: բաժանել միջուկներով (RFC/RPS), ամրացնել տաք գծերը CPU-ի համար առանց մրցակցության վորկերների հետ։
Հիպերպեռնությունը '«զգայուն լատենտության» համար, ֆիզիկական միջուկների վորկերները ամրագրելն է։
Ենթատեքստը 'նվազեցնել երկար գծերի/բատչինգի/ասինխրոնի միջոցով։
Կազմողները/JIT: Ներառել PGO/LTO (C/C + +), Graal/HotSpot պրոֆիլները (Java), «GOMAXPROCS» և գողերի (Go)։
Linux-Tuning-ի օրինակները (բեկորներ)
bash
IRQ affinity: bind NIC queue to specific CPU echo 2 >/ proc/irq/XX/smp_affinity # kernel mask
Softirq balance on sysctl -w net network cores. core. netdev_budget=600 sysctl -w net. core. netdev_max_backlog=5000
Հիշողությունը և ալոկացիաների կառավարումը
THP/HugePages: JVM/DB-ի համար սովորաբար անջատել THP-ը և օգտագործել hugepages ձեռքով (նվազեցնում է TLB-propachi)։
NUMA-հավասարակշռությունը 'stateful-ի համար, տեղադրեք հիշողությունը տեղական խմբագրության վրա։
GC/allocator:- JVM: G1/ZGC, «-Xim = -Xmx» հավասար, խելացի «WinGCPauseMillis»։
- Go: 'GOGC' (սկսել 100-200-ից), խուսափել ավելորդ ալոկացիաներից, ավելցուկներից 'edrof'։
- Python 'օգտագործել «uvloop», «asyncio», C-ընդարձակումը, փամփուշտը։
- Swap/zswap: Վաճառքի ժամանակ սովորաբար swap off-ը կրիտիկական ծառայությունների համար։ ընդհանուր նշանակման հանգույցներում zswap-ն է «փափուկ» բեռների համար։
Պահեստավորում և I/O
Սկավառակների տեսակները ՝ NVMe-ը hot-path-ի տակ, առանձին շուլեր լոգարանների/chekapoints/տեմպի համար։
ՖՍ: XIV մեծ ֆայլերի/BD ամսագրերի համար; ext4 փոքր/համընդհանուր համար։
MS/EC: RAID10 ցածր ուշացման համար, RAID6/EC - սառը տվյալների տակ։
I/O պլանավորողները '"none '/" mq-dead.ru" NVMe-ի համար։
Async/Batch: Խմբավորեք ձայնագրությունները, օգտագործեք Write-Behind/Group-Commit-ը։
Ֆիո գնահատման համար (օրինակ)
bash fio --name=randread --filename=/data/test --size=20G --bs=4k \
--iodepth=64 --rw=randread --ioengine=libaio --numjobs=4 --time_based --runtime=60
Ցանցը
MTU-ը և www.load: 9000 MTU-ն Դանաչենտրում (եթե end-to-end), միացրեք GRO/LRO-ն, որտեղ թույլատրելի է։
RSA/RPS/RSA 'NIC-ի բազմաբնույթ գծերը, միջուկների բաշխումը։ irqbal.ru - վերահսկողության տակ։
SO _ REUSE.RU 'լայնածավալ listen-սոկետներ, որոնք տարածվում են միջուկներով։
Հաճախորդների թայմաուտները և գնդացիրները 'կարճ TCP-keepalive, բաց կոննեկտների սահմանը, backpressure։
TLS: TLS 1. 3, ապարատային հրահանգներ AES-NI, session resumption, OCSA stapling։
Ցանցային թյունինգը (բեկորներ)
bash sysctl -w net. core. rmem_max=268435456 sysctl -w net. core. wmem_max=268435456 sysctl -w net. ipv4. tcp_rmem="4096 87380 134217728"
sysctl -w net. ipv4. tcp_wmem="4096 65536 134217728"
GPU/FPGA/SmartNIC (որտեղ տեղին է)
GPU 'հակաֆրոդի հինֆիս, առաջարկություններ, CV; վերահսկել «util», «mem», «sm _ efficiency»։
SmartNIC/eBPF/DPK ՝ L4/L7 բեռնումը, ֆիլտրը, հեռաչափությունը առանց միջուկի անցման։
Էներգպրոֆիլ 'ամրագրել հաճախականությունները կայուն լատենտության տակ։ խուսափել ագրեսիվ-save-save-ից։
Ծրագրեր և RNUBD
Պուլները ՝ սահմանափակել «max _ conns», օգտագործել connational pooling (PgBouncer/Hikari)։
Ինդեքսներ/պլանավորողներ 'SNAIN/ANMS ZE պրոֆիլներ, որոնք ծածկում են ինդեքսները, կուսակցությունը։
Քեշինգը 'Redis/in գործընթացը, CDN ստատիկայի համար, edge-քեշը «տաք» API-ի համար։
Իդեմպոտենտություն և հերթեր. Խուսափեք գետերի կասկադներից, միացրեք dedup։
Gzip/Brotli: Պատասխանների թեմը հաշվի առնելով CPU արժեքը։ հավասարակշռություն ընտրեք։
Բեռնարկղերը և Kubernetes-ը
Requests/Limits и bin-packing
Reques.ru = «երաշխիք», Limits = «առաստաղը»։ Սխալ Limits-ը CPU-ում wwww.throtling-ը և p99-ը։
Հաշվի առեք burst բեռը (տրամագծերի պիկի/105) - p95։
Bin-packing: բաժանեք հանգույցների պուլերը (latency-crit, batch, GPU, spot)։ Օգտագործեք տեղաբանություն (anti-affinity, spread)։
Ավտոմլյացիան
HPA-ն կաստոմային մետրիկների վրա (RPS/p95, ոչ թե CPU)։
MSA-ն «երկար» և «անպիտան» գողերի համար։
Cluster Autoscaler + առանձին node խմբեր (on-demand/spot)։
KEDA-ը իրադարձական բեռների համար (հերթեր, Kafka, com)։
Պլանավորող և ղեկավարներ
CPU International: «Static» լրիվ latency-քննադատական ենթատեսակների համար։
Topology You 'NUMA-ի հավասարումը։
HugePages/Device Plugins: BD/ցածր լատենտության և GPU/FPGA-ի համար։
HPA-ի օրինակը (latency-aere, մեթրիկի ադապտերի միջոցով)
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: api-gw }
spec:
scaleTargetRef:
apiVersion: apps/v1 kind: Deployment name: api-gw minReplicas: 6 maxReplicas: 60 metrics:
- type: Pods pods:
metric:
name: http_latency_p95_ms target:
type: AverageValue averageValue: 120
FinOps և արժեքը
Սակագների ավելցուկ 'ընտրել instans CPU/RAM/Disco/ցանցի (compore-optimized, memory-optimized, storage-optimized)։
Spot/Systemptible: batch/steiging/kashey-ի համար անջատողական ավելցուկ։
Reservation/Savings: 1-3 տարի «մշտական» մասի համար։
Տաք/ցուրտ 'tiered-storage, արխիվների օբյեկտ, retenshn logs։
Idle-ռեսուրսներ 'գիշերային/uicend-կանգառներ ոչ կրիտիկական միջավայրերում։
Էներգաարդյունավետություն (GreenOps)
Eurofiles: performensvs balanced ծառայություններ։
Ko-տեղադրումը '«սառը» ժամացույցի հեռացումը, չօգտագործված հանգույցների անջատումը։
KPI: Watt հարցման, r95/watt, CO-ը պրովայդերի չափորոշիչները։
Դիտարկումը և փորձարկումը
Метрики: CPU steal/throttle, `cycles/instructions`, LLC miss, RSS/working set, page faults, disk lat p95/99, NIC drops, retransmits.
Թրեյսինգ 'բաշխված թրեյսներ «ոսկե ճանապարհների» համար։
Ավելացումը ՝ eBPF/Perf/Flamegraphs, «www.rof »/YourKit/JFR։
Բեռային թեստեր ՝ SLO-կողմնորոշված, իրական mix վիրահատությունների հետ, բարդ «տաքացում», fox-միգրացիա։
PromQL (գաղափարներ)
promql
CPU throttling доля sum(rate(container_cpu_cfs_throttled_seconds_total[5m])) by (pod)
/ sum(rate(container_cpu_usage_seconds_total[5m])) by (pod)
Network loss sum (rate (node_net_dropped_total[5m])) by (instance)
Օպտիմիզացման թուղթ
- SLO-ն և «ոսկե ճանապարհները» (API/վճարումներ/վճարումներ)։
- CPU/alloc/IO/ցանցերը հավաքված են, հայտնաբերվել են top-N նեղ տեղեր։
- NUMA/IRQ/RTS-ը տրամադրված է latency-քննադատական հանգույցների վրա։
- THP off (անհրաժեշտության դեպքում), hugepages BD/Java ծառայությունների համար։
- NVMe-ը տաք տվյալների տակ, XIV/IO-sched-ը, ֆիո-բենչը ապացուցված է։
- Ցանցային հոսք ՝ MTU, RPS/RSA, SO _ REUSEIM; թայմաուտներ/փամփուշտներ։
- Kubernetes: Requesoft-ը ճիշտ չէ, Limits-ը չի հոգում, HPA-ն բիզնես-մետրիկներում, SNA/CA-ում ներառված են։
- Քեշինգը և CDN-ը «թանկ» ճանապարհների վրա։ Redis/edge-քաշ։
- FinOps: rightsizing/պահուստներ/spot-puls; սառցադաշտերի կանգառը։
- CI արտադրողականության ավտոտեստներ, p95/p99 ռեգրեսիա։
Հատուկ iGaming/fintech համար
Պիկի ժամանակացույցով 'RPS/Latters/RPS-ում/CDN, HPA-ում։
Վճարումները և վճարումները 'առանձին «ոսկու» IP/ֆորումը, գերակայական գծերը, ռեսուրսների մեկուսացումը (tainault/toler.ru), բազայի պահուստը։
Անտիբոտ/հակաֆրոդ 'heavy-մոդելներ - GPU-vorkers; Առցանց կոքսինգը 50 ms p95; Քաֆիչի։
Կարգավորիչ, անփոփոխ լոգներն ու կոդավորումը չպետք է կոտրեն SLO-ը, միացրեք ապարատային արագացումները և ասինխրոն փամփուշտները։
Մինի պլեյբուկները
Լատենտալությունը պատրաստված է թողարկումից հետո
1. Տապալել burn-rate SLO; 2) ավելացրեք 'cpu/alloc'; 3) pratat/ficflag; 4) բարձրացնել կրկնօրինակները/API-kash; 5) RCA-ն և թեստի ամրագրումը։
Պիկ ֆուտբոլ (խաղը/մրցույթը)
1. Տաքացնել CDN/kash; 2) բարձրացնել minReplicas; 3) միացրեք burst-limits; 4) փոփոխել հերթերը. 5) միացրեք read-only ռեժիմը երկրորդական գործառույթների համար։
Տիպիկ սխալներ
Limits CPU-ն «խեղդում» է պինդ vorclods-ը բարձր p99։
Հանգույցների սխալ փամփուշտը 'խառնեք latency-քննադատական և batch-ը։
NUMA/IRQ-2019 բացակայությունը BD/brocers-ում։
«Մենք բուժում ենք ախտանիշները» (ավելացնում ենք CPU) ալգորիթմների/քեշի/SQL-ի ուղղման փոխարեն։
HPA-ն CPU-ի փոխարեն RPS/latency-ի փոխարեն ավելի ուշ կսկսի։
CI-ում արտադրողականության թեստեր չկան։
Արդյունքը
Օպտիմիզացիան համակարգային աշխատանք է 'չափեք SLI/SLO, ավելացրեք, ուղղեք ալգորիթմները, տեղադրեք երկաթ (NUMA/IRQ/IO/ցանց), «ճիշտ չափեք» ռեսուրսները և ավտոմատիզացրեք։ Ամրացրեք բարելավումները ձևանմուշներում (պատկերներ, գծապատկերներ, քաղաքական գործիչներ), վերահսկեք արժեքը և էներգիան, և ձեր պլատֆորմը կմնա արագ, տնտեսական և կայուն նույնիսկ ծայրահեղ պիկի մեջ։