ประสิทธิภาพการสร้างเฉพาะระบบปฏิบัติการใน Java

ขณะนี้เรากำลังประเมินการกำหนดค่าพีซีของนักพัฒนารุ่นต่อไปทั่วทั้งบริษัท และสังเกตเห็นบางสิ่งที่แปลกประหลาดจริงๆ

เสาหินที่ค่อนข้างใหญ่ของเรามี - ในการกำหนดค่าปัจจุบันของเรา เวลาในการสร้างประมาณ 4.5 นาที (ไม่มีการทดสอบ แค่คอมไพล์)

สำหรับการกำหนดค่ารุ่นถัดไป เราได้อัปเกรดส่วนประกอบหลายอย่าง ความถี่และ IPC เพิ่มขึ้นปานกลางด้วยโปรเซสเซอร์ เพิ่มจำนวนคอร์ CPU เป็นสองเท่า และการเปลี่ยนจาก SATA SSD ขนาดเล็กไปเป็น NVMe SSD ที่มีพิกัดที่ >3GBps นอกจากนี้ การกำหนดค่ารุ่นถัดไปยังสลับจาก Windows 7 เป็น Windows 10

เมื่อทำการทดสอบครั้งแรก เราสังเกตเห็นว่าเวลาในการสร้างเกือบจะเท่ากัน (4.3 นาที) ซึ่งมีการปรับปรุงน้อยกว่าที่เราคาดไว้มาก

ในระหว่างการทดลองของเรา ณ จุดหนึ่งเราได้พยายามเรียกใช้กระบวนการสร้างจากภายในเครื่อง Linux เสมือนที่ทำงานบนโฮสต์ของ windows ในการกำหนดค่าเก่า (Windows7) เราเห็นเวลาในการสร้างลดลงจาก 4.5 เป็น ~3.7 นาที บนโฮสต์ Windows 10 เราเห็นลดลงจาก 4.3 เป็น 2.3 นาที เราได้ตัดสิ่งต่างๆ เช่น การสแกนไวรัสออกไป

เราค่อนข้างประหลาดใจกับผลลัพธ์เหล่านี้ และพยายามค้นหาคำอธิบายอื่นนอกเหนือจากข้อความที่เกือบจะเป็นศาสนาและดูถูกเกี่ยวกับระบบปฏิบัติการต่างๆ

ดังนั้นคำถามก็คือ: เราอาจทำอะไรผิดในการกำหนดค่าเครื่อง Windows ในลักษณะที่ว่าความเร็วเกือบครึ่งหนึ่งของ Linux ที่ทำงานเสมือนจริงในโฮสต์ windows เดียวกัน โดยเฉพาะอย่างยิ่งเมื่อความก้าวหน้าทางฮาร์ดแวร์ทั้งหมดดูเหมือนจะถูกกินโดยการเปลี่ยนจาก windows 7 เป็น 10

คำถามอีกข้อคือ: เราจะเพิ่มประสิทธิภาพกระบวนการ javac ให้ใช้คอร์มากขึ้นได้อย่างไร เพราะตอนนี้ เมื่อใช้ Hotspot JDK 8 เราจะเห็นว่าบิลด์ส่วนใหญ่ใช้งานจริงมากที่สุดสองคอร์ ฉันได้อ่านเกี่ยวกับ sjavac แล้ว แต่ดูเหมือนว่าจะเป็นฟีเจอร์ทดลองที่มีให้เฉพาะ OpenJDK9 เป็นต้นไปใช่ไหม


person Jonathan    schedule 17.02.2018    source แหล่งที่มา


คำตอบ (1)


หลังจากทดลองมาเกือบหนึ่งปี เราก็ได้ข้อสรุปว่านี่คือ NTFS นั่นเองที่เป็นตัวร้าย หากคุณมีพาร์ติชันผู้ใช้ ntfs พร้อมโฮสต์ linux คุณจะได้รับผลลัพธ์ที่ค่อนข้างคล้ายกันเมื่อเปรียบเทียบกับการตั้งค่า windows ทั้งหมด

เราทำการวัดประสิทธิภาพของ gradle-build, eclipse ภายใน build, การเริ่มต้น wildfly และรันการทดสอบที่เน้นฐานข้อมูลเป็นศูนย์กลางบนอุปกรณ์หลายเครื่อง การวัดประสิทธิภาพทั้งหมดของเราแสดงให้เห็นการเร่งความเร็วอย่างต่อเนื่องอย่างน้อย 100% เมื่อเปลี่ยนจาก Windows มาเป็น Linux (บางครั้ง Windows ใช้เวลาในการวัดประสิทธิภาพในโลกแห่งความเป็นจริงมากกว่า Linux ถึง 3 เท่า การวัดประสิทธิภาพปลอมบางตัวมีความเร็วอยู่ที่ 60!) โดยเฉพาะอย่างยิ่งในโน้ตบุ๊ก เราประสบปัญหาสัญญาณรบกวนน้อยกว่ามาก เนื่องจากโหลดโปรเซสเซอร์รวมของโครงสร้างที่สมบูรณ์นั้นน้อยกว่า Windows อย่างมาก

ข้อสรุปของเราคือเปลี่ยนจาก Windows เป็น Linux ในช่วงปีที่แล้ว

ในส่วนของการทำให้ขนานกัน เราตระหนักได้ว่า มันเป็นรูปแบบหนึ่งของโค้ดที่พัวพัน การแก้ไขปัญหานี้ช่วยให้ gradle และ javac สร้างแบบขนานได้มาก (ดูที่ gradle-composite-builds ด้วย)

person Jonathan    schedule 13.02.2019