Facebook xuất bản Hermit, một bộ công cụ để thực hiện chương trình lặp lại

Facebook (bị cấm ở Liên bang Nga) đã xuất bản mã cho bộ công cụ Hermit, tạo ra môi trường để thực thi các chương trình một cách xác định, cho phép các lần chạy khác nhau đạt được cùng một kết quả và lặp lại việc thực thi bằng cách sử dụng cùng một dữ liệu đầu vào. Mã dự án được viết bằng Rust và được phân phối theo giấy phép BSD.

Trong quá trình thực thi thông thường, kết quả bị ảnh hưởng bởi nhiều yếu tố không liên quan, chẳng hạn như thời gian hiện tại, lập lịch luồng, địa chỉ bộ nhớ ảo, dữ liệu từ trình tạo số giả ngẫu nhiên và các mã định danh duy nhất khác nhau. Hermit cho phép bạn chạy một chương trình trong một vùng chứa trong đó các yếu tố này không đổi trong các lần chạy tiếp theo. Thực thi lặp lại, tái tạo đầy đủ các tham số không liên tục của môi trường, có thể được sử dụng để chẩn đoán lỗi, gỡ lỗi nhiều bước với các lần chạy lặp lại, tạo môi trường cố định để kiểm tra hồi quy, kiểm tra sức chịu đựng, xác định sự cố với đa luồng và trong các hệ thống xây dựng có thể lặp lại .

Facebook xuất bản Hermit, một bộ công cụ để thực hiện chương trình lặp lại

Một môi trường có thể tái tạo được tạo bằng cách chặn các lệnh gọi hệ thống, một số lệnh gọi được thay thế bằng trình xử lý riêng tạo ra kết quả cố định và một số được chuyển hướng đến hạt nhân, sau đó kết quả sẽ bị xóa khỏi dữ liệu không liên tục. Để chặn các cuộc gọi hệ thống, khung Reverie được sử dụng, mã của khung này cũng được Facebook xuất bản. Để ngăn các thay đổi trong hệ thống tệp và yêu cầu mạng ảnh hưởng đến tiến trình thực thi, việc thực thi được thực hiện bằng cách sử dụng hình ảnh FS cố định và vô hiệu hóa quyền truy cập vào mạng bên ngoài. Khi truy cập vào trình tạo số giả ngẫu nhiên, Hermit tạo ra một chuỗi được xác định trước và lặp lại mỗi khi nó được khởi chạy.

Một trong những ảnh hưởng biến phức tạp nhất đến tiến trình thực thi là bộ lập lịch luồng, hoạt động của nó phụ thuộc vào nhiều yếu tố bên ngoài, chẳng hạn như số lõi CPU và sự hiện diện của các luồng thực thi khác. Để đảm bảo hoạt động lặp lại của bộ lập lịch, tất cả các luồng được thực thi tuần tự trong kết nối chỉ với một lõi CPU và duy trì thứ tự mà điều khiển được chuyển đến các luồng. Mỗi luồng được phép thực thi một số lệnh cố định, sau đó việc thực thi sẽ dừng lại và được chuyển sang một luồng khác (để giới hạn CPU PMU (Đơn vị giám sát hiệu suất), dừng thực thi sau một số nhánh có điều kiện được chỉ định).

Để chẩn đoán sự cố với các luồng do điều kiện xung đột, Hermit có một chế độ để xác định các hoạt động có thứ tự thực hiện không đúng thứ tự và dẫn đến tắt máy bất thường. Để xác định những vấn đề như vậy, một sự so sánh được thực hiện giữa các trạng thái trong đó ghi lại hoạt động đúng và chấm dứt thực thi bất thường.

Nguồn: opennet.ru

Thêm một lời nhận xét