ประโยชน์ของการรวบรวมโมดูลเคอร์เนลลงในเคอร์เนลคืออะไร (แทนที่จะเป็นโมดูลที่โหลดได้)
ประโยชน์ของการรวบรวมโมดูลเคอร์เนลลงในเคอร์เนลคืออะไร (แทนที่จะเป็นโมดูลที่โหลดได้)
คำตอบ:
มันขึ้นอยู่กับ. หากคุณมีหน่วยความจำเพียงเล็กน้อยการใช้โมดูลอาจปรับปรุงเรซูเม่เนื่องจากไม่ได้โหลดซ้ำทุกครั้ง (ฉันพบว่ามันสำคัญกับ RAM 2 GiB แต่ไม่ใช่ใน 4 GiB สำหรับฮาร์ดไดรฟ์แบบดั้งเดิม) นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งเมื่อเกิดข้อผิดพลาดบางอย่างในโมดูลแบตเตอรี่ (ไม่ว่าจะเป็นคอมไพล์หรือโมดูล) มันใช้เวลานานในการเริ่มต้น (หลายนาที) แม้ไม่มีข้อผิดพลาดใน gentoo ฉันจัดการเพื่อลดเวลา (รายงานโดยsystemd-analysis
) จาก 33s เป็น 18s เพียงแค่เปลี่ยนจากเคอร์เนลที่รวบรวมแบบคงที่เป็นโมดูล - 'แปลกใจ' การเริ่มต้นของเคอร์เนลเปลี่ยนจาก 9s เป็น 1.5s
นอกจากนี้เมื่อคุณไม่รู้ว่าคุณกำลังใช้ฮาร์ดแวร์ตัวใดโมดูลจะมีประโยชน์อย่างชัดเจน
PS คุณสามารถคอมไพล์ไดร์เวอร์ที่สำคัญแม้เป็นโมดูลตราบใดที่คุณรวมไดรเวอร์เหล่านั้นไว้ใน initrd ตัวอย่างเช่น distros จะรวมถึงระบบไฟล์ของ / ไดรเวอร์ของฮาร์ดไดรฟ์ ฯลฯ ในการเริ่มการติดตั้ง
เท่าที่ฉันรู้ไม่มีความแตกต่างความเร็ว
ฉันคิดว่าคุณจะได้รับหน่วยความจำเคอร์เนลไม่กี่ kB เนื่องจากความละเอียดของการจัดสรรคือหนึ่งหน้าดังนั้นในสถาปัตยกรรมทั่วไปแต่ละโมดูลจะเสียค่าเฉลี่ยประมาณ 2kB (หน้า)) ต่อโมดูล แม้แต่ในระบบฝังตัวนั่นก็แทบจะไม่มีนัยสำคัญ นอกจากนี้คุณยังได้พื้นที่ว่างในดิสก์เพียงเล็กน้อยเนื่องจากโมดูลสามารถบีบอัดได้ในเวลาเดียวกันกับเคอร์เนล ที่สามารถมีความเกี่ยวข้องมากขึ้นในระบบฝังตัวที่มีที่เก็บข้อมูลน้อย
หากคุณสามารถแจกจ่ายกับโมดูลทั้งหมดคุณสามารถบันทึกหน่วยความจำเคอร์เนลเล็กน้อย (ไม่จำเป็นต้องใช้ตัวโหลดโมดูล) พื้นที่ดิสก์ (ไม่จำเป็นต้องใช้ยูทิลิตีโมดูล) และความซับซ้อนของระบบ (ไม่จำเป็นต้องรวมโหลดโมดูลเป็นคุณสมบัติในการแจกจ่าย ) ประเด็นเหล่านี้ค่อนข้างน่าสนใจในการออกแบบที่ฝังไว้ซึ่งฮาร์ดแวร์ไม่สามารถขยายได้
ผลประโยชน์ที่เป็นคู่ ประสิทธิภาพเป็นสิ่งที่พิสูจน์ได้ คุณจะหลีกเลี่ยงค่าใช้จ่ายรันไทม์บางส่วนที่เกี่ยวข้องกับโหลดเดอร์แบบไดนามิก แต่ฉันสงสัยว่าเป็นเรื่องใหญ่เว้นแต่คุณจะขึ้นอยู่กับตัวกำหนดตารางเวลาแบบเรียลไทม์
หากคุณใช้ประโยชน์จากเพจขนาดใหญ่ในระบบของคุณบางทีการสร้างอิมเมจเคอร์เนลแบบคงที่ที่มีขนาดใหญ่ขึ้นหมายความว่าคุณใช้แคช descriptor ของเพจได้อย่างมีประสิทธิภาพมากขึ้น ระบบบางระบบจะ 'จับ' เคอร์เนลเพื่อให้แพ็คแน่นเข้าไปในหน่วยความจำท้องถิ่นหนึ่งซึ่งสามารถลดจำนวนการหน่วงเวลาอันเนื่องมาจากผู้เยาว์และอาจเป็นข้อผิดพลาดที่สำคัญ
มันอาจเหมาะกับคุณในเชิงสถาปัตยกรรมในการส่ง One Big Image โดยยืนยันว่าโมดูลอิสระที่น้อยลงนั้นง่ายต่อการบำรุงรักษาและการสูญเสียความยืดหยุ่นไม่สำคัญ การใช้เหตุผลแบบนี้มีมากในเรื่องของสไตล์และการฝึกฝน
บางครั้งก็จำเป็น หากคุณรวบรวมไดรเวอร์สำคัญบางตัว(เช่นไดรเวอร์ SCSI) เป็นโมดูลระบบของคุณจะไม่บูต
ตัวเลือกที่ยอดเยี่ยมอีกอันที่ไม่ได้คอมไพล์เป็นโมดูลคือประเภทของระบบไฟล์ของพาร์ติชั่นรูท ถ้าเมล็ดไม่เข้าใจext3
ในการอ่าน/lib/modules/
วิธีการที่จะโหลดโมดูลจากมันได้หรือไม่
คิดแบบนี้: การใช้โมดูลเคอร์เนลจำเป็นต้องรู้มากพอเกี่ยวกับระบบของคุณเพื่ออ่านและโหลดโมดูลเคอร์เนล ใช้สิ่งนั้นและลองผิดลองถูก :-)
ฉันรวบรวมไดรเวอร์ทุกตัวสำหรับฮาร์ดแวร์ในตัวภายในเคอร์เนล ข้อยกเว้นจะเป็นฮาร์ดแวร์ที่ไม่ถาวร (ตัวอย่างเช่นฮาร์ดแวร์ที่เชื่อมต่อ usb)
เนื่องจากการกำหนดค่าฮาร์ดแวร์ของฉันไม่น่าจะเปลี่ยนแปลงได้ตลอดเวลาในเร็ว ๆ นี้ฉันจึงไม่สนใจโมดูล