ความแตกต่างของประสิทธิภาพระหว่างการคอมไพล์และการแจกแจงลินุกซ์ไบนารี / แพ็คเกจ


14

ฉันกำลังค้นหาบนอินเทอร์เน็ตมากมายและไม่สามารถหาคำตอบที่แน่นอนได้

มี distros เช่น Gentoo (หรือ FreeBSD) ซึ่งไม่ได้มาพร้อมกับไบนารี แต่มีรหัสแหล่งที่มาสำหรับแพ็คเกจ (พอร์ต) เท่านั้น

ส่วนใหญ่ของ distros ใช้ backages ไบนารี (เดเบียน ฯลฯ )

คำถามแรก: ฉันสามารถเพิ่มความเร็วได้เท่าไหร่จากแพ็คเกจที่คอมไพล์แล้ว? ฉันสามารถเพิ่มความเร็วได้เท่าไหร่จากแพ็คเกจโลกแห่งความจริงเช่น apache หรือ mysql คำค้นหาคือต่อวินาที?

คำถามที่สอง: แพ็คเกจไบนารีหมายความว่าไม่ได้ใช้คำสั่ง CPU ใด ๆ ที่เปิดตัวหลังจาก CPU AMD 64 บิตตัวแรก ด้วยแพ็คเกจ 32 บิตหมายความว่าแพคเกจจะทำงานบน 386 และโดยทั่วไปจะไม่ใช้คำสั่ง CPU สมัยใหม่ส่วนใหญ่ใช่หรือไม่

ข้อมูลเพิ่มเติม:

  • ฉันไม่ได้พูดถึงเดสก์ท็อป แต่เป็นสภาพแวดล้อมเซิร์ฟเวอร์
  • ฉันไม่สนใจเวลาที่รวบรวม
  • ฉันมีเซิร์ฟเวอร์มากกว่าดังนั้นความเร็วที่เพิ่มขึ้นมากกว่า 15% จึงคุ้มค่าสำหรับการใช้แพ็คเกจซอร์สโค้ด
  • กรุณาไม่มี flamewars

1
เพียงเพื่อแก้ไขข้อสันนิษฐานที่ผิด: FreeBSD มาพร้อมกับทรีของพอร์ต (ต้นทาง) และด้วยแพ็คเกจไบนารี ดูและman (1) pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/
Hennes

คำตอบ:


7

ความแตกต่างของประสิทธิภาพจะอยู่ในเกือบทุกกรณีน้อยที่สุดและไม่คุ้มค่า เหตุผลที่ดีในการใช้การแจกแจงต้นฉบับ (ในขณะที่กลิ้งแพ็คเกจไบนารีของคุณเองเนื่องจากระบบ bindist ของ gentoo อนุญาต) ได้แก่ :

  • การปรับใช้แพทช์กำหนดเองของคุณเอง
  • ปรับแต่งเคอร์เนลของคุณได้อย่างง่ายดาย
  • ทำแพ็กเกจอัพเดตของคุณเอง

หากคุณไม่ได้ทำสิ่งเหล่านี้คุณไม่จำเป็นต้องมีการกระจายแหล่งที่มา สำหรับการใช้งานส่วนตัวพวกเขาสะดวกมากเพราะมันช่วยให้คุณสามารถอัพเกรดสิ่งต่าง ๆ ได้ตามต้องการโดยไม่ต้องกังวลมากเกินไปเกี่ยวกับความเข้ากันได้ของไบนารีซึ่งไม่ใช่เรื่องที่ฉันเห็นบ่อยในการตั้งค่าขององค์กร

น่าสังเกตว่าคุณสามารถทำสิ่งเหล่านี้ได้ด้วยการแจกแจงแบบไบนารีเช่นกันโดยทำแพ็คเกจ RPM ของคุณเองหรืออะไรก็ตาม ค่าใช้จ่ายในการจัดการใกล้เคียงกัน

โดยทั่วไปคุณจะไม่เห็นการเพิ่มความเร็ว 15% โดยการรวบรวมจากแหล่งที่มา ฉันไม่ชอบที่จะประเมินว่าสูงถึง 5% ในกรณีที่สมเหตุสมผล รวบรวมจากแหล่งทำให้คุณได้รับสิ่งที่สอง:

  • คุณได้ใช้คอมไพเลอร์เวอร์ชั่นที่คุณต้องการ
  • คุณสามารถสั่งให้คอมไพเลอร์สร้างคำแนะนำจากส่วนขยาย ISA ที่ไม่ได้ใช้ในแพ็คเกจการแจกแจงแบบไบนารีเช่น AESNI และ AVX

อย่างไรก็ตามคอมไพเลอร์ไม่ค่อยสร้างสิ่งเหล่านี้จริง ๆ และการประหยัดโดยรวมจากการใช้งานนั้นโดยทั่วไปจะน้อยมากเมื่อประสิทธิภาพของแอปพลิเคชันถูกนำมาใช้ทั้งหมด สิ่งต่างๆเช่นการเข้าถึง RAM (และเวลาแฝง) และเวลาแฝงดิสก์และอุปกรณ์เป็นปัจจัยที่ใหญ่กว่ามากและคุณควรเริ่มต้นที่นั่น

แอปพลิเคชั่นที่อาจได้รับประโยชน์จากการรวบรวมแบบกำหนดเองที่จะทำงานบน Intel Core i7 หรือ i5 ที่ค่อนข้างใหม่ล่าสุดนั้นรวมถึงแอพที่ทำคณิตศาสตร์แบบเวกเตอร์จำนวนมากและแอพที่มีการเข้ารหัสและถอดรหัส AES จำนวนมาก หากคุณต้องการใช้ Intel DRBG คุณจะต้องทำเช่นนี้ในปัจจุบัน

หากไม่มีสิ่งใดที่ตรงกับคุณคุณจะมีความสุขมากกับการแจกแจงแบบเดเบียนหรือหมวกสีแดงและจะมีค่าใช้จ่ายในการบำรุงรักษาน้อยลง


9

คำตอบสั้น ๆ ... แอปพลิเคชันขนาดใหญ่และความเร็ว / ความหน่วงแฝงจำนวนมากทำงานบนการแจกแจงแบบมาตรฐาน Red Hat, CentOS, Debian, Ubuntu ... พวกเขาทำงานได้ดีในกรณีส่วนใหญ่ กำไรส่วนใหญ่มาจากการปรับแต่งแอปพลิเคชันเคอร์เนลมาตรฐานและการปรับแต่งระบบปฏิบัติการและโครงสร้างพื้นฐาน

Gentooอาจเสนอการเพิ่มประสิทธิภาพบางอย่าง แต่เปิดประตูสู่การจัดการที่มากขึ้นลดความกังวลใจลดการสนับสนุนผู้ขายและผู้ขับขี่ลดปัญหาความมั่นคงเยาะเย้ยและความกังวลด้านความปลอดภัยที่อาจเกิดขึ้น

ฉันจัดการเซิร์ฟเวอร์ที่ใช้ Gentoo ในสภาพแวดล้อมการค้าทางการเงินความถี่สูง แม้ว่าจะมีประโยชน์ด้านการแสดงเล็กน้อยภายใต้ Gentoo แต่ฉันก็ยังย้ายไปที่ Red Hat และ CentOS ข้อได้เปรียบของ Gentoo บนกระดาษนั้นสามารถเอาชนะได้อย่างง่ายดายด้วยการเลือกฮาร์ดแวร์ที่ชาญฉลาดการสนับสนุนผู้ผลิตเซิร์ฟเวอร์ / การรวมฮาร์ดแวร์ที่ดีกว่าการปรับปรุงอย่างชาญฉลาดโดยวิศวกร Red Hat และเทคโนโลยีที่ลึกลับยิ่งขึ้นเช่นบายพาสเคอร์เนล ...

หากคุณอยู่ในจุดที่ประสิทธิภาพของแอพพลิเคชั่นยอดนิยม (LAMP) เป็นปัญหาโปรดตรวจสอบให้แน่ใจว่าได้ปรับปรุงฮาร์ดแวร์เซิร์ฟเวอร์ของคุณ (ประเภท CPU, เลย์เอาต์ RAM), โครงสร้างเครือข่าย, ระบบตรวจสอบและสามารถระบุปัญหาคอขวด จะลงเส้นทางนี้

คุณจะตีเป็นข้อ จำกัด ผลการดำเนินงานในขณะนี้ ?


5

คะแนนทั้งหมดที่ทำถูกต้องแน่นอน ฉันแค่อยากจะมีปัญหากับแนวคิดที่ว่าการเพิ่มประสิทธิภาพ 5% -15% นั้นไม่สามารถทำได้โดยเฉพาะอย่างยิ่งกับ GCC รุ่นที่ทันสมัยขึ้นอยู่กับสถาปัตยกรรมของ CPU จริง ๆ และใกล้กับฐานที่ใช้เป็นเป้าหมาย สำหรับการแจกแจงแบบไบนารี GCCs -march = native will นอกจากจะใช้ส่วนขยาย ISA แล้วยังเพิ่มประสิทธิภาพสำหรับแคช / ขนาดของสาย L1 และ L2 โค้ดที่จัดเรียงอย่างถูกต้อง (สำหรับ CPU ของคุณ) นั้นเร็วขึ้นมากโดยเฉพาะอย่างยิ่งเมื่อใช้ -flto เพื่อให้คอมไพเลอร์สามารถรู้ทุกสิ่งที่ต้องคำนึงถึง [ขณะนี้แพคเกจบางอย่างใช้งานไม่ได้กับ LTO โชคไม่ดี]

นอกจากนี้การรวบรวมแพ็กเกจที่เลือกด้วย -Ofast นอกเหนือจาก march = native และ LTO สามารถสร้างความแตกต่างที่สำคัญได้

ในอนาคตหากโครงสร้างพื้นฐานของกราไฟท์ GCC นั้นมีความเสถียรซึ่งจะมีศักยภาพในการเพิ่มกำไรมากขึ้น


เรื่องเล็กที่สนับสนุนคำตอบนี้: เกณฑ์มาตรฐานบางอย่างที่ฉันใช้กับไคโรและพิกแมนรวบรวมด้วย-march=nativeซีพียู Skylake (ลูกค้า) นั้นเร็วกว่าการกระจายแบบไบนารี 5 ถึง 20% (แพคเกจเหล่านั้นอาจจะค่อนข้างง่ายสำหรับคอมไพเลอร์อัตโนมัติ vectorize.) เป็นธงที่ดีอีกจะลองเป็น-fno-semantic-interposition -falign-functions
ZachB

4

ขึ้นอยู่กับสิ่งที่คุณต้องการในระบบของคุณและมีโรงเรียนคิดสามแห่งที่นี่ (และเป็นเรื่องจริงสำหรับทั้งฮาร์ดแวร์และซอฟต์แวร์)

ประการแรกที่สำคัญเท่าที่คนส่วนใหญ่ในเอสเอฟไป - คุณต้องการบางสิ่งบางอย่างที่คุณรู้ว่าจะทำงานที่คุณต้องการการสนับสนุนและคุณต้องการตอนนี้ ในกรณีนี้ไปกับระบบที่ใช้ redhat (RHEL ให้การสนับสนุนที่ดีเยี่ยมกับคุณและ centos เป็นชุมชนที่สร้างการกระจาย RHEL ที่ผ่านการทดสอบอย่างดี) อย่างไรก็ตามคุณจะไม่ได้รับข้อมูลล่าสุดและยิ่งใหญ่ที่สุด ในหลายกรณีนี่เป็นความจริงของฮาร์ดแวร์

อย่างที่สองคือมุมมอง 'กลางถนน' ซึ่งเป็นพื้นกลาง - ไปกับบางสิ่งเช่นอูบุนตู คุณต้องการแพคเกจใหม่ (ที่ค่าใช้จ่ายเล็กน้อยของความมั่นคงหินแข็งที่สุด) คุณต้องการการติดตั้งและสิ่งที่ดี

ในบางกรณีคนไม่ทำงานเป็นปัญหา แต่คุณมีแพคเกจใหม่และสิ่งที่มีการทดสอบพอสมควร แม้ว่า Ubuntu จะมีความเกลียดชังเป็นอย่างมาก แต่ก็เป็นการประนีประนอมที่ดีระหว่างความง่ายในการติดตั้งและแพ็คเกจใหม่ที่สมเหตุสมผล Debian อาจเป็นตัวเลือกที่ค่อนข้างอนุรักษ์นิยมมากกว่าเล็กน้อย วันนี้คุณสามารถตั้งค่า Ubuntu ด้วยเคอร์เนล latency ต่ำออกจากกล่อง ฉันมักจะรู้สึกว่าอูบุนตูและเดเบียนทำงานให้ฉัน แต่ ymmv สถานที่มากมายที่ใช้เซิร์ฟเวอร์จำนวนมากเช่น facebook และ google go สำหรับตัวเลือกนี้

ในที่สุดก็มีการแจกแจงตามแหล่งที่มา การตั้งค่าเริ่มต้นในกรณีส่วนใหญ่จะเจ็บปวดที่สุดในด้านหลัง คุณทำผิดพลาดกับการตั้งค่าเคอร์เนลของคุณ? โอ๊ะใช้เวลาคอมไพล์ใหม่สองสามชั่วโมง คุณไม่ได้รับตัวติดตั้ง - นั่นคือสำหรับ n00bs คุณมักจะมีแอพพลิเคชั่นตกเลือดและตัวเลือกในการคอมไพล์ตามที่คุณต้องการ (ซึ่งรวมถึงความสามารถในการเลือกออพติไมซ์สำหรับความเร็วหรือการใช้หน่วยความจำเป็นต้น) และการวางจำหน่าย หากคุณมีความเฉพาะเจาะจงมาก ๆ ความต้องการที่เป็นความลับนั้นยอดเยี่ยมมาก หากคุณต้องการที่จะแผ่ออกไปหลายสิบระบบและต้องการที่จะทำให้มันโดยอัตโนมัติ ... โชคดี การกระจายตามแหล่งที่มาก็ไม่ได้ปรับขนาดเช่นกัน คุณได้รับความยืดหยุ่นอย่างมาก * ความเร็วบางพิเศษ ** แต่ไม่สามารถบำรุงรักษาได้ในระดับเดียวกับ IMO ที่ใช้การกระจายแพคเกจ คุณไม่ได้น่าจะได้รับ 15% ความเร็วพิเศษและคุณมีแนวโน้มที่จะจบลงด้วยการสูญเสียเวลาพยายามที่จะปรับแต่งธงรวบรวมสำหรับฮาร์ดแวร์ของคุณและถ้าคุณระเบียบบางสิ่งบางอย่างขึ้นใช้เวลาทำงานสิ่งที่ว่าล้มเหลว

ป้อนคำอธิบายรูปภาพที่นี่

BSDs มีแยกครอบครัวของระบบปฏิบัติการ ชาวบ้านบางคนสาบานกับพวกเขา (อย่างน้อยหนึ่งห้องธรรมดาปกติเป็นผู้ใช้ freebsd) และ BSDs ที่แตกต่างกันมีจุดเน้นที่แตกต่างกัน - ตัวอย่างเช่น openbsd คือความปลอดภัยที่ถูกครอบงำและ freebsd เป็นหนึ่งใน 'หลัก' พวกเขาอาจไม่ในบางกรณีมีฮาร์ดแวร์สนับสนุน linux ประเภทเดียวกัน แต่ขึ้นอยู่กับปัจจัยหลายประการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.