New circular buffer using faa instead of cas to optimize performance
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- cpp
- Ambito
- backend, performance
Direzione di ricerca
Inizia con il buffer circolare esistente del batch span processor e la bozza PR #3644; confronta la coda MPSC wait-free basata su FAA proposta con l’implementazione CAS attuale. Riproduci i benchmark elencati e verifica la correttezza con più produttori e un consumatore. Il lavoro è concluso quando l’alternativa è corretta e i suoi vantaggi in termini di prestazioni sono supportati dai risultati dei benchmark.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the solution you'd like
I noticed that original circular buffer using by batch span processor use lock free MPSC queu based on CAS. When experiencing intense multithreading contention, Compare-And-Swap (CAS) exhibits poorer scalability compared to Fetch-And-Add (FAA). In reference of https://github.com/dbittman/waitfree-mpsc-queue, this pr attempt to implement a wait-free MPSC (Multiple Producer, Single Consumer) queue using FAA. Base on original benchmark, it indicate that this approach demonstrates better performance scalability.
Run on (48 X 2593.99 MHz CPU s)
CPU Caches:
L1 Data 32 KiB (x24)
L1 Instruction 32 KiB (x24)
L2 Unified 256 KiB (x24)
L3 Unified 30720 KiB (x2)
Load Average: 7.85, 5.70, 4.48
----------------------------------------------------------------
Benchmark Time CPU Iterations
----------------------------------------------------------------
BM_BaselineBuffer/1 10178537 ns 51528 ns 1000
BM_BaselineBuffer/2 7408646 ns 69828 ns 1000
BM_BaselineBuffer/4 7684772 ns 127549 ns 1000
BM_BaselineBuffer/8 7222459 ns 278660 ns 1000
BM_BaselineBuffer/16 6716972 ns 603712 ns 1215
BM_LockFreeBuffer/1 3915343 ns 53125 ns 1000
BM_LockFreeBuffer/2 4798406 ns 70581 ns 1000
BM_LockFreeBuffer/4 4562709 ns 128493 ns 1000
BM_LockFreeBuffer/8 4935221 ns 289996 ns 1000
BM_LockFreeBuffer/16 5187913 ns 618856 ns 1081
BM_OptimizedBuffer/1 4256507 ns 49970 ns 1000
BM_OptimizedBuffer/2 3398719 ns 67712 ns 1000
BM_OptimizedBuffer/4 3204749 ns 127378 ns 1000
BM_OptimizedBuffer/8 3230722 ns 296507 ns 1000
BM_OptimizedBuffer/16 3859005 ns 769220 ns 1000
More detail see draft pr: https://github.com/open-telemetry/opentelemetry-cpp/pull/3644
Describe alternatives you've considered
Which alternative solutions or features have you considered?
Additional context
Add any other context about the feature request here.
Tip: React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.
- Lingua principale
- C++
- Stelle
- 1.4k
- Fork
- 652
- Merge medio
- 1g 14h
- PR unite (30g)
- 64
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di open-telemetry/opentelemetry-cpp
-
needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
open-telemetry/opentelemetry-cpp#4697 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
TracerContext construction might result in a terminateForse già presa @akshat-lakhera l’ha presa 5 giorni fa. Apertaneeds-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
open-telemetry/opentelemetry-cpp#4684 · 2 commenti · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
[CI] Add Ubuntu 26.04 runners to the CI workflowForse già presa @deodattap l’ha presa 18 giorni fa. Apertatriage/accepted
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
open-telemetry/opentelemetry-cpp#4596 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
[BUG] Resource::Create() throws bad_variant_access if process.executable.name isn't a stringForse già presa @ryux1 l’ha presa 39 giorni fa. Apertabug help wanted triage/accepted
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
open-telemetry/opentelemetry-cpp#4535 · 1 commento · 2 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
[BUG] OnResponse() can call std::terminate() when the response body fails to parse as JSON/protobufForse già presa @YuEfSaEDU l’ha presa 30 giorni fa. Apertabug help wanted triage/accepted
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
open-telemetry/opentelemetry-cpp#4534 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di open-telemetry/opentelemetry-cpp
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement question
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
DarkStarSystems/pcons#224 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
LizardByte/Sunshine#5953 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
(S1 - Need confirmation)
Difficoltà 2/5 1-3 ore Idoneità per principianti 63/100
CleverRaven/Cataclysm-DDA#89133 ·
I maintainer di solito rispondono entro 1 giorno