Lợi ích của mô-đun kernel biên dịch bên trong kernel?


Câu trả lời:


7

Nó phụ thuộc. Nếu bạn có một lượng bộ nhớ nhỏ, việc sử dụng các mô-đun có thể cải thiện sơ yếu lý lịch vì chúng không được tải lại mỗi lần (tôi thấy nó có ý nghĩa trên 2 GiB RAM nhưng không phải trên 4 GiB trên ổ cứng truyền thống). Điều này đặc biệt đúng khi do một số lỗi trong mô-đun pin (bất kể được biên dịch hoặc là mô-đun), phải mất rất lâu để bắt đầu (vài phút). Ngay cả khi không có lỗi trên gentoo, tôi đã cố gắng rút ngắn thời gian (được báo cáo bởi systemd-analysis) từ 33 đến 18 chỉ bằng cách thay đổi từ kernel được biên dịch tĩnh sang các mô-đun - 'thật đáng ngạc nhiên' khi bắt đầu kernel thay đổi từ 9 giây thành 1,5 giây.

Ngoài ra, khi bạn không biết bạn sẽ sử dụng phần cứng nào, các mô-đun rõ ràng có lợi.

Tái bút Bạn có thể biên dịch ngay cả các trình điều khiển quan trọng dưới dạng các mô-đun miễn là bạn đưa chúng vào initrd. Ví dụ: các bản phân phối sẽ bao gồm hệ thống tập tin của /, trình điều khiển của ổ cứng, v.v. trong initrd khi cài đặt.


Bạn có nhớ đọc câu trả lời này một lần nữa, cẩn thận. Tôi sẽ có, nhưng tôi không biết bạn muốn nói gì tại chỗ, ví dụ ... trên các ổ cứng truyền thống .
tshepang

Tôi có nghĩa là những người từ tính (tôi không có bất kỳ kinh nghiệm với SSD).
Maciej Piechotka

Tôi đã cố gắng để làm cho điều này dễ đọc hơn. Bạn có thể kiểm tra nếu tôi không làm hỏng nó lên.
tshepang

Cảm ơn. Tôi vừa kết thúc buổi thi nên tôi không có thời gian để xem nó.
Maciej Piechotka

7

Theo tôi biết, không có sự khác biệt về tốc độ.

Tôi nghĩ rằng bạn sẽ đạt được một vài kB bộ nhớ kernel vì độ chi tiết của phân bổ là một trang, do đó, trên kiến ​​trúc thông thường, mỗi mô-đun lãng phí trung bình khoảng 2kB (½ trang) cho mỗi mô-đun. Ngay cả trên các hệ thống nhúng, điều đó hầu như không đáng kể. Bạn cũng có được một ít dung lượng đĩa vì các mô-đun có thể được nén cùng lúc với kernel; có thể phù hợp hơn trong các hệ thống nhúng với ít bộ nhớ.

Nếu bạn có thể phân phối hoàn toàn với các mô-đun, bạn sẽ tiết kiệm được một ít bộ nhớ kernel (không cần bộ tải mô-đun), dung lượng đĩa (không cần các tiện ích mô-đun) và độ phức tạp của hệ thống (không cần bao gồm tải mô-đun như một tính năng trong bản phân phối của bạn ). Những điểm này khá hấp dẫn trong một số thiết kế nhúng mà phần cứng không thể mở rộng.


Để truy cập một biểu tượng trong một mô-đun chậm hơn một chút (có liên quan đến sự gián tiếp). Nhưng tính linh hoạt được thêm vào (có thể tải / hủy theo yêu cầu, không phải xây dựng hạt nhân được điều chỉnh bằng tay cho phần cứng chính xác đang sử dụng, ...) rất đáng giá (trừ khi bạn đang xây dựng cho một môi trường rất hạn chế không có Sẽ không bao giờ thay đổi).
vonbrand

4

Một vài lợi ích tiềm năng. Hiệu suất là một trong những tranh cãi. Bạn sẽ tránh được một số chi phí thời gian chạy liên quan đến trình tải động, nhưng tôi nghi ngờ đó là vấn đề lớn trừ khi bạn phụ thuộc vào lịch trình thời gian thực.

Nếu bạn đang tận dụng các trang lớn trên hệ thống của mình, thì có lẽ việc tạo một hình ảnh hạt nhân tĩnh lớn hơn có nghĩa là bạn sử dụng bộ đệm mô tả trang hiệu quả hơn. Một số hệ thống sẽ 'lồng' kernel để nó đóng gói chặt chẽ vào một địa phương bộ nhớ, điều này có thể làm giảm bớt một số độ trễ do lỗi nhỏ và có thể là lỗi chính của trang.

Về mặt kiến ​​trúc, nó có thể phù hợp với bạn để cung cấp Một hình ảnh lớn, cho rằng ít mô-đun độc lập sẽ dễ bảo trì hơn và việc mất tính linh hoạt là không quan trọng. Rất nhiều loại lý luận mạo hiểm vào các vấn đề về phong cách và thực hành.


2

Đôi khi nó là cần thiết. Nếu bạn biên dịch một số trình điều khiển quan trọng (ví dụ trình điều khiển SCSI) dưới dạng mô-đun, hệ thống của bạn sẽ không khởi động.

Một ứng cử viên tuyệt vời khác để không biên dịch dưới dạng một mô-đun là loại hệ thống tập tin của phân vùng gốc. Nếu hạt nhân không hiểu ext3để đọc, /lib/modules/làm thế nào nó sẽ tải các mô-đun từ nó?

Nghĩ về nó theo cách này: để sử dụng các mô-đun, hạt nhân cần biết đủ về hệ thống của bạn để đọc và tải các mô-đun hạt nhân. Sử dụng và thử nghiệm và lỗi :-)


Tôi đang suy nghĩ về một số cải thiện hiệu suất? Có cái nào không?
phunehehe

1
Trong quá khứ, mọi người đã cố gắng tạo ra hạt nhân nhỏ nhất có thể chỉ với những gì được yêu cầu . Ngày nay điều này đã thay đổi phần lớn. Trong thực tế, bất cứ khi nào bạn tải một mô-đun lần đầu tiên, bạn sẽ phải chịu một cú đánh hiệu suất nhỏ. Điều đó không có nghĩa là bạn nên biên dịch mọi thứ trong kernel :-) Xem điều này: articleinput.com/e/a/title/ mẹo
nc3b

cho trình điều khiển không quan trọng hoặc chức năng là có lợi ích gì? ví dụ nếu tôi chỉ muốn sử dụng thiết bị đầu cuối và bó tiện ích mạng mà không cần chức năng hoặc chức năng khác. Có lợi ích gì không nếu tôi chỉ biên dịch tất cả các mô-đun và trình điều khiển cần thiết bên trong kernel mà không có mô-đun có thể tải?
uray

3
Bò đực. Một hệ thống sẽ khởi động tốt với trình điều khiển SCSI dưới dạng mô-đun trong initrd. Đó là những gì họ đang làm.
wzzrd

Có ... với điều kiện mô-đun cho đó là trong một initrd mà hạt nhân có thể hiểu được ...
Dagelf

2

Tôi biên dịch tĩnh mọi trình điều khiển cho phần cứng tích hợp bên trong kernel. Ngoại lệ sẽ là phần cứng không cố định (ví dụ như phần cứng được kết nối với usb).

Vì cấu hình phần cứng của tôi không có khả năng thay đổi sớm, tôi không bận tâm đến các mô-đun.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.