فیسبوک (ممنوع در فدراسیون روسیه) کد جعبه ابزار Hermit را منتشر کرد که محیطی را برای اجرای قطعی برنامهها ایجاد میکند و به اجراهای مختلف اجازه میدهد تا به نتیجه یکسان برسند و اجرا را با استفاده از دادههای ورودی یکسان تکرار کنند. کد پروژه به زبان Rust نوشته شده و تحت مجوز BSD توزیع شده است.
در طول اجرای عادی، نتیجه تحت تأثیر عوامل خارجی مختلفی مانند زمان جاری، زمانبندی رشته، آدرسهای حافظه مجازی، دادههای تولیدکننده اعداد شبه تصادفی، و شناسههای مختلف متفاوت است. Hermit به شما این امکان را می دهد که برنامه ای را در یک ظرف اجرا کنید که در آن این فاکتورها در اجراهای بعدی ثابت می مانند. اجرای تکرارپذیر که به طور کامل پارامترهای غیر پایدار محیط را بازتولید می کند، می تواند برای تشخیص خطا، اشکال زدایی چند مرحله ای با اجرای مکرر، ایجاد یک محیط ثابت برای تست های رگرسیون، تست استرس، شناسایی مشکلات چند نخی و در سیستم های ساخت تکرار شونده استفاده شود. .
یک محیط تکرارپذیر با رهگیری فراخوانی های سیستمی ایجاد می شود، که برخی از آنها با کنترل کننده های خود جایگزین می شوند که یک نتیجه دائمی ایجاد می کنند، و برخی دیگر به هسته هدایت می شوند، پس از آن نتیجه از داده های غیر پایدار پاک می شود. برای رهگیری تماس های سیستمی از چارچوب reverie استفاده می شود که کد آن توسط فیس بوک نیز منتشر شده است. برای جلوگیری از تأثیر تغییرات در سیستم فایل و درخواست های شبکه بر پیشرفت اجرا، اجرا با استفاده از یک تصویر FS ثابت و با غیرفعال بودن دسترسی به شبکه های خارجی انجام می شود. هنگام دسترسی به مولد اعداد شبه تصادفی، Hermit یک دنباله از پیش تعریف شده تولید می کند که هر بار که راه اندازی می شود تکرار می شود.
یکی از پیچیدهترین تأثیرات متغیر بر پیشرفت اجرا، زمانبندی رشته است که رفتار آن به عوامل خارجی زیادی مانند تعداد هستههای CPU و وجود رشتههای اجرایی دیگر بستگی دارد. برای اطمینان از رفتار تکرارپذیر زمانبند، همه رشته ها به صورت سریالی در ارتباط با تنها یک هسته CPU و حفظ ترتیبی که در آن کنترل به رشته ها منتقل می شود، اجرا می شوند. هر رشته مجاز است تعداد ثابتی از دستورالعمل ها را اجرا کند، پس از آن اجرا متوقف می شود و به رشته دیگری منتقل می شود (برای محدود کردن CPU PMU (واحد نظارت بر عملکرد)، که پس از تعداد مشخصی از شاخه های شرطی اجرا را متوقف می کند.
برای تشخیص مشکلات thread ها به دلیل شرایط مسابقه، Hermit حالتی برای شناسایی عملیاتی دارد که دستور اجرای آنها نامرتب بوده و منجر به خاموش شدن غیرعادی شده است. برای شناسایی چنین مشکلاتی، مقایسه ای از حالت هایی انجام می شود که در آن عملکرد صحیح و خاتمه غیرعادی اجرا ثبت شده است.
منبع: opennet.ru