Faster Python 3.14: faster compression and fixing 28-year-old bugs

Bài tóm tắt Man Group 2026 4. Điều chỉnh Độ khó: Trung bình

Man Group · 2026 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc

Phần tiếp của Man Group 2025.

Bối cảnh

  • Sau khi tối ưu pip, đội Python Platform của Man Group nhìn xuống interpreter: code I/O, buffer, thư viện nén. pip bị giới hạn chỉ dùng thư viện chuẩn đi kèm interpreter, nên muốn pip nhanh ngang uv thì phải làm Python nhanh hơn.
  • Vấn đề cốt lõi: code nén của Python dựa trên zlib, thư viện được dùng nhiều nhất thế giới nhưng nhiều thập kỷ gần như do một người duy trì; deflate kinh điển chỉ vài MB/s tới dưới 100 MB/s ngay ở level 1, chậm hơn cả SSD và mạng DC.

Thay đổi chính

  • Python 3.14 chuyển sang zlib-ng (một fork thay thế trực tiếp zlib; Fedora 40 đã chuyển trước), bắt đầu từ bản Windows cuối 2025 (Linux tuỳ nhà phân phối build lại). Benchmark nội bộ trên mã nguồn NumPy 73 MB: giải nén nhanh khoảng 2 lần mọi level (level 6: 326 so với 173 MB/s); nén nhanh khoảng 3 lần ở cùng kích thước đầu ra, tới khoảng 5 lần ở level 1; CRC nhanh 10–100 lần nhờ lệnh CRC phần cứng (có từ Nehalem 2008, SSE 4.2).
  • Bug 28 năm: module gzip và tarfile nén mặc định ở level 9 (từ commit đầu tiên thêm nén vào Python, tháng 4/1997), chậm hơn nhiều mà gần như không nhỏ hơn; các level 3–9 chỉ chênh tỉ lệ 0,27–0,29. Bản vá về level mặc định hợp lý sẽ có trong Python 3.15 (cuối 2026). Tác giả gặp nó từ 2016 khi tornado/jupyter phục vụ HTTP khoảng 1 MB/s với latency spike.
  • Khi profile pip, 5–10% thời gian pip install là tính CRC. liblzma đã dùng lệnh CRC tối ưu còn zlib thì không; PR cho Python dùng bản nhanh hơn.

Vì sao

  • Theo Man Group, Spark của họ hưởng lợi lớn: Spark tuần tự hoá hàng GB giữa các node với lựa chọn chỉ là deflate hoặc không nén; zlib level 1 thì CPU chờ hàng phút, không nén thì mạng gánh gấp ba dữ liệu.

Bài học cho SWE

  • Phần mềm "ổn định" có thể chỉ là không ai bảo trì; đánh giá lại ràng buộc khi phần cứng đã đổi (lệnh CRC có 15 năm mà phần mềm chưa dùng).
  • Mặc định tệ trong thư viện lõi lan ra mọi nơi gọi mà không truyền tham số.
  • Muốn công cụ nhanh lên mà bị ràng buộc vào thư viện chuẩn thì phải sửa ở thượng nguồn.

Liên quan