Facebook menerbitkan Hermit, kit alat untuk pelaksanaan program yang boleh diulang

Facebook (diharamkan di Persekutuan Rusia) menerbitkan kod untuk kit alat Hermit, yang mewujudkan persekitaran untuk pelaksanaan program yang menentukan, membolehkan larian yang berbeza untuk mencapai hasil yang sama dan mengulangi pelaksanaan menggunakan data input yang sama. Kod projek ditulis dalam Rust dan diedarkan di bawah lesen BSD.

Semasa pelaksanaan biasa, hasilnya dipengaruhi oleh pelbagai faktor luar, seperti masa semasa, penjadualan benang, alamat memori maya, data daripada penjana nombor pseudorandom dan pelbagai pengecam unik. Hermit membolehkan anda menjalankan program dalam bekas di mana faktor ini kekal malar merentasi larian berikutnya. Pelaksanaan berulang, yang menghasilkan semula sepenuhnya parameter persekitaran yang tidak berterusan, boleh digunakan untuk diagnosis ralat, penyahpepijatan berbilang langkah dengan larian berulang, mewujudkan persekitaran tetap untuk ujian regresi, ujian tekanan, mengenal pasti masalah dengan pelbagai benang dan dalam boleh diulang. membina sistem.

Facebook menerbitkan Hermit, kit alat untuk pelaksanaan program yang boleh diulang

Persekitaran yang boleh dihasilkan semula dicipta dengan memintas panggilan sistem, sebahagian daripadanya digantikan dengan pengendali mereka sendiri yang menghasilkan hasil yang kekal, dan sebahagian lagi dialihkan ke kernel, selepas itu hasilnya dikosongkan daripada data tidak berterusan. Untuk memintas panggilan sistem, rangka kerja lamunan digunakan, yang kodnya juga diterbitkan oleh Facebook. Untuk mengelakkan perubahan dalam sistem fail dan permintaan rangkaian daripada menjejaskan kemajuan pelaksanaan, pelaksanaan dijalankan menggunakan imej FS tetap dan dengan akses kepada rangkaian luaran dilumpuhkan. Apabila mengakses penjana nombor pseudo-rawak, Hermit menghasilkan urutan pratakrif yang diulang setiap kali ia dilancarkan.

Salah satu pengaruh pembolehubah yang paling kompleks pada kemajuan pelaksanaan ialah penjadual benang, yang tingkah lakunya bergantung pada banyak faktor luaran, seperti bilangan teras CPU dan kehadiran utas pelaksana yang lain. Untuk memastikan kelakuan penjadual yang boleh diulang, semua utas dilaksanakan secara bersiri berkaitan dengan hanya satu teras CPU dan mengekalkan susunan kawalan dipindahkan ke utas. Setiap utas dibenarkan untuk melaksanakan bilangan arahan tetap, selepas itu pelaksanaan berhenti dan dipindahkan ke utas lain (untuk mengehadkan CPU PMU (Unit Pemantauan Prestasi), yang menghentikan pelaksanaan selepas bilangan cawangan bersyarat yang ditentukan).

Untuk mendiagnosis masalah dengan benang akibat keadaan perlumbaan, Hermit mempunyai mod untuk mengenal pasti operasi yang perintah pelaksanaannya tidak teratur dan menyebabkan penutupan tidak normal. Untuk mengenal pasti masalah sedemikian, perbandingan dibuat bagi keadaan di mana operasi yang betul dan penamatan pelaksanaan yang tidak normal telah direkodkan.

Sumber: opennet.ru

Tambah komen