เปิดตัว Facebook เมื่อเร็ว ๆ นี้ผ่านสิ่งพิมพ์เปิดตัว ฤาษีซึ่งรูปแบบก สภาพแวดล้อมสำหรับการดำเนินการโปรแกรมเชิงกำหนดซึ่งทำให้สามารถบรรลุผลลัพธ์เดียวกันและทำซ้ำกระบวนการดำเนินการในการเรียกใช้ที่แตกต่างกันโดยใช้ข้อมูลอินพุตเดียวกัน
ในระหว่างการดำเนินการตามปกติ ปัจจัยภายนอกต่างๆ จะส่งผลต่อเอาต์พุต เช่น เวลาปัจจุบัน ฟังก์ชันกำหนดการเธรด ที่อยู่หน่วยความจำเสมือน ข้อมูลจากเครื่องสร้างตัวเลขสุ่มเทียม และตัวระบุเฉพาะต่างๆ
ฤาษีอนุญาตให้เรียกใช้โปรแกรมในคอนเทนเนอร์ โดยที่ปัจจัยเหล่านี้คงที่ในการรันครั้งต่อๆ ไป การดำเนินการซ้ำได้ ซึ่งสร้างการกำหนดค่าของสภาพแวดล้อมที่ผันผวนได้อย่างสมบูรณ์ สามารถใช้สำหรับการวินิจฉัยข้อผิดพลาด การดีบัก หลายขั้นตอนด้วยการวนซ้ำ สร้างสภาพแวดล้อมแบบคงที่สำหรับการทดสอบการถดถอย การทดสอบความเครียด การแก้ไขปัญหาแบบมัลติเธรด และระบบการสร้างที่ทำซ้ำได้
ฤาษีบังคับให้ดำเนินการตามกำหนดของโปรแกรมตามอำเภอใจและทำหน้าที่เป็นตัวห่อหุ้มที่ทำซ้ำได้ นั่นคือ มันแยกโปรแกรมอย่างแน่นหนาจากแหล่งที่มาของความไม่แน่นอน เช่น เวลา การสอดแทรกของเธรด การสร้างตัวเลขสุ่ม เป็นต้น การกำหนดระดับที่รับประกันเป็นเครื่องมืออันทรงพลังและทำหน้าที่เป็นรากฐานสำหรับแอปพลิเคชันจำนวนมาก รวมถึงการทดสอบความเครียดพร้อมกัน บันทึก/เล่นซ้ำ การสร้างที่ทำซ้ำได้ และการวินิจฉัยข้อผิดพลาดที่เกิดขึ้นพร้อมกันโดยอัตโนมัติ และอื่นๆ อีกมากมาย
ฤาษีไม่สามารถแยกโปรแกรมเกสต์ออกจากแหล่งที่มาของการไม่กำหนดได้ เช่น การเปลี่ยนแปลงระบบไฟล์ หรือการตอบสนองจากเครือข่ายภายนอก ผู้ใช้ต้องจัดเตรียมอิมเมจพื้นฐานของระบบไฟล์แบบตายตัวแทน (เช่น กับ Docker) และปิดใช้งานเครือข่ายภายนอก
เกี่ยวกับ ฤาษี
ฤาษี ช่วยให้พลังสร้างสภาพแวดล้อมที่ทำซ้ำได้ โดยการสกัดกั้นการเรียกของระบบ ซึ่งบางส่วนถูกแทนที่ด้วยตัวจัดการของตัวเองที่สร้างเอาต์พุตคงที่ และบางส่วนถูกเปลี่ยนเส้นทางไปยังเคอร์เนล หลังจากนั้นข้อมูลที่ไม่คงอยู่จะถูกลบออกจากเอาต์พุต
เพื่อดักฟังการโทร เข้าสู่ระบบ มีการใช้กรอบงาน ภวังค์ซึ่งมีรหัสเผยแพร่โดย Facebook เพื่อป้องกันไม่ให้การเปลี่ยนแปลงระบบไฟล์และคำขอเครือข่ายส่งผลกระทบต่อความคืบหน้าในการดำเนินการ ดำเนินการโดยใช้ภาพนิ่ง ของระบบไฟล์และเมื่อปิดใช้งานการเข้าถึงเครือข่ายภายนอก ด้วยการเข้าถึงเครื่องสร้างตัวเลขเทียม Hermit จะสร้างลำดับที่กำหนดไว้ล่วงหน้าซึ่งจะทำซ้ำทุกครั้งที่ดำเนินการ
แหล่งที่มาที่ซับซ้อนที่สุดของ non-determinism อยู่ในตัวกำหนดตารางเวลาของเธรด วิธีที่เคอร์เนลกำหนดเวลาเธรดขึ้นอยู่กับปัจจัยภายนอกหลายอย่าง รวมถึงจำนวนของ CPU จริงหรือเธรดอื่นที่ทำงานบนระบบที่ต้องใช้เวลาของ CPU
จากอิทธิพลที่ไม่ถาวรที่ซับซ้อนมากขึ้นต่อการปฏิบัติงาน ไฮไลท์ตัวจัดกำหนดการเธรดซึ่งลักษณะการทำงานขึ้นอยู่กับปัจจัยภายนอกหลายอย่าง เช่น จำนวนคอร์ของ CPU และการมีอยู่ของเธรดที่กำลังทำงานอยู่อื่นๆ
เพื่อให้แน่ใจว่าการทำงานของตัวกำหนดตารางเวลาที่ทำซ้ำได้, เธรดทั้งหมดถูกทำให้เป็นอนุกรม, เชื่อมโยงกับคอร์ CPU เดียว และตามลำดับที่การควบคุมถูกส่งผ่านไปยังเธรด แต่ละเธรดได้รับอนุญาตให้ดำเนินการตามจำนวนคำสั่งที่แน่นอน หลังจากนั้นการดำเนินการจะหยุดและถ่ายโอนไปยังเธรดอื่น (สำหรับการจำกัด จะใช้ CPU PMU (Performance Monitoring Unit) ซึ่งจะหยุดการดำเนินการหลังจากจำนวนสาขาตามเงื่อนไขที่ระบุ)
เพื่อวินิจฉัย ปัญหาเกี่ยวกับด้ายเนื่องจากสภาพการแข่งขันฤาษี มีโหมดตรวจจับการทำงานที่ผิดปกติ และเกิดการปิดล้อม เพื่อระบุปัญหาดังกล่าว มีการเปรียบเทียบระหว่างสถานะที่มีการลงทะเบียนการดำเนินการที่ถูกต้องและการยุติการดำเนินการที่ผิดปกติ
สุดท้าย หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้ คุณควรรู้ไว้ รหัสโครงการ มันเขียนในสนิมและจัดจำหน่ายภายใต้ใบอนุญาต BSD
สามารถตรวจสอบรายละเอียดได้ใน ลิงค์ต่อไปนี้