[Feature] Improve scan performance in hot read paths

Aperta
#240 1 commento 0 reazioni 1 assegnatario Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Da chiarire
Stato di attività
Attiva
Stack tecnologico
cpp
Ambito
performance

Direzione di ricerca

Inizia profilando le chiamate a StructArray::fields() del manifest reader e le chiamate a ArrayBuilder::type() dell’Avro decoder nei percorsi di scansione concorrenti. Individua la durata di vita appropriata del batch, reader o builder per i metadati Arrow immutabili, quindi verifica che le cache vengano invalidate quando il corrispondente albero di oggetti Arrow viene sostituito. Il lavoro è completato quando vengono ridotti l’overhead di sincronizzazione degli shared pointer e quello del conteggio dei riferimenti durante le scansioni concorrenti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement
Search before asking
  • I searched in the issues and found nothing similar.
Motivation

Recent profiling of highly concurrent scans has revealed several performance bottlenecks caused by
repeated operations on Arrow-returned shared_ptr objects in hot read loops.

Two significant cases have been identified:

  1. Manifest readers repeatedly call StructArray::fields() while processing individual rows. This
    copies shared_ptr<Array> objects and, with GCC 8.3's libstdc++, can introduce substantial lock
    contention through _Sp_locker, pthread_mutex_lock, and futex waits when multiple workers read
    manifests concurrently.

  2. Avro decoding calls ArrayBuilder::type() for every integer and timestamp value. Because this
    method returns std::shared_ptr<DataType> by value, concurrent scans repeatedly modify reference
    counts on shared Arrow primitive data types, causing cache-line contention. Profiling showed
    ArrayBuilder::type() and shared-pointer release operations accounting for a large proportion of
    samples after the manifest bottleneck was removed.

This issue tracks the broader effort to identify and eliminate similar shared-pointer operations
from scan hot paths. The goal is to cache immutable Arrow metadata at an appropriate batch, reader,
or builder lifetime, while ensuring caches are invalidated whenever the corresponding Arrow object
tree is replaced.

The expected outcome is lower synchronization and reference-counting overhead under concurrent
scans, allowing CPU time to return to actual decoding, memory copying, and buffer management.

Solution

No response

Anything else?

No response

Are you willing to submit a PR?
  • I'm willing to submit a PR!
Lingua principale
C++
Stelle
65
Fork
29
Merge medio
2g 30m
PR unite (30g)
77

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di apache/paimon-cpp

Tutte le issue di apache/paimon-cpp

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.