os.cpus().length performance on modern AMD CPUs inside containers
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- JavaScript
- Star
- 122k
- Fork
- 37.3k
- Merge trung bình
- 4 ngày 2 giờ
- Pull request đã merge (30 ngày)
- 283
Mô tả
Version
v24.14.0
Platform
- Bare metal machine
- Host: Linux Ubuntu 24
- Container Image: `node:alpine-24`
- CPU: `AMD EPYC 4584PX 16-Core Processor`
Subsystem
os
What steps will reproduce the bug?
Firstly, I'm not entirely sure if this is a bug, so apologies if this is known or in the wrong spot - it just feels like something that shouldn't be this slow vs other platforms. I couldn't find any other real references to this other than a discussion at https://github.com/nodejs/performance/issues/93 which mentions this being slow.
With a modern AMD CPU such as the one listed above, run the following with Docker:
docker run --rm node:24-alpine node -e "console.time('cpus'); os.cpus().length; console.timeEnd('cpus')"
I've also attached an strace output for reference. It seems to iterate over /sys/devices/system/cpu/cpuN/cpufreq/scaling_cur_freq, some of which can take 20ms to return.
How often does it reproduce? Is there a required condition?
This requires a modern AMD CPU, with Linux, and run within a container. Otherwise it seems to happen almost 100% of the time in our testing.
What is the expected behavior? Why is that the expected behavior?
I would expect it to return much more quickly as it does on Intel systems.
What do you see instead?
cpus: 649.982ms
regularly >500ms runtime on a machine with 32 cores.
Additional information
No response
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách tái hiện lệnh Docker trong issue trên thiết lập AMD/Linux được nêu và xem xét strace.log đính kèm. Theo dõi đường đi của os.cpus() đọc scaling_cur_freq, sau đó so sánh hành vi với các hệ thống Intel; hoàn thành có nghĩa là lời gọi được đo nhanh hơn đáng kể mà không thay đổi kết quả của nó.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- docker, javascript, linux, node.js
- Lĩnh vực
- operating-systems, performance
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100