Facebook phát hành mã nguồn Cinder được Instagram sử dụng

Facebook tiết lộ gần đây qua một bài đăng, phát hành mã nguồn của dự án Cinder, đó là ngã ba của chi nhánh CPython và triển khai tham chiếu chính của ngôn ngữ lập trình Python.

Chất kết dính được sử dụng trong cơ sở hạ tầng sản xuất của Facebook để cung cấp năng lượng cho Instagram và bao gồm các tối ưu hóa để cải thiện hiệu suất. Mã đã được xuất bản để thảo luận về khả năng di chuyển các tối ưu hóa đã tạo sẵn sang xu hướng chính của CPython và hỗ trợ các dự án cải thiện hiệu suất CPython khác.

Facebook đề cập rằng họ sẽ không hỗ trợ Cinder như một dự án mã nguồn mở riêng biệt và mã được trình bày dưới dạng mã được sử dụng trong cơ sở hạ tầng của công ty mà không cần tài liệu bổ sung.

Cinder cũng không tự quảng cáo như một sự thay thế cho CPython - mục tiêu phát triển chính là cải thiện chính CPython.

Mã của Cinder được coi là hợp lý đáng tin cậy và được thử nghiệm trong môi trường sản xuất, nhưng nếu các vấn đề được xác định, chúng sẽ cần được tự giải quyết vì Facebook không đảm bảo rằng nó sẽ phản hồi các thông báo lỗi bên ngoài và kéo các yêu cầu.

Đồng thời, Facebook không loại trừ hợp tác mang tính xây dựng với cộng đồng và sẵn sàng thảo luận các ý tưởng về cách làm cho Cinder nhanh hơn nữa hoặc cách tăng tốc độ chuyển các thay đổi đã chuẩn bị sang khuôn khổ chính của CPython.

Các tối ưu hóa chính được thực hiện trong Cinder là:

  • Bộ nhớ đệm trực tuyến Bytecode: Bản chất của phương pháp là xác định các tình huống thực thi opcode điển hình có thể được tối ưu hóa động và thay thế opcode đó bằng các tùy chọn chuyên biệt nhanh hơn.
  • Đánh giá định kỳ: Đối với các lệnh gọi hàm không đồng bộ được xử lý ngay lập tức, kết quả của các hàm đó được ghi đè trực tiếp mà không cần tạo chương trình đăng quang và không gọi vòng lặp sự kiện. Trong đoạn mã được Facebook sử dụng nhiều, việc tối ưu hóa dẫn đến tăng tốc khoảng 5%.
  • Biên dịch JIT có chọn lọc ở cấp độ các phương pháp và chức năng riêng lẻ: nó được kích hoạt bởi tùy chọn "-X jit" hoặc biến môi trường PYTHONJIT = 1 và cho phép nhiều bài kiểm tra hiệu suất được tăng tốc từ 1,5 đến 4 lần.
    Danh sách các chức năng mà JIT nên được kích hoạt có thể được xác định dựa trên kết quả của hồ sơ. Trong tương lai, dự kiến ​​sẽ hỗ trợ biên dịch JIT động dựa trên phân tích nội bộ về tần suất gọi chức năng, nhưng xem xét các chi tiết cụ thể của các quy trình khởi chạy trên Instagram, biên dịch JIT cũng phù hợp với Facebook trong giai đoạn đầu.
    JIT lần đầu tiên chuyển đổi mã bytecode của Python thành một biểu diễn trung gian cấp cao (HIR), tương đối gần với mã bytecode của Python, nhưng được thiết kế để sử dụng máy ảo dựa trên bản ghi chứ không phải là máy ảo dựa trên bản ghi trong ngăn xếp, và cả sử dụng thông tin loại và các chi tiết bổ sung có liên quan đến hiệu suất. Sau đó, HIR được chuyển đổi sang dạng Phân bổ đơn tĩnh (SSA) và trải qua các giai đoạn tối ưu hóa dựa trên số lượng tham chiếu và dữ liệu sử dụng bộ nhớ. Kết quả là, một biểu diễn trung gian cấp thấp (LIR) được tạo ra, gần với hợp ngữ.
  • Chế độ nghiêm ngặt cho các mô-đun:Chức năng này có ba thành phần: Loại Quy tắc nghiêm ngặt. Máy phân tích tĩnh có khả năng xác định rằng việc thực thi một mô-đun không ảnh hưởng đến mã bên ngoài mô-đun đó.
  • Python tĩnh: là một trình biên dịch bytecode thử nghiệm sử dụng chú thích kiểu để tạo bytecode cụ thể cho từng loại và chạy nhanh hơn thông qua biên dịch JIT. Trong một số thử nghiệm, sự kết hợp của Static Python và JIT cho thấy sự cải thiện hiệu suất lên đến 7 lần so với CPython thông thường. Trong nhiều tình huống, kết quả được đánh giá như thể trình biên dịch MyPyC và Cython đã được sử dụng.

Cuối cùng nếu bạn quan tâm đến việc có thể lấy mã Cinder hoặc tìm hiểu thêm về nó, bạn có thể tham khảo chi tiết trong liên kết sau.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.