Facebook dilancarkan baru-baru ini melalui penerbitan, pelancaran Hermit, yang membentuk a persekitaran untuk pelaksanaan program deterministik, yang memungkinkan untuk mencapai hasil yang sama dan mengulangi proses pelaksanaan pada pelancaran yang berbeza menggunakan data input yang sama.
Semasa pelaksanaan biasa, pelbagai faktor luar mempengaruhi output, seperti masa semasa, fungsi penjadualan benang, alamat memori maya, data daripada penjana nombor pseudorandom dan pelbagai pengecam unik.
Hermit membenarkan untuk menjalankan program dalam bekas di mana faktor-faktor ini kekal malar dalam larian berikutnya. Pelaksanaan berulang, yang menghasilkan semula sepenuhnya konfigurasi persekitaran yang tidak menentu, boleh digunakan untuk diagnosis ralat, penyahpepijatan berbilang langkah dengan lelaran, mewujudkan persekitaran tetap untuk ujian regresi, ujian tekanan, penyelesaian masalah berbilang benang dan sistem binaan yang boleh diulang.
Hermit memaksa pelaksanaan deterministik program sewenang-wenangnya dan bertindak sebagai pembungkus yang boleh dihasilkan semula. Iaitu, ia secara hermetik mengasingkan program daripada sumber bukan determinisme seperti pemasaan, interleaving benang, penjanaan nombor rawak, dll. Determinisme terjamin ialah alat yang berkuasa dan berfungsi sebagai asas untuk beberapa aplikasi, termasuk ujian tekanan serentak, rekod/main semula, binaan boleh dihasilkan semula dan diagnosis automatik ralat serentak, dan banyak lagi.
Hermit tidak boleh mengasingkan program tetamu daripada sumber bukan determinisme, seperti perubahan sistem fail atau respons daripada rangkaian luaran. Sebaliknya, untuk memberikan determinisme penuh, pengguna mesti menyediakan imej asas sistem fail tetap (contohnya, dengan Docker) dan melumpuhkan rangkaian luaran.
Mengenai Hermit
Hermit membolehkan kuasa mewujudkan persekitaran yang boleh dihasilkan semula dengan memintas panggilan sistem, beberapa daripadanya digantikan dengan pengendali mereka sendiri yang menghasilkan output malar, dan sebahagian daripadanya dialihkan ke kernel, selepas itu data tidak berterusan dikeluarkan daripada output.
Untuk memintas panggilan Kepada sistem, rangka kerja digunakan lamunan, yang kodnya turut diterbitkan oleh Facebook. Untuk mengelakkan perubahan sistem fail dan permintaan rangkaian daripada menjejaskan kemajuan pelaksanaan, pelaksanaan dilakukan menggunakan imej pegun sistem fail dan dengan akses kepada rangkaian luaran dilumpuhkan. Dengan mengakses penjana nombor pseudorandom, Hermit menghasilkan urutan pratakrif yang diulang setiap kali ia dilaksanakan.
Sumber bukan determinisme yang paling kompleks adalah dalam penjadual benang. Cara kernel menjadualkan utas bergantung pada banyak faktor luaran, termasuk bilangan CPU fizikal atau utas lain yang berjalan pada sistem yang memerlukan masa CPU.
Daripada pengaruh tidak kekal yang lebih kompleks terhadap prestasi, menyerlahkan penjadual benang, yang tingkah lakunya bergantung pada banyak faktor luaran, seperti bilangan teras CPU dan kehadiran utas berjalan lain.
Untuk memastikan tingkah laku penjadual boleh berulang, semua benang bersiri, terikat pada teras CPU tunggal dan mengikut susunan kawalan dihantar ke benang. Setiap utas dibenarkan untuk melaksanakan bilangan arahan tetap, selepas itu pelaksanaan dihentikan dan dipindahkan ke utas lain (untuk mengehadkan, CPU PMU (Unit Pemantauan Prestasi) digunakan, yang menghentikan pelaksanaan selepas bilangan cawangan bersyarat yang ditentukan).
Untuk mendiagnosis masalah dengan benang kerana keadaan perlumbaan, Hermit mempunyai mod untuk mengesan operasi yang tidak teratur dan menyebabkan sekatan. Untuk mengenal pasti masalah sedemikian, perbandingan dibuat antara negeri di mana operasi yang betul dan penamatan pelaksanaan yang tidak normal telah didaftarkan.
Akhir sekali, jika anda berminat untuk mengetahui lebih lanjut mengenainya, anda harus tahu itu kod projek ia ditulis dalam Rust dan diedarkan di bawah lesen BSD.
Anda boleh menyemak butiran di pautan berikut.