เป็นไปได้ว่าผู้ใช้ Bazel ทุกคนเคยพบงานสร้างที่ช้าหรือช้ากว่าที่คาดไว้ การปรับปรุงประสิทธิภาพของแต่ละบิลด์มีคุณค่าเฉพาะสำหรับเป้าหมายที่สร้างผลกระทบอย่างมีนัยสำคัญ เช่น
เป้าหมายหลักสำหรับนักพัฒนาซอฟต์แวร์ที่ปรับปรุงและสร้าง (ขึ้นมาใหม่) อยู่บ่อยๆ
ไลบรารีทั่วไปที่ขึ้นอยู่กับเป้าหมายอื่นอย่างกว้างขวาง
เป้าหมายตัวแทนจากกลุ่มเป้าหมายประเภทต่างๆ (เช่น กฎที่กำหนดเอง) การวิเคราะห์และแก้ไขปัญหาในบิลด์เดียวอาจช่วยแก้ปัญหาในวงกว้างได้
ขั้นตอนสำคัญในการปรับปรุงประสิทธิภาพของบิลด์คือการทำความเข้าใจสถานที่ที่ใช้ทรัพยากรไป หน้านี้จะแสดงเมตริกต่างๆ ที่รวบรวมได้ การแจกแจงประสิทธิภาพของบิลด์จะแสดงวิธีใช้เมตริกเหล่านี้เพื่อตรวจหาและแก้ไขปัญหาเกี่ยวกับประสิทธิภาพของบิลด์
วิธีการหลักๆ ในการดึงข้อมูลเมตริกจากบิลด์ Bazel มีดังนี้
โปรโตคอลเหตุการณ์บิลด์ (BEP)
Bazel แสดงผลบัฟเฟอร์โปรโตคอลที่หลากหลาย
build_event_stream.proto
ผ่าน Build Event Protocol (BEP) ซึ่งรวบรวมข้อมูลโดยแบ็กเอนด์ที่คุณระบุได้ คุณอาจตัดสินใจรวมเมตริกด้วยวิธีต่างๆ ที่หลากหลาย ทั้งนี้ขึ้นอยู่กับกรณีการใช้งานของคุณ แต่ในที่นี้เราจะพูดถึงแนวคิดและฟิลด์โปรโตบางส่วนที่จะเป็นประโยชน์โดยทั่วไปในการพิจารณา
คำสั่งของ Bazel / cquery / aquery
Bazel มีโหมดการค้นหา 3 โหมด (คำค้นหา, cquery และ aquery) ซึ่งช่วยให้ผู้ใช้ค้นหากราฟเป้าหมาย, กราฟเป้าหมายที่กำหนดค่าไว้ และกราฟการดำเนินการตามลำดับ ภาษาคำค้นหามีชุดฟังก์ชันที่ใช้ได้ในโหมดคำค้นหาต่างๆ ซึ่งจะช่วยให้คุณปรับแต่งคำค้นหาได้ตามต้องการ
โปรไฟล์การติดตาม JSON
สำหรับการเรียกใช้ Bazel ที่เหมือนบิลด์ทุกครั้ง Bazel จะเขียนโปรไฟล์การติดตามในรูปแบบ JSON โปรไฟล์การติดตาม JSON อาจมีประโยชน์อย่างมากในการทําความเข้าใจสิ่งที่ Bazel ใช้เวลาระหว่างการเรียกใช้
บันทึกการดำเนินการ
บันทึกการดำเนินการช่วยแก้ปัญหาและแก้ปัญหาเกี่ยวกับ Hit ของแคชระยะไกลที่หายไปเนื่องจากความแตกต่างระหว่างเครื่องและสภาพแวดล้อม หรือการดำเนินการที่ไม่กำหนดได้ หากคุณส่ง Flag
--experimental_execution_log_spawn_metrics
(พร้อมใช้งานใน Bazel 5.2) จะมีเมตริกการสร้างโดยละเอียดทั้งสำหรับการดำเนินการในเครื่องและจากระยะไกลด้วย คุณใช้เมตริกเหล่านี้เป็นตัวอย่างเพื่อเปรียบเทียบประสิทธิภาพของเครื่องในเครื่องกับระยะไกล หรือดูว่าการดำเนินการที่สร้างขึ้นส่วนใดช้ากว่าที่คาดไว้อย่างสม่ำเสมอ (เช่น เนื่องจากอยู่ในคิว)
บันทึกกราฟการดำเนินการ
แม้ว่าโปรไฟล์การติดตาม JSON จะมีข้อมูลเส้นทางวิกฤติ แต่บางครั้งคุณอาจต้องการข้อมูลเพิ่มเติมเกี่ยวกับกราฟทรัพยากร Dependency ของการดำเนินการที่ดําเนินการ
ตั้งแต่ Bazel 6.0 เป็นต้นไป คุณสามารถส่งแฟล็ก
--experimental_execution_graph_log
และ
--experimental_execution_graph_log_dep_type=all
เพื่อเขียนบันทึกเกี่ยวกับการดำเนินการที่ดำเนินการและการพึ่งพาระหว่างกัน
ข้อมูลนี้สามารถใช้เพื่อทำความเข้าใจการลากที่โหนดเพิ่มเข้ามาในเส้นทางสำคัญ การลากคือระยะเวลาที่อาจประหยัดได้ด้วยการลบโหนดใดโหนดหนึ่งออกจากกราฟการดำเนินการ
ข้อมูลนี้จะช่วยให้คุณคาดการณ์ผลจากการเปลี่ยนแปลงที่มีต่อกราฟบิลด์และการทำงานได้ก่อนที่จะดำเนินการจริง
การเปรียบเทียบกับม้านั่งกับม้านั่ง
Bazel bench เป็นเครื่องมือการเปรียบเทียบสำหรับโปรเจ็กต์ Git เพื่อใช้เปรียบเทียบประสิทธิภาพของบิลด์ในกรณีต่อไปนี้
การเปรียบเทียบโปรเจ็กต์: การเปรียบเทียบจะมีการดำเนินการ 2 อย่างด้วยกันในเวอร์ชัน Bazel เดียว ใช้เพื่อตรวจหาการถดถอยในบิลด์ (มักจะเกิดขึ้นผ่านการเพิ่มทรัพยากร Dependency)
การเปรียบเทียบของบาเซล: การเปรียบเทียบ Bazel 2 เวอร์ชันเข้าด้วยกันด้วยคอมมิตของ Git เดียว ใช้เพื่อตรวจหาการถดถอยภายใน Bazel เอง (ในกรณีที่คุณใช้บำรุงรักษา / แยก Bazel)
การเปรียบเทียบจะตรวจสอบเวลาจริง เวลา CPU และเวลาของระบบ และขนาดฮีปที่ Bazel รักษาไว้
นอกจากนี้ ขอแนะนำให้เรียกใช้ Bazel Ben บนเครื่องจริงโดยเฉพาะที่ไม่ได้เรียกใช้กระบวนการอื่นๆ เพื่อลดแหล่งที่มาของความแปรปรวน