Facebook menerbitkan Hermit, sebuah perangkat untuk eksekusi program berulang

Facebook (dilarang di Federasi Rusia) menerbitkan kode untuk toolkit Hermit, yang menciptakan lingkungan untuk eksekusi program yang deterministik, memungkinkan proses yang berbeda untuk mencapai hasil yang sama dan mengulangi eksekusi menggunakan data input yang sama. Kode proyek ditulis dalam Rust dan didistribusikan di bawah lisensi BSD.

Selama eksekusi normal, hasilnya dipengaruhi oleh berbagai faktor asing, seperti waktu saat ini, penjadwalan thread, alamat memori virtual, data dari generator nomor pseudorandom, dan berbagai pengidentifikasi unik. Hermit memungkinkan Anda menjalankan program dalam sebuah wadah di mana faktor-faktor ini tetap konstan selama proses berikutnya. Eksekusi berulang, yang sepenuhnya mereproduksi parameter lingkungan non-persisten, dapat digunakan untuk diagnosis kesalahan, debugging multi-langkah dengan proses berulang, menciptakan lingkungan tetap untuk pengujian regresi, pengujian stres, mengidentifikasi masalah dengan multithreading dan dalam sistem build yang dapat diulang .

Facebook menerbitkan Hermit, sebuah perangkat untuk eksekusi program berulang

Lingkungan yang dapat direproduksi diciptakan dengan mencegat panggilan sistem, beberapa di antaranya diganti dengan penangannya sendiri yang memberikan hasil permanen, dan beberapa dialihkan ke kernel, setelah itu hasilnya dibersihkan dari data non-persisten. Untuk mencegat panggilan sistem, kerangka lamunan digunakan, yang kodenya juga diterbitkan oleh Facebook. Untuk mencegah perubahan dalam sistem file dan permintaan jaringan mempengaruhi kemajuan eksekusi, eksekusi dilakukan menggunakan gambar FS tetap dan dengan akses ke jaringan eksternal dinonaktifkan. Saat mengakses generator nomor pseudo-acak, Hermit menghasilkan urutan yang telah ditentukan sebelumnya yang diulang setiap kali diluncurkan.

Salah satu variabel paling kompleks yang mempengaruhi kemajuan eksekusi adalah penjadwal thread, yang perilakunya bergantung pada banyak faktor eksternal, seperti jumlah inti CPU dan keberadaan thread pelaksana lainnya. Untuk memastikan perilaku penjadwal yang berulang, semua thread dieksekusi secara serial sehubungan dengan hanya satu inti CPU dan mempertahankan urutan di mana kontrol ditransfer ke thread. Setiap thread diperbolehkan untuk mengeksekusi sejumlah instruksi tetap, setelah itu eksekusi dihentikan dan ditransfer ke thread lain (untuk membatasi CPU PMU (Performance Monitoring Unit), yang menghentikan eksekusi setelah sejumlah cabang kondisional tertentu).

Untuk mendiagnosis masalah pada thread karena kondisi balapan, Hermit memiliki mode untuk mengidentifikasi operasi yang perintah eksekusinya dilanggar dan menyebabkan penghentian yang tidak normal. Untuk mengidentifikasi masalah seperti itu, perbandingan dibuat dari keadaan di mana operasi yang benar dan penghentian eksekusi yang tidak normal dicatat.

Sumber: opennet.ru

Tambah komentar