เมื่อวานฉันโพสต์การวัดประสิทธิภาพ จากการกระจาย Linux หกตัวบน HP Dev One ซึ่งเป็นแล็ปท็อป Linux ใหม่ที่น่าตื่นเต้นซึ่งเปิดตัวโดย HP โดยร่วมมือกับ System76 ซึ่งใช้การแจกจ่าย Pop!_OS จากเกณฑ์มาตรฐานเหล่านั้น ข้อค้นพบที่แปลกประหลาดประการหนึ่งคือประสิทธิภาพการบีบอัด Zstd บน Arch Linux ทำได้เพียงดูด แต่นักพัฒนาที่สนใจบางคนเข้ามาและพบว่าผู้กระทำผิดค่อนข้างแปลกประหลาดว่าทำไมประสิทธิภาพ Zstd ของพวกเขาจึงต่ำเมื่อเทียบกับลีนุกซ์รุ่นอื่นในรุ่นเดียวกัน
ประสิทธิภาพของไบนารี zstd ที่จัดส่งโดย Arch Linux พบว่าทำงานช้าอย่างมากเมื่อเทียบกับลีนุกซ์รุ่นอื่นๆ บนแล็ปท็อปเครื่องเดียวกันนี้… ช้ากว่าลีนุกซ์รุ่นอื่นๆ ที่ทดสอบบนฮาร์ดแวร์เดียวกันและการกระจายทั้งหมดโดยใช้ ไบนารี Zstd ที่ระบบจัดหาให้สำหรับการวัดประสิทธิภาพเหล่านั้น:
แต่ผลลัพธ์นั้นสามารถทำซ้ำได้ ทำซ้ำหลายครั้ง และฉันก็ยืนอยู่ข้างหลังเกณฑ์มาตรฐาน แม้ว่าจะยืดเยื้อไปจนสุดทาง (ลองปิด ad-blocker ของคุณซะ! หรือเข้าร่วม Phoronix Premium เพื่อการรับชมแบบไม่มีโฆษณาและสิทธิประโยชน์อื่นๆ) ฉันไม่มีเวลา/ทรัพยากรที่จะเจาะลึกลงไปในประเด็นนั้นโดยเฉพาะ โดยเป็นประจำ (เกือบทุกวัน) พบกับคุณลักษณะด้านประสิทธิภาพที่คล้ายคลึงกันกับฮาร์ดแวร์/ซอฟต์แวร์ที่แตกต่างกันบน Linux
โชคดีที่นักพัฒนา Arch Linux ที่กระตือรือร้นบางคนได้ตรวจสอบบทความนี้จากบทความนี้ และพบเหตุผลที่น่าแปลกใจที่ประสิทธิภาพ Zstd ของพวกเขาช้ามาก:
ระบบบิลด์ หือ? ไม่ ไม่ใช่ความแตกต่างของแฟล็กคอมไพเลอร์สำหรับปรับแต่งการเพิ่มประสิทธิภาพหรือระดับ… Arch Linux ใช้ระบบสร้าง CMake ของ Zstd เพื่อสร้างแพ็คเกจในขณะที่ Ubuntu และลีนุกซ์รุ่นอื่น ๆ มักใช้ Makefile build ธรรมดาที่จัดส่งโดย Zstd Zstd ยังจัดส่งการสนับสนุนระบบสร้าง Meson ด้วย นักพัฒนา Arch Linux พบว่าใช้ CMake สำหรับสร้าง Zstd ทำให้ความเร็วการบีบอัด Zstd ช้าลง แต่ถ้าใช้ยี่ห้อทั่วไปหรือ Meson สร้างประสิทธิภาพก็เป็นไปตามที่คาดไว้
แล้วระบบบิลด์จะขัดขวางการทำงานของไบนารี่ที่เกิดขึ้นได้อย่างไร หากไม่ใช่ความแตกต่างของระดับการปรับให้เหมาะสม นี่คือจุดที่แปลกประหลาดยิ่งขึ้นไปอีก และอีกตัวอย่างหนึ่งของผลกระทบที่สนับสนุนระบบบิลด์หลายระบบสามารถมีต่อโปรเจ็กต์…
ระบบบิลด์ CMake สำหรับ Zstd จบลงด้วยการเพิ่ม”-std=c99“ซึ่งระบบบิลด์อื่นๆ ไม่ได้ระบุโดยใช้มาตรฐาน C99 ค่อนข้างน่าแปลกที่การระบุมาตรฐาน C99 นั้นเป็นสิ่งที่พบว่าท้ายที่สุดแล้วทำให้เกิดความแตกต่างด้านประสิทธิภาพอย่างมาก… แต่สำหรับสาเหตุที่การระบุ C99 ทำให้เกิดความแตกต่างด้านประสิทธิภาพที่มากขึ้น อาจเป็นไปได้ว่าเกิดจากปัญหา/ความแตกต่างของเธรด แต่ในขณะนี้ยังไม่มี ดูเหมือนจะไม่ใช่คำอธิบายที่ชัดเจน ไม่ว่าในกรณีใด มันเป็นจุดบกพร่องของ Zstd ที่มีพฤติกรรมพื้นฐานที่แตกต่างกันไปตามระบบบิลด์ที่รองรับที่ใช้
นักพัฒนาได้ทดสอบบิลด์ที่ใช้ CMake โดยไม่ระบุ”-std=c99″และให้ประสิทธิภาพที่คล้ายคลึงกันกับไบนารี Zstd ที่สร้างโดยระบบบิลด์ทางเลือก อีกทางหนึ่ง การตั้งค่า C11 แทนก็โอเคเช่นกัน
งานที่ยอดเยี่ยมที่เกี่ยวข้องกับนักพัฒนาซอฟต์แวร์ Arch Linux (Arvid Norlander, Antonio Rojas ฯลฯ) ได้นำเสนอผ่าน รายงานข้อบกพร่องของ Arch Linux และได้รายงานไปที่ Zstd ว่าเป็นปัญหาต้นน้ำ หวังว่า Zstd จะเปลี่ยนเวอร์ชันภาษา C มาตรฐานสำหรับ CMake ให้ตรงกับพฤติกรรมของระบบบิลด์อื่น ๆ หรือรวมการจัดการสิ่งต่าง ๆ เข้าด้วยกันได้ดียิ่งขึ้น
อย่างน้อย Arch Linux ก็มีวิธีแก้ปัญหาเบื้องต้น ดังนั้นน่าจะสามารถแก้ไขปัญหาให้กับผู้ใช้ได้ในเร็วๆ นี้ เพื่อให้มีประสิทธิภาพที่ดีขึ้นมาก