Binding Python của OpenDAL chậm hơn Python?
- OpenDAL là một lớp truy cập dữ liệu giúp truy xuất dữ liệu hiệu quả từ nhiều dịch vụ lưu trữ khác nhau.
- Có báo cáo cho rằng binding Python của OpenDAL chậm hơn chính Python.
- Đưa ra giả thuyết rằng nguyên nhân có thể là bộ đệm nội bộ của Python, tăng tốc đọc tệp, và chi phí phụ trội bổ sung của PyO3.
Dịch vụ Fs của OpenDAL chậm hơn Python?
- Đây là vấn đề liên quan đến nhiều yếu tố như Rust, OpenDAL, Python, PyO3.
- Tác giả phát hiện ngay cả dịch vụ fs của OpenDAL được triển khai bằng Rust cũng chậm hơn Python.
std::fs của Rust chậm hơn Python?
- OpenDAL triển khai dịch vụ fs thông qua
std::fs. - Xác nhận rằng cả triển khai dùng
std::fscủa Rust cũng chậm hơn Python.
std::fs của Rust chậm hơn Python? Thật sao!?
- Tác giả đặt nghi vấn về kết quả cho thấy
std::fscủa Rust chậm hơn Python. - Học cách phân tích system call bằng
strace. - Qua việc phân tích kết quả
strace, tác giả vẫn không tìm ra lý do Python nhanh hơn dù cả hai đều đang dùngmmap.
Tại sao ở đây lại dùng mmap?
mmapkhông chỉ được dùng để ánh xạ tệp vào bộ nhớ mà còn được dùng để cấp phát các vùng bộ nhớ lớn.- Khi yêu cầu bộ nhớ bằng
malloc,glibcsẽ dùngmmapđể cấp phát bộ nhớ.
Python có cùng bộ cấp phát bộ nhớ với Rust không?
- Python dùng bộ cấp phát bộ nhớ tên là
pymalloc, được tối ưu cho các cấp phát nhỏ. pymallocđược tối ưu cho các đối tượng nhỏ, còn với các cấp phát lớn thì dùngPyMem_RawMalloc()vàPyMem_RawRealloc().
Rust có chậm hơn Python với bộ cấp phát bộ nhớ mặc định không?
- Tác giả nghi ngờ
mmaplà nguyên nhân gây ra vấn đề. - Phát hiện rằng chương trình Rust sau khi chuyển sang
jemallocthì chạy nhanh hơn Python.
Chỉ trên máy tôi thì Rust mới chậm hơn Python sao!
- Việc Rust chạy chậm hơn Python chỉ xảy ra trên một máy tính cụ thể.
- Tác giả cung cấp thông tin chi tiết về CPU và bộ nhớ.
- Việc điều chỉnh các tính năng giảm thiểu lỗ hổng CPU, Transparent Hugepage và affinity lõi CPU cũng không làm thay đổi kết quả.
- Dùng chương trình eBPF để xác nhận rằng ở mức system call, Rust vẫn chậm hơn Python.
C chậm hơn Python?
- Tác giả phát hiện cả phiên bản triển khai bằng C cũng chậm hơn Python.
C chậm hơn Python? Khi không có offset được chỉ định!
- Tác giả phát hiện có sự khác biệt về offset của vùng nhớ và cải thiện tốc độ chương trình C bằng cách điều chỉnh offset.
- Xác nhận rằng trên CPU AMD Ryzen, nếu không có offset cụ thể thì hiệu năng sẽ bị suy giảm.
AMD Ryzen 9 5900X chậm nếu không có offset được chỉ định!
- Xác nhận đây là vấn đề liên quan đến CPU, và một lập trình viên kernel đã tham gia thảo luận.
- Qua profiling bằng
perf, tác giả một lần nữa xác nhận rằng nếu không có offset thì sẽ xảy ra suy giảm hiệu năng.
Ý kiến của GN⁺: Điểm quan trọng nhất của bài viết này là Rust và C có thể chạy chậm hơn Python trong một số môi trường phần cứng cụ thể, và điều này có thể bắt nguồn từ cách cấp phát bộ nhớ cũng như cơ chế hoạt động riêng của CPU. Bài viết cho thấy mức độ phức tạp của tương tác giữa phần cứng và phần mềm thông qua quá trình truy tìm nhiều yếu tố ảnh hưởng đến hiệu năng phần mềm. Kiểu điều tra này mang lại bài học quan trọng trong việc giải quyết những vấn đề bất ngờ có thể phát sinh trong thế giới kỹ thuật phần mềm.
1 bình luận
Ý kiến trên Hacker News
Ý kiến về tiền đề gây nhầm lẫn
Thảo luận về cờ tính năng CPU
Liên kết đến bug glibc liên quan
Phản hồi tích cực về bài viết
Đánh giá rất cao bài viết
Đề xuất để giải quyết vấn đề
Thông tin về allocator mặc định của Rust
Điều các nhà phát triển Rust nên cân nhắc để cải thiện hiệu năng
Giải thích về khác biệt CPU giữa AMD và Intel
Việc đã chuyển bài viết cho đúng người