Performance degradation of Buffer allocation in NodeJS v24
Abierto
Nadie ha tomado este issue todavía.
buffer
performance
- Lenguaje dominante
- JavaScript
- Estrellas
- 122k
- Forks
- 37.4k
- Merge medio
- 4 d 3 h
- PR fusionados (30 d)
- 272
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza ejecutando el benchmark proporcionado de Buffer.allocUnsafe en Node.js v20.12.1 y v24.13.0 en el entorno Linux indicado; después, inspecciona la ruta de asignación de Buffer en busca de cambios que afecten a chunks más grandes. Se considera terminado cuando la regresión está explicada y un benchmark o prueba reproducible demuestra el comportamiento relevante y cualquier corrección.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, node.js
- Área
- backend, performance
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Activo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100