ฉันไม่แน่ใจว่านี่เป็นปัญหาของ Ubuntu หรือปัญหาคอมไพล์ ...
ฉันมีพีซีสองเครื่อง
- หนึ่งคือ ubuntu VM (เรียกมันว่า VM PC)
- อีกอันคือ Ubuntu PC (เรียกว่า Build PC)
ทั้งคู่ใช้ Ubuntu 18.04
ทั้งคู่ทำงานบนฮาร์ดแวร์เดียวกัน (เครื่องจริงต่างกัน แต่รุ่น hw เดียวกัน)
ฉันมีโครงสร้างซื้อคืนที่ใหญ่มาก แต่เมื่อฉันเรียกใช้ เวลา git submodule foreach --recursive git สถานะ
ฉันได้รับเวลาที่แตกต่างกันอย่างมาก:
- สร้างพีซี: ~40 วินาที
- VM พีซี: ~9 วินาที
ถ้าฉันเพิ่งทำ สถานะคอมไพล์
ที่ระดับบนสุด ฉันได้รับ ~2s บน Build PC และ ~0.5s บน VM PC
ทั้งคู่ใช้งาน git เวอร์ชัน 2.17.1 เดียวกัน - ทำให้ Ubuntu สองตัวติดตั้งโดยใช้สคริปต์การติดตั้งเดียวกัน - ดังนั้นพวกมันจึงคล้ายกันมาก
ข้อแตกต่างที่สำคัญคือ Build PC มี 3 ฟิสิคัล 1 NVmem และ 2xSSDs:
- ระบบปฏิบัติการ 256GB (NVM)
- 1TB sw repos (repo ภายใต้การทดสอบอยู่ที่นี่)
- repos อื่น ๆ 1TB
ในขณะที่ VM นั้นทั้งหมดอยู่บน SSD หนึ่งตัวภายในดิสก์อิมเมจของกล่องไวรัส (ประมาณ 500GB)
ฉันไม่แน่ใจว่าจะเริ่มแก้ไขจุดบกพร่องนี้ได้ที่ไหน ดังนั้นฉันคิดว่าฉันจะเริ่มในฟอรัมนี้ :)
อัปเดต
ฉันลองสิ่งนี้บน OS SSD บน Build PC และยังคงได้ผลลัพธ์ที่ช้ากว่า .... ดังนั้นมันจึงไม่ใช่ปัญหากับ SSD ตัวที่ 2/3 หรือวิธีการติดตั้ง...
อัปเดต 2
บนเครื่องที่แตกต่างกันสองเครื่อง - พวกเขากำลังทดสอบกับ repo ที่เหมือนกัน (โคลนในลักษณะเดียวกันจากระยะไกลเดียวกัน) Build PC one เป็นโคลนที่ใหม่กว่า - แต่ฉันหวังว่าการดีบักการนับจะเหมือนกัน นี่คือผลลัพธ์ของ: git นับวัตถุ -v
:
วีเอ็มพีซี
จำนวน: 281
ขนาด: 1184
ในแพ็ค: 1698
แพ็ค: 2
ขนาดแพ็ค: 112961
ลูกพรุนบรรจุได้: 0
ขยะ: 0
ขนาดขยะ: 0
สร้างพีซี
นับ: 0
ขนาด: 0
บรรจุในห่อ: 1972
แพ็ค: 1
ขนาดแพ็ค: 112994
ลูกพรุนบรรจุได้: 0
ขยะ: 0
ขนาดขยะ: 0
ค่าที่แตกต่างกันมาก... ฉันไม่แน่ใจว่ามันหมายถึงอะไร ดังนั้นฉันจึงลบและทำซ้ำ repo ของ VM PC เพื่อดูว่าการโคลนใหม่สร้างความแตกต่างหรือไม่ นี่คือค่าเหล่านั้น:
นับ: 0
ขนาด: 0
บรรจุในห่อ: 1972
แพ็ค: 1
ขนาดแพ็ค: 112994
ลูกพรุนบรรจุได้: 0
ขยะ: 0
ขนาดขยะ: 0
ฉันวิ่งอีกครั้ง สถานะคอมไพล์
ทดสอบและได้ผลลัพธ์ที่เหมือนกันทุกประการ โดยที่ VM PC เร็วกว่ามาก
ปรับปรุง 3
วิ่งแปลกจริงๆ: เวลา GIT_TRACE_PERFORMANCE=1 git st
บน Build PC พิมพ์การดีบักจำนวนมาก - แต่ทำงานเร็วเท่ากับ VM PC (< 1 วินาที) แต่ถ้าฉันเรียกใช้สิ่งอื่นจะใช้เวลานานกว่ามาก:
เวลา GIT_TRACE_PERFORMANCE=1 git st
~0.5 วินาที
เวลา GIT_TRACE_PERFORMANCE=1 git st 2> /dev/null
~2 วินาที
เวลาคอมไพล์เซนต์
~2 วินาที