[Enhancement] Arrow Stream Load decompresses record batches on Arrow's global thread pool
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- Mezza giornata
- Idoneità per principianti
- 70/100
Direzione di ricerca
Inizia da be/src/format/arrow/arrow_stream_reader.cpp, dove il corpo di Stream Load viene letto con arrow::ipc::IpcReadOptions::Defaults(), e verifica come viene impostato use_threads in quel punto. Lo stesso schema compare in arrow_flight_batch_reader.cpp. Il lavoro è completo quando il percorso di lettura di Stream Load decomprime sul thread dello scanner, eventualmente dietro una configurazione BE, i test esistenti di caricamento Arrow continuano a passare e la variazione di throughput è confermata da un benchmark.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Search before asking
- I had searched in the issues and found no similar issues.
Description
ArrowStreamReader reads Stream Load bodies with arrow::ipc::IpcReadOptions::Defaults() (be/src/format/arrow/arrow_stream_reader.cpp, master too), and that leaves use_threads = true. For compressed IPC streams (ZSTD/LZ4 record batches), Arrow then decompresses every record batch's buffers on Arrow's single process-wide CPU thread pool, not on the scanner thread doing the read.
Under many concurrent Arrow loads, scanner threads mostly wait on that one pool's mutex and condition variable. Off-CPU stacks show around 75 scanner threads per BE parked in pthread_cond_signal / arrow::internal::ThreadPool::SpawnReal, while the BE stays well below CPU saturation.
Measurements
4 BEs (192 vCPU each, arm64), cloud mode, many concurrent Stream Loads, ZSTD-compressed Arrow record batches:
- default
IpcReadOptions(global pool): plateau of about 5.7M rows/s total, BEs at about 64% CPU; - the same data sent uncompressed: about 7.1M rows/s;
- ZSTD, with decompression inline on the scanner thread (
use_threads = false): 8.15–8.45M rows/s.
Solution
Read Stream Load bodies with use_threads = false (optionally behind a BE config), so decompression runs on the scanner thread that already owns the load. Load concurrency comes from the scanner pool, so Arrow's internal pool adds only contention. arrow_flight_batch_reader.cpp uses the same pattern and may benefit too.
Are you willing to submit PR?
- Yes I am willing to submit a PR!
Code of Conduct
- I agree to follow this project's Code of Conduct
- Lingua principale
- Java
- Stelle
- 16k
- Fork
- 4k
- Merge medio
- 2g 16h
- PR unite (30g)
- 643
Preparare l'ambiente
- 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 apache/doris
-
4.1.4.1 Release NoteApertarelease notes
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug] FE metric http_copy_into_query_err_total is registered under the upload error nameForse già presa @manesioz l’ha presa 17 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
apache/doris#68505 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
[Pipeline issue] build pipeline does not support to trigger check_coverage_fe by commentForse già presa @Asthenia0412 l’ha presa 27 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
apache/doris#67785 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug][dbt-doris] Large SQL statements are silently corrupted by mysql-connector-python's C extension — force use_pure=TrueForse già presa @bringyou l’ha presa 36 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
apache/doris#67546 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/doris
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
lugassawan/swe-workbench#799 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
Vakore/ZappierGames#89 ·
-
1.20.1-FORGE Module-Enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
MehVahdJukaar/WoodGood#1340 · 1 commento ·
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
PssbleTrngle/dye_depot#123 ·
-
bug question
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100