หน้านี้จะอธิบายวิธีเพิ่มประสิทธิภาพบิลด์ของ Bazel เมื่อใช้ Bazel ซ้ำๆ
สถานะรันไทม์ของ Bazel
การเรียกใช้ Bazel เกี่ยวข้องกับส่วนที่มีการโต้ตอบหลายส่วน
อินเทอร์เฟซบรรทัดคำสั่ง
bazel
(CLI) เป็นเครื่องมือฟรอนท์เอนด์ที่แสดงต่อผู้ใช้ และรับคำสั่งจากผู้ใช้เครื่องมือ CLI เริ่มต้นเซิร์ฟเวอร์ Basl สำหรับฐานเอาต์พุตแต่ละรายการแยกกัน โดยทั่วไปเซิร์ฟเวอร์ Bazel จะทำงานตลอด แต่จะปิดลงหลังจากไม่มีการใช้งาน เพื่อไม่ให้สิ้นเปลืองทรัพยากร
เซิร์ฟเวอร์ Bazel ดำเนินการขั้นตอนการโหลดและการวิเคราะห์สำหรับคำสั่งที่กำหนด (
build
,run
,cquery
ฯลฯ) ซึ่งสร้างส่วนที่จำเป็น ของกราฟบิลด์ในหน่วยความจำ โครงสร้างข้อมูลที่ได้จะเก็บรักษาไว้ใน เซิร์ฟเวอร์ Bazel เป็นส่วนหนึ่งของแคชการวิเคราะห์เซิร์ฟเวอร์ Bazel ยังดำเนินการต่างๆ หรือส่ง ปิดการดำเนินการสำหรับการดำเนินการระยะไกลหากมีการตั้งค่าไว้ ผลลัพธ์ของ การดำเนินการมีแคชไว้เช่นกัน คือในแคชการดำเนินการ (หรือ แคชการดำเนินการ ซึ่งอาจเป็นได้ทั้งในเครื่องหรือระยะไกล และอาจมีการแชร์ ระหว่างเซิร์ฟเวอร์ Bazel)
ผลลัพธ์ของการเรียกใช้ Bazel พร้อมใช้งานในโครงสร้างเอาต์พุต
เรียกใช้ Bazel ซ้ำๆ
ตามกระบวนการทำงานทั่วไปของนักพัฒนาซอฟต์แวร์ เป็นเรื่องปกติที่จะสร้าง (หรือเรียกใช้) โค้ด
เกิดขึ้นซ้ำๆ หลายครั้ง โดยมักจะใช้ความถี่สูงมาก (เช่น เพื่อแก้ไขวิดีโอรวมคลิปบางส่วน
หรือตรวจสอบการทดสอบที่ไม่สำเร็จ) ในสถานการณ์เช่นนี้ สิ่งสำคัญก็คือ
การเรียก bazel
ซ้ำๆ มีค่าใช้จ่ายในการดำเนินการน้อยที่สุดเท่าที่จะเป็นไปได้
การดำเนินการที่อยู่เบื้องหลังและซ้ำๆ (เช่น การเรียกใช้คอมไพเลอร์ หรือการดำเนินการทดสอบ)
ดังนั้น เราจึงต้องพิจารณาสถานะรันไทม์ของ Bazel อีกครั้ง
แคชการวิเคราะห์เป็นข้อมูลที่สำคัญ ระยะเวลาที่สำคัญอาจ ใช้เพียงขั้นตอนการโหลดและการวิเคราะห์ของ Cold Run (เช่น การเรียกใช้ หลังจากที่เซิร์ฟเวอร์ Bazel เริ่มทำงานหรือเมื่อมีการทิ้งแคชการวิเคราะห์) สำหรับ Cold Build เดียวที่ประสบความสำเร็จ (เช่น สำหรับเวอร์ชันที่ใช้งานจริง) ต้นทุนนี้คือ ตอบสนองได้ แต่ในการสร้างเป้าหมายเดิมซ้ำๆ เป็นสิ่งสำคัญที่สิ่งนี้ จะหักค่าใช้จ่ายและไม่ต้องชำระซ้ำในการเรียกใช้แต่ละครั้ง
แคชการวิเคราะห์ค่อนข้างผันผวน อย่างแรก โมเดลนี้เป็นส่วนหนึ่งของกระบวนการ
ของเซิร์ฟเวอร์ Bazel ดังนั้นเมื่อสูญเสียเซิร์ฟเวอร์ แคชก็จะหายไป แต่แคช
ถูกใช้ไม่ได้ได้โดยง่ายด้วย เช่น แฟล็กบรรทัดคำสั่ง bazel
จำนวนมาก
ทำให้ทิ้งแคช เนื่องจากมีแฟล็กหลายรายการที่ส่งผลต่อบิลด์
กราฟ (เช่น เนื่องจาก
แอตทริบิวต์ที่กำหนดค่าได้) การแจ้งว่าไม่เหมาะสม
การเปลี่ยนแปลงอาจทำให้เซิร์ฟเวอร์ Bazel รีสตาร์ทด้วย (เช่น
ตัวเลือกการเริ่มต้นใช้งาน)
แคชการดำเนินการที่ดียังมีค่าสำหรับประสิทธิภาพของบิลด์ด้วย การดำเนินการ สามารถเก็บแคชไว้ในเครื่องได้ บนดิสก์ หรือ จากระยะไกล คุณสามารถแชร์แคชกับ เซิร์ฟเวอร์ Bazel กัน และนักพัฒนานั้นจริงๆ
หลีกเลี่ยงการทิ้งแคชการวิเคราะห์
Bazel จะพิมพ์คำเตือนหากมีการทิ้งแคชการวิเคราะห์หรือ รีสตาร์ทเซิร์ฟเวอร์แล้ว คุณควรหลีกเลี่ยงวิธีใดวิธีหนึ่งต่อไปนี้ในระหว่างการใช้งานซ้ำๆ
โปรดอย่าลืมเปลี่ยนแฟล็ก
bazel
ในช่วงกลางของการปรับเปลี่ยนซ้ำๆ เช่น การรวมbazel build -c opt
กับbazel cquery
จะทำให้แต่ละคำสั่งทิ้งแคชการวิเคราะห์ของอีกคำสั่งหนึ่ง โดยทั่วไปแล้ว ให้ใช้ชุดแฟล็กคงที่ในช่วงเวลาของเวิร์กโฟลว์หนึ่งๆการสูญเสียเซิร์ฟเวอร์ Bazel จะทำให้แคชการวิเคราะห์หายไป เซิร์ฟเวอร์ Bazel มี ไม่มีการใช้งาน configurable หลังจากนั้นจะปิดลง คุณกำหนดค่าได้ในครั้งนี้ผ่าน ไฟล์ bazelrc ให้ตรงกับความต้องการของคุณ เซิร์ฟเวอร์รีสตาร์ทด้วยเมื่อเริ่มต้นระบบ การเปลี่ยนแปลงการตั้งค่า ดังนั้น โปรดหลีกเลี่ยงการเปลี่ยนการตั้งค่าสถานะดังกล่าวหากเป็นไปได้
ระวังว่าเซิร์ฟเวอร์ Bazel จะถูกปิด หากคุณกด กด Ctrl-C ซ้ำๆ ขณะที่ Bazel ทำงานอยู่ คุณคงอยากพยายามประหยัดเวลา โดยการขัดจังหวะบิลด์ที่กำลังทำงานซึ่งไม่จำเป็นต้องใช้อีกต่อไป แต่ให้กดเพียงอย่างเดียว กด Ctrl-C 1 ครั้งเพื่อขอสิ้นสุดการเรียกใช้ปัจจุบันอย่างนุ่มนวล
หากคุณต้องการใช้แฟล็กหลายชุดจากพื้นที่ทำงานเดียวกัน คุณสามารถ ใช้ฐานเอาต์พุตที่แตกต่างกันหลายรายการ สลับกับ
--output_base
แจ้ง ฐานเอาต์พุตแต่ละฐานจะมีเซิร์ฟเวอร์ Bazel ของตัวเอง
หากต้องการทำให้เงื่อนไขนี้เป็นข้อผิดพลาดแทนที่จะเป็นคำเตือน คุณสามารถใช้
--noallow_analysis_cache_discard
Flag (เปิดตัวใน Bazel 6.4.0)