- Trình biên dịch JIT của CPython đạt hiệu năng nhanh hơn 11~12% trên macOS AArch64 và 5~6% trên x86_64 Linux, hoàn thành mục tiêu sớm hơn dự kiến
- Ở các phiên bản 3.13~3.14, JIT chậm hơn trình thông dịch, nhưng nhờ phát triển lấy cộng đồng làm trung tâm và cải tiến kiến trúc, hiệu năng đã được cải thiện đáng kể
- Các thử nghiệm như ghi vết thực thi (trace recording) và loại bỏ đếm tham chiếu (reference count elimination) là những bước ngoặt quan trọng
- Các nhân tố đóng góp chủ chốt như Savannah Ostrowski, Mark Shannon, Diego Russo, Brandt Bucher cùng nhiều người tham gia mới đã hợp tác thực hiện
- Thành quả lần này cho thấy mô hình phát triển do cộng đồng dẫn dắt và văn hóa cộng tác có thể tạo ra hiệu quả thực chất trong việc cải thiện hiệu năng mã nguồn mở
Tình hình cải thiện hiệu năng của CPython JIT
- Ghi nhận hiệu năng nhanh hơn 11~12% trên macOS AArch64 và 5~6% trên x86_64 Linux
- Các con số được đo theo trung bình nhân, và ở một số benchmark, mức dao động từ chậm hơn 20% đến nhanh hơn trên 100%
- Hỗ trợ free-threading vẫn chưa hoàn tất, mục tiêu là ở các phiên bản 3.15/3.16
- JIT ở các phiên bản 3.13~3.14 từng chậm hơn trình thông dịch, nhưng ở phiên bản lần này đã đạt được mức tăng tốc có ý nghĩa
Phát triển JIT lấy cộng đồng làm trung tâm
- Sau khi nguồn tài trợ chính cho nhóm Faster CPython bị dừng vào năm 2025, dự án chuyển sang mô hình phát triển do cộng đồng dẫn dắt
- Mục tiêu: cải thiện 5% ở 3.15, cải thiện 10% ở 3.16 và hỗ trợ free-threading
- Để giảm bus factor, mỗi giai đoạn (frontend, middle-end, backend) đều bảo đảm có từ 2 maintainer trở lên
- Chia nhỏ các vấn đề phức tạp để khuyến khích người đóng góp mới tham gia
- Brandt Bucher dùng ‘mega-issues’ để tách công việc thành các đơn vị nhỏ hơn
- 11 người đóng góp đã chuyển đổi các lệnh của trình thông dịch theo hướng thân thiện hơn với tối ưu hóa JIT
- Văn hóa khuyến khích đóng góp và chia sẻ thành quả giúp duy trì sự tham gia
- Kết quả là hiệu năng trên x86_64 Linux đã tăng từ 1% lên 3~4%
Những bước ngoặt kỹ thuật chính
Ghi vết thực thi (trace recording)
- Tại core sprint của CPython, dự án chuyển sang frontend dựa trên tracing
- Ban đầu chậm hơn 6%, nhưng hiệu năng được cải thiện sau khi đưa vào cấu trúc dual dispatch
- Vẫn duy trì tốc độ của trình thông dịch cơ bản trong khi hạn chế tối đa việc tăng kích thước trình thông dịch
- Việc đưa trace recording vào đã giúp độ bao phủ mã JIT tăng 50%, từ đó nâng cao hiệu quả tối ưu hóa về sau
Loại bỏ đếm tham chiếu (reference count elimination)
- Ý tưởng bắt nguồn từ công việc tối ưu bytecode của Matt Page
- Hiệu năng được cải thiện nhờ loại bỏ các nhánh (branch) phát sinh khi giảm đếm tham chiếu
- Chỉ riêng việc loại bỏ một nhánh cũng cho thấy hiệu quả giảm chi phí tích lũy
- Dễ song song hóa, đồng thời được dùng như bài tập học cấu trúc JIT để đào tạo người đóng góp mới
Hạ tầng và tổ chức nhóm
- Savannah Ostrowski vận hành hạ tầng đo hiệu năng JIT với 4 máy
- Kết quả chạy JIT hằng ngày giúp phát hiện sớm hồi quy hiệu năng (regression)
- Diego Russo phụ trách cải thiện JIT cho phần cứng ARM và khả năng tương thích với profiler
- Brandt Bucher xây dựng nền tảng backend mã máy, giúp hạ thấp rào cản tham gia cho người đóng góp mới
Hợp tác và trao đổi tri thức
- Nhờ lời khuyên liên quan đến PyPy từ CF Bolz-Tereick, mức độ hiểu biết về thiết kế JIT được nâng cao
- Giao lưu với các chuyên gia trình biên dịch như Max Bernstein giúp duy trì động lực lâu dài và sự phát triển kỹ thuật
- Kinh nghiệm phân tích mã PyPy đã góp phần nâng cao chất lượng JIT của CPython
Kết luận
- JIT của Python 3.15 là kết quả của sự kết hợp giữa hợp tác cộng đồng, thử nghiệm kỹ thuật và cải thiện hạ tầng
- Điều này chứng minh rằng con người, may mắn và văn hóa cộng tác là động lực cốt lõi cho đổi mới hiệu năng trong mã nguồn mở
Chưa có bình luận nào.