nodejs / nodejs/node

Performance degradation of Buffer allocation in NodeJS v24

Aperta
#61,967 16 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

buffer performance
Lingua principale
JavaScript
Stelle
122k
Fork
37.3k
Merge medio
4g 2h
PR unite (30g)
283

Descrizione

Version

v24.13.0

Platform
Linux ubuntu24 6.14.0-37-generic #37~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 20 10:25:38 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
Subsystem

No response

What steps will reproduce the bug?
console.log(process.version);
let table = [], count = 1e6;
for (let chunk_size of [10, 20, 50, 100, 200].map(v=>v*1024))
{
    let ts = Date.now();
    for (let i = 0; i<count; i++)
        Buffer.allocUnsafe(chunk_size);
    let te = Date.now();
    table.push({chunk_size, ms: te-ts});
}
console.table(table, ['chunk_size', 'ms']);
How often does it reproduce? Is there a required condition?

Every time

What is the expected behavior? Why is that the expected behavior?

Buffer allocation in NodeJS v24 should be same or better than in v20.

What do you see instead?

Degradation depended on chunk size:

v20.12.1
┌─────────┬────────────┬──────┐
│ (index) │ chunk_size │ ms   │
├─────────┼────────────┼──────┤
│ 0       │ 10240      │ 1044 │
│ 1       │ 20480      │ 1110 │
│ 2       │ 51200      │ 1230 │
│ 3       │ 102400     │ 1339 │
│ 4       │ 204800     │ 1969 │
└─────────┴────────────┴──────┘


v24.13.0
┌─────────┬────────────┬──────┐
│ (index) │ chunk_size │ ms   │
├─────────┼────────────┼──────┤
│ 0       │ 10240      │ 996  │
│ 1       │ 20480      │ 1223 │
│ 2       │ 51200      │ 1387 │
│ 3       │ 102400     │ 2077 │
│ 4       │ 204800     │ 3349 │
└─────────┴────────────┴──────┘
Additional information

No response

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.

Direzione di ricerca

Inizia eseguendo il benchmark fornito di Buffer.allocUnsafe su Node.js v20.12.1 e v24.13.0 nell’ambiente Linux indicato, quindi esamina il percorso di allocazione di Buffer alla ricerca di modifiche che influiscano sui chunk più grandi. Il lavoro è completato quando la regressione è spiegata e un benchmark o test riproducibile dimostra il comportamento rilevante e qualsiasi correzione.

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

Valutazione

Stack tecnologico
javascript, node.js
Ambito
backend, performance
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.