Python binding ของ OpenDAL ช้ากว่า Python เองหรือไม่?
- OpenDAL เป็น data access layer ที่ช่วยให้ดึงข้อมูลจากบริการจัดเก็บข้อมูลหลากหลายประเภทได้อย่างมีประสิทธิภาพ
- มีรายงานว่า Python binding ของ OpenDAL ช้ากว่า Python เอง
- มีการตั้งสมมติฐานว่าสาเหตุอาจมาจาก internal cache ของ Python, การเร่งความเร็วการอ่านไฟล์ และโอเวอร์เฮดเพิ่มเติมจาก PyO3
บริการ Fs ของ OpenDAL ช้ากว่า Python หรือไม่?
- นี่เป็นปัญหาที่เกี่ยวข้องกับหลายปัจจัย เช่น Rust, OpenDAL, Python และ PyO3
- พบว่าแม้แต่บริการ fs ของ OpenDAL ที่เขียนด้วย Rust ก็ยังช้ากว่า Python
Rust std fs ช้ากว่า Python หรือไม่?
- OpenDAL ใช้
std::fsในการอิมพลีเมนต์บริการ fs - ยืนยันได้ว่าอิมพลีเมนต์ที่ใช้
std::fsของ Rust ก็ช้ากว่า Python เช่นกัน
Rust std fs ช้ากว่า Python จริงเหรอ!?
- มีการตั้งข้อสงสัยกับผลลัพธ์ที่ว่า Rust std fs ช้ากว่า Python
- ได้เรียนรู้การวิเคราะห์ system call ด้วย
strace - จากการวิเคราะห์ผล
straceก็ยังหาคำตอบไม่ได้ว่าทำไม Python ถึงเร็วกว่าทั้งที่ทั้งคู่ใช้mmap
ทำไมถึงใช้ mmap ที่นี่?
mmapไม่ได้ใช้แค่เพื่อแมปไฟล์เข้ากับหน่วยความจำเท่านั้น แต่ยังใช้สำหรับการจัดสรรพื้นที่หน่วยความจำขนาดใหญ่ด้วย- เมื่อร้องขอหน่วยความจำด้วย
mallocนั้นglibcจะใช้mmapเพื่อจัดสรรหน่วยความจำ
Python มี memory allocator แบบเดียวกับ Rust หรือไม่?
- Python ใช้ memory allocator ชื่อ
pymallocที่ปรับแต่งมาสำหรับการจัดสรรขนาดเล็ก pymallocเหมาะกับอ็อบเจ็กต์ขนาดเล็ก และสำหรับการจัดสรรขนาดใหญ่จะใช้PyMem_RawMalloc()และPyMem_RawRealloc()
Rust ช้ากว่า Python เพราะ default memory allocator หรือไม่?
- มีข้อสงสัยว่า
mmapคือสาเหตุของปัญหา - พบว่าโปรแกรม Rust ที่สลับไปใช้
jemallocทำงานได้เร็วกว่า Python
หรือว่า Rust ช้ากว่า Python แค่บนคอมพิวเตอร์ของฉัน!
- การที่ Rust ทำงานช้ากว่า Python เกิดขึ้นเฉพาะบนคอมพิวเตอร์บางเครื่องเท่านั้น
- มีการให้ข้อมูลรายละเอียดเกี่ยวกับ CPU และหน่วยความจำ
- แม้จะปรับฟีเจอร์บรรเทาช่องโหว่ของ CPU, Transparent Hugepage และ CPU core affinity แล้ว ผลลัพธ์ก็ไม่เปลี่ยนแปลง
- ใช้โปรแกรม eBPF เพื่อตรวจสอบ และยืนยันว่า Rust ช้ากว่า Python แม้ในระดับ system call
C ช้ากว่า Python หรือไม่?
- พบว่าเวอร์ชันที่อิมพลีเมนต์ด้วย C ก็ช้ากว่า Python เช่นกัน
C ช้ากว่า Python หรือไม่? เมื่อไม่มี offset ที่กำหนดไว้!
- พบว่ามีความแตกต่างของ offset ในพื้นที่หน่วยความจำ และเมื่อปรับ offset แล้วก็ทำให้โปรแกรม C เร็วขึ้น
- ยืนยันได้ว่าบน CPU AMD Ryzen จะเกิดประสิทธิภาพลดลงหากไม่มี offset บางค่า
AMD Ryzen 9 5900X ช้าเมื่อไม่มี offset ที่กำหนดไว้จริงหรือ!
- ยืนยันได้ว่านี่เป็นปัญหาที่เกี่ยวข้องกับ CPU และมีนักพัฒนาเคอร์เนลเข้ามาร่วมอภิปราย
- การทำ profiling ด้วย
perfยืนยันอีกครั้งว่าหากไม่มี offset ดังกล่าวจะเกิดประสิทธิภาพลดลง
GN⁺ ความเห็น: ประเด็นสำคัญที่สุดของบทความนี้คือ Rust และ C อาจทำงานช้ากว่า Python ได้ในสภาพแวดล้อมฮาร์ดแวร์บางแบบ และสาเหตุอาจเกี่ยวข้องกับการจัดสรรหน่วยความจำและลักษณะการทำงานเฉพาะของ CPU บทความนี้แสดงให้เห็นผ่านกระบวนการสำรวจปัจจัยหลายด้านที่มีผลต่อประสิทธิภาพซอฟต์แวร์ ว่าปฏิสัมพันธ์ระหว่างฮาร์ดแวร์กับซอฟต์แวร์นั้นซับซ้อนเพียงใด และการสืบค้นเช่นนี้ก็เป็นบทเรียนสำคัญต่อการแก้ปัญหาที่ไม่คาดคิดในโลกของวิศวกรรมซอฟต์แวร์
1 ความคิดเห็น
ความเห็นจาก Hacker News
ความเห็นเกี่ยวกับสมมติฐานที่ทำให้สับสน
การถกเถียงเกี่ยวกับ CPU feature flag
ลิงก์บั๊ก glibc ที่เกี่ยวข้อง
ปฏิกิริยาเชิงบวกต่อบทความ
การชื่นชมบทความอย่างมาก
ข้อเสนอเพื่อแก้ปัญหา
ข้อมูลเกี่ยวกับ allocator พื้นฐานของ Rust
สิ่งที่นักพัฒนา Rust ควรพิจารณาเพื่อเพิ่มประสิทธิภาพ
คำอธิบายเกี่ยวกับความแตกต่างของ CPU ระหว่าง AMD และ Intel
การส่งต่อบทความให้คนที่เหมาะสม