nodejs / nodejs/node

Performance degradation of Buffer allocation in NodeJS v24

Ouverte
#61,967 16 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

buffer performance
Langage dominant
JavaScript
Étoiles
122k
Forks
37.3k
Merge moyen
4 j 2 h
PR mergées (30 j)
283

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter le benchmark fourni de Buffer.allocUnsafe avec Node.js v20.12.1 et v24.13.0 dans l’environnement Linux indiqué, puis inspectez le chemin d’allocation de Buffer à la recherche de changements affectant les chunks plus volumineux. C’est terminé lorsque la régression est expliquée et qu’un benchmark ou test reproductible démontre le comportement pertinent ainsi que toute correction éventuelle.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript, node.js
Domaine
backend, performance
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Active
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.