ประโยชน์ของโมดูลเคอร์เนลที่คอมไพล์ภายในเคอร์เนล?


19

ประโยชน์ของการรวบรวมโมดูลเคอร์เนลลงในเคอร์เนลคืออะไร (แทนที่จะเป็นโมดูลที่โหลดได้)


คำตอบ:


7

มันขึ้นอยู่กับ. หากคุณมีหน่วยความจำเพียงเล็กน้อยการใช้โมดูลอาจปรับปรุงเรซูเม่เนื่องจากไม่ได้โหลดซ้ำทุกครั้ง (ฉันพบว่ามันสำคัญกับ RAM 2 GiB แต่ไม่ใช่ใน 4 GiB สำหรับฮาร์ดไดรฟ์แบบดั้งเดิม) นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งเมื่อเกิดข้อผิดพลาดบางอย่างในโมดูลแบตเตอรี่ (ไม่ว่าจะเป็นคอมไพล์หรือโมดูล) มันใช้เวลานานในการเริ่มต้น (หลายนาที) แม้ไม่มีข้อผิดพลาดใน gentoo ฉันจัดการเพื่อลดเวลา (รายงานโดยsystemd-analysis) จาก 33s เป็น 18s เพียงแค่เปลี่ยนจากเคอร์เนลที่รวบรวมแบบคงที่เป็นโมดูล - 'แปลกใจ' การเริ่มต้นของเคอร์เนลเปลี่ยนจาก 9s เป็น 1.5s

นอกจากนี้เมื่อคุณไม่รู้ว่าคุณกำลังใช้ฮาร์ดแวร์ตัวใดโมดูลจะมีประโยชน์อย่างชัดเจน

PS คุณสามารถคอมไพล์ไดร์เวอร์ที่สำคัญแม้เป็นโมดูลตราบใดที่คุณรวมไดรเวอร์เหล่านั้นไว้ใน initrd ตัวอย่างเช่น distros จะรวมถึงระบบไฟล์ของ / ไดรเวอร์ของฮาร์ดไดรฟ์ ฯลฯ ในการเริ่มการติดตั้ง


คุณอ่านคำตอบนี้อีกครั้งด้วยความระมัดระวังหรือไม่ ฉันจะมี แต่ผมไม่ทราบว่าสิ่งที่คุณหมายถึงว่าในสถานที่เช่น... เมื่อ harddrives
tshepang

ฉันหมายถึงสนามแม่เหล็ก (ฉันไม่มีประสบการณ์กับ SSD)
Maciej Piechotka

ฉันพยายามทำให้อ่านง่ายขึ้น คุณช่วยตรวจสอบได้ไหมว่าฉันไม่ได้ทำผิดพลาด
tshepang

ขอบคุณ ฉันเพิ่งเสร็จสิ้นการสอบดังนั้นฉันจึงไม่มีเวลาดู
Maciej Piechotka

7

เท่าที่ฉันรู้ไม่มีความแตกต่างความเร็ว

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

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


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

4

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

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

มันอาจเหมาะกับคุณในเชิงสถาปัตยกรรมในการส่ง One Big Image โดยยืนยันว่าโมดูลอิสระที่น้อยลงนั้นง่ายต่อการบำรุงรักษาและการสูญเสียความยืดหยุ่นไม่สำคัญ การใช้เหตุผลแบบนี้มีมากในเรื่องของสไตล์และการฝึกฝน


2

บางครั้งก็จำเป็น หากคุณรวบรวมไดรเวอร์สำคัญบางตัว(เช่นไดรเวอร์ SCSI) เป็นโมดูลระบบของคุณจะไม่บูต

ตัวเลือกที่ยอดเยี่ยมอีกอันที่ไม่ได้คอมไพล์เป็นโมดูลคือประเภทของระบบไฟล์ของพาร์ติชั่นรูท ถ้าเมล็ดไม่เข้าใจext3ในการอ่าน/lib/modules/วิธีการที่จะโหลดโมดูลจากมันได้หรือไม่

คิดแบบนี้: การใช้โมดูลเคอร์เนลจำเป็นต้องรู้มากพอเกี่ยวกับระบบของคุณเพื่ออ่านและโหลดโมดูลเคอร์เนล ใช้สิ่งนั้นและลองผิดลองถูก :-)


ฉันคิดเกี่ยวกับบางส่วนประสิทธิภาพการทำงานที่ดีขึ้น? มีใครบ้างไหม?
phunehehe

1
ในคนที่ผ่านมาได้ไปยาวที่ดีในการผลิตเมล็ดเล็กที่สุดมีเพียงสิ่งที่ถูกต้อง วันนี้มีการเปลี่ยนแปลงอย่างมาก ในความเป็นจริงเมื่อใดก็ตามที่คุณโหลดโมดูลครั้งแรกคุณจะได้รับผลกระทบเล็กน้อย ไม่ได้หมายความว่าคุณควรรวบรวมทุกอย่างในเคอร์เนล :-) ดูสิ่งนี้: articleinput.com/e/a/title/ …
nc3b

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

3
วัว. ระบบจะบู๊ตโดยใช้ไดรเวอร์ SCSI เป็นโมดูลใน initrd นั่นคือสิ่งที่พวกเขามีไว้เพื่อ
wzzrd

ใช่ ... จัดทำโมดูลสำหรับสิ่งที่อยู่ใน initrd ที่เคอร์เนลสามารถเข้าใจ ...
Dagelf

2

ฉันรวบรวมไดรเวอร์ทุกตัวสำหรับฮาร์ดแวร์ในตัวภายในเคอร์เนล ข้อยกเว้นจะเป็นฮาร์ดแวร์ที่ไม่ถาวร (ตัวอย่างเช่นฮาร์ดแวร์ที่เชื่อมต่อ usb)

เนื่องจากการกำหนดค่าฮาร์ดแวร์ของฉันไม่น่าจะเปลี่ยนแปลงได้ตลอดเวลาในเร็ว ๆ นี้ฉันจึงไม่สนใจโมดูล

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