Performance degradation of Buffer allocation in NodeJS v24
Personne n'a encore pris cette issue.
- 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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- 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