커널 내부에서 컴파일 된 커널 모듈의 장점은 무엇입니까?


답변:


7

따라 다릅니다. 적은 양의 메모리가 있다면 모듈을 사용하면 매번 다시로드되지 않기 때문에 이력서가 향상 될 수 있습니다 (2GB RAM은 중요하지만 전통적인 하드 드라이브에서는 4GiB가 아니라는 것을 알았습니다). 배터리 모듈에 버그가 있거나 (컴파일 또는 모듈로 상관없이) 시작하는 데 시간이 오래 걸렸을 때 (몇 분) 특히 그렇습니다. 젠투에 버그가 없어도 systemd-analysis정적으로 컴파일 된 커널에서 모듈로 변경하여 33 초에서 18 초로 시간을 단축 할 수있었습니다. '놀랍게도'커널 시작이 9 초에서 1.5 초로 변경되었습니다.

또한 어떤 하드웨어를 사용할지 모르면 모듈이 유리합니다.

추신. initrd에 포함시키는 한 중요한 드라이버도 모듈로 컴파일 할 수 있습니다. 예를 들어, 배포판에는 설치시 initrd에있는 /의 파일 시스템, 하드 드라이브의 드라이버 등이 포함됩니다.


이 답변을주의 깊게 다시 읽으시겠습니까? 예전의 하드 드라이브 와 같이 어떤 말을해야할지 모르겠습니다 .
tshepang

나는 자기를 의미했습니다 (SSD에 대한 경험이 없습니다).
Maciej Piechotka

나는 이것을 더 읽기 쉽게하려고 노력했다. 내가 망치지 않았는지 확인할 수 있습니까?
tshepang

감사. 방금 시험 세션을 마쳤으므로 시간을 보지 못했습니다.
Maciej Piechotka

7

내가 아는 한 속도 차이는 없습니다.

할당의 세분성이 한 페이지이므로 몇 kB의 커널 메모리를 얻을 수 있다고 생각합니다. 따라서 일반적인 아키텍처에서는 각 모듈이 모듈 당 평균 2kB (½ 페이지)를 낭비합니다. 임베디드 시스템에서도 그다지 중요하지 않습니다. 커널과 같은 방식으로 모듈을 압축 할 수 있으므로 디스크 공간이 약간 확보됩니다. 스토리지가 적은 임베디드 시스템에서 더 관련성이 있습니다.

모듈을 모두 사용할 수 없다면 약간의 커널 메모리 (모듈 로더 필요 없음), 디스크 공간 (모듈 유틸리티 필요 없음) 및 시스템 복잡성 (배포에 기능으로 모듈로드를 포함 할 필요 없음)을 절약 할 수 있습니다 ). 이러한 점은 하드웨어를 확장 할 수없는 일부 임베디드 디자인에서 매우 매력적입니다.


모듈에서 심볼에 액세스하는 것은 조금 느립니다 (지시가 포함됨). 그러나 추가 유연성 (필요에 따라로드 / 언로드 가능, 사용중인 정확한 하드웨어를 위해 수동으로 커스터마이징 된 커널을 구축 할 필요는 없음)은 가치가 있습니다. 절대 변하지 않습니다).
vonbrand

4

몇 가지 잠재적 이점. 성능은 논쟁의 여지가 있습니다. 동적 로더와 관련된 런타임 오버 헤드를 피할 수는 있지만 실시간 스케줄러에 의존하지 않는 한 큰 문제가 될 것입니다.

시스템에서 큰 페이지를 사용하는 경우 더 큰 정적 커널 이미지를 작성하면 페이지 디스크립터 캐시를보다 효율적으로 사용할 수 있습니다. 일부 시스템은 커널을 '케이지 (cage)'하여 하나의 메모리 위치로 단단히 묶어 사소한 페이지 오류로 인해 약간의 지연을 완화 할 수 있습니다.

하나의 Big Image를 제공하는 것이 아키텍처에 적합 할 것입니다. 독립 모듈 수가 적을수록 유지 관리가 쉽고 유연성의 손실은 중요하지 않습니다. 이런 종류의 추론은 스타일과 실천의 문제로 모험을합니다.


2

때로는 필요합니다. 중요한 드라이버 (예 : SCSI 드라이버)를 모듈로 컴파일하면 시스템이 부팅되지 않습니다.

모듈로 컴파일 하지 않는 또 다른 훌륭한 후보 는 루트 파티션의 파일 시스템 유형입니다. 커널이 이해하지 않는 경우 ext3읽기 /lib/modules/어떻게 그것에서 모듈을로드 할 것인가?

모듈을 사용하려면 커널은 커널 모듈을 읽고로드하기 위해 시스템에 대해 충분히 알아야합니다. 그것을 사용하고 시행 착오 :-)


내가 생각하고있어 약간의 성능 향상을? 전혀 있습니까?
phunehehe

1
과거에는 사람들이 필요한 것만으로 가능한 가장 작은 커널을 만들기 위해 많은 노력을 기울 였습니다. 오늘날 이것은 크게 바뀌 었습니다. 실제로 모듈을 처음로드 할 때마다 약간의 성능 저하가 발생합니다. 커널에서 모든 것을 컴파일해야한다는 것은 아닙니다. :-) 이것을보십시오 : articleinput.com/e/a/title/…
nc3b

중요하지 않은 드라이버 또는 기능에 대해 어떤 이점이 있습니까? 예를 들어 다른 필요 또는 기능없이 터미널 및 네트워크 유틸리티를 사용하려는 경우. 로드 가능한 모듈없이 커널 내에서 필요한 모든 모듈과 드라이버를 컴파일하면 어떤 이점이 있습니까?
uray September

3
황소. 시스템은 SCSI 드라이버를 initrd의 모듈로 부팅 할 수 있습니다. 그것이 그들이하는 것입니다.
wzzrd

예. 커널이 이해할 수있는 initrd에있는 모듈을 제공 한 경우 ...
Dagelf

2

커널 내부의 내장 하드웨어에 대한 모든 드라이버를 정적으로 컴파일합니다. 영구적이지 않은 하드웨어는 예외입니다 (예 : USB 연결 하드웨어).

하드웨어 구성이 곧 변경되지 않을 것이므로 모듈에 신경 쓰지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.