ความสำคัญของ toolchain ที่ปรับให้เหมาะสมเป็นหนึ่งในหัวข้อที่ร้อนแรงที่สุดในโลกของนักพัฒนา Android หลายท่านอาจเคยได้ยินเกี่ยวกับ GCC และ Linaro ซึ่งเป็นสองโครงการที่ใหญ่ที่สุดในประเภทนี้ GCC เป็นมือเก่าที่เปิดตัวครั้งแรกในปี 1987 ในขณะที่ Linaro เป็นผู้เล่นอายุน้อยด้วยอายุเพียงสี่ขวบเท่านั้น
เรามาเจาะลึกประวัติความเป็นมาของทั้งสองโครงการกันก่อน อย่างที่ฉันบอกไปก่อนหน้านี้ GNU Compiler Collection นั้นเก่าแล้ว ในช่วงหลายปีที่ผ่านมา มีการนำไปใช้ในการรวบรวมโปรเจ็กต์ต่าง ๆ รวมถึง Android Google ตัดสินใจใช้เวอร์ชัน 4.6 และ 4.7 เป็นชุดเครื่องมือเริ่มต้น และฉันต้องการมุ่งเน้นไปที่เวอร์ชัน 4.7 ในชุดการทดสอบนี้
Linaro เปิดตัวในปี 2010 และได้รับการปรับให้เหมาะกับสถาปัตยกรรม ARM และแน่นอนว่า ARM นั้นถูกใช้ในสมาร์ทโฟนและแท็บเล็ตที่ใช้ระบบ Android ส่วนใหญ่ คุณสามารถพบ Linaro เป็น toolchain ที่ใช้ในการคอมไพล์เคอร์เนลหรือ ROM ทั้งหมด และนักพัฒนาหลายคนอ้างว่า toolchain นี้เร็วกว่าและมีประสิทธิภาพมากกว่า GCC
ด้วยแรงบันดาลใจจากผู้ดูแลระบบนักพัฒนา Pulser_G2 ของเรา ฉันจึงตัดสินใจลองเล่าเรื่องที่ผิดนี้และดูว่าคำกล่าวอ้างเหล่านี้เป็นเรื่องจริงหรือไม่ ในการดำเนินการนี้ ฉันดาวน์โหลดซอร์ส AOSP ก่อน ฉันสร้าง
aosp_mako-eng กำหนดเป้าหมายสำหรับ Nexus 4 ของฉันโดยใช้ชุดเริ่มต้นที่สร้างไว้ล่วงหน้าจาก Google หลังจาก ทำ otapackage, ฉันมีไฟล์ zip ขนาด 183115481 ไบต์พร้อมที่จะแฟลช หลังจากนั้น ฉันดาวน์โหลด Toolchain Linaro 4.7.4 และแทนที่ GCC ที่สร้างไว้ล่วงหน้า/gcc/linux-86. ฉันทำการเปลี่ยนแปลงที่จำเป็นเพื่อตั้งค่าระดับ O3 ของการเพิ่มประสิทธิภาพ เนื่องจาก AOSP รองรับเฉพาะเคอร์เนลที่สร้างไว้ล่วงหน้า (ไม่มีการดัดแปลง) ฉันจึงสร้างเคอร์เนลด้วยตัวเองด้วย Linaro และแทนที่เคอร์เนลใน mako-kernel ด้วยหยดของฉันเองด้านล่างนี้คุณจะเห็นไฟล์เก็บถาวรผลลัพธ์สองรายการ อย่างที่คุณเห็น ไฟล์ Linaro นั้นใหญ่กว่าเล็กน้อย ดังนั้น toolchain นี้จึงทำบางอย่างกับโฟลเดอร์ bin และ xbin ไฟล์เคอร์เนลเองก็ใหญ่กว่าเช่นกัน
แต่ขนาดไฟล์ไม่ใช่สิ่งที่สำคัญที่สุด เรามาเน้นที่ประสิทธิภาพแทน เพื่อวัดสิ่งนี้ ฉันใช้เกณฑ์มาตรฐาน AnTuTu เพื่อเพิ่มความแม่นยำ ฉันจึงทำการทดสอบแต่ละครั้งสามครั้ง ดังที่คุณเห็นด้านล่าง ความแตกต่างค่อนข้างมาก อย่างไรก็ตาม ฉันจะไม่เชื่ออย่างไร้เหตุผลมากเกินไปในการทดสอบเหล่านี้ เนื่องจากผลลัพธ์จะแตกต่างกันในการทดสอบทุกครั้ง ที่กล่าวว่า Linaro นั้นดีกว่า GCC เล็กน้อย แต่ AnTuTu นั้นไม่น่าเชื่อถืออย่างที่คุณคิด
จีซีซี
ลินาโร
การทดสอบต่อไปนี้ดำเนินการด้วย 3DMark เพื่อดูว่า toolchain สามารถส่งผลกระทบต่อประสิทธิภาพกราฟิกหรือไม่ ความแตกต่างนั้นสำคัญกว่า Antutu เสียอีก คุณอาจได้รับ FPS เล็กน้อยด้วย GCC แต่ความราบรื่นโดยรวมจะดีกว่าเมื่อใช้ Linaro คะแนนก็สูงขึ้นนิดหน่อยเช่นกัน
จีซีซี
ลินาโร
การทดสอบครั้งสุดท้ายดำเนินการโดยใช้เกม Asphalt 8: Airborne ด้านล่างนี้ คุณสามารถดูวิดีโอสองรายการของเกมที่ทำงานบน toolchain ทั้งสองรายการ ตัวแรกสร้างด้วย Linaro ในขณะที่ตัวที่สองสร้างด้วย GCC โดยส่วนตัวแล้ว ฉันคิดว่า Linaro รู้สึกนุ่มนวลกว่า GCC เล็กน้อย แต่นั่นอาจเป็นเพียงผลของยาหลอกเนื่องจากนี่ไม่ใช่การทดสอบแบบ double-blind เคอร์เนลทั้งสองมีในสต็อกและปราศจากการปรับแต่ง การโอเวอร์คล็อก และการปรับแต่งแฟนซีอื่น ๆ เพื่อปรับปรุงประสิทธิภาพ
//www.youtube.com/embed/BZRZenaNr9A
Linaro ดีกว่าไหม?
แม้ว่าฉันจะไม่เชื่อในตอนแรก แต่ฉันต้องยอมรับว่า Linaro ดูเหมือนจะเป็นตัวเลือกที่ดีกว่า GCCat อย่างน้อยก็ในด้านการกำหนดค่าฮาร์ดแวร์ของฉัน ระบบปฏิบัติการให้ความรู้สึกตอบสนองเร็วขึ้นและเร็วกว่าตอนที่สร้างโดยใช้ GCC อย่างไรก็ตาม GCC ยังคงแข็งแกร่ง ดังนั้นหากคุณต้องการความเสถียรขั้นสูงสุด GCC ก็อาจยังเป็นตัวเลือกที่ดีที่สุด
ในตอนต่อไป ฉันจะพยายามเปรียบเทียบ Toolchains อื่นๆ เช่น SaberMod และ Linaro 4.8 โปรดแจ้งให้เราทราบเกี่ยวกับ toolchains ที่คุณชื่นชอบในความคิดเห็นด้านล่าง และถ้าคุณต้องการให้เราทดสอบ toolchains อื่น ๆ โปรดบอกมา!