Linux 커널을 직접 컴파일하면 어떤 이점이 있나요? 하드웨어에 맞게 맞춤화하면 효율성이 향상될 수 있습니까?
답변1
내 생각에, 자신만의 Linux 커널을 컴파일함으로써 얻을 수 있는 유일한 실제 이점은 다음과 같습니다.
자신만의 Linux 커널을 컴파일하는 방법을 배우게 됩니다.
그것은 당신의 사업이 아닙니다필요어쨌든 더 빠른 속도/메모리/xxx를 위해. 자신이 발전 단계에 있다고 느끼면 이는 매우 귀중한 일입니다. 전체적으로 "오픈 소스"가 무엇인지 더 깊이 이해하고 커널의 다른 부분이 어떻게, 어떤 부분인지 이해하고 싶다면 시도해 보아야 합니다. 단지 3초 더 빠른 부팅 시간을 원한다면... 요점은 무엇입니까... SSD를 구입하십시오. 궁금하다면, 배우고 싶다면 자신만의 커널을 컴파일해 보는 것도 좋고, 아마 많은 혜택을 얻을 수 있을 것입니다.
하지만 자신의 커널을 컴파일하는 것이 적절한 몇 가지 구체적인 이유가 있습니다(일부 사람들이 다른 답변에서 지적했듯이). 일반적으로 이러한 문제는 다음과 같은 특정 결과에 대한 특정 요구로 인해 발생합니다.
- 리소스가 제한된 하드웨어에서 시스템을 가동/실행해야 합니다.
- 패치를 테스트하고 개발자에게 피드백을 제공해야 합니다.
- 충돌을 일으키는 항목을 비활성화해야 합니다.
- 리눅스 커널을 개발해야 해요
- 지원되지 않는 하드웨어에 대한 지원을 활성화해야 합니다.
- 시스템의 현재 한계에 도달했기 때문에 x의 성능을 개선해야 합니다(그리고 내가 무엇을 하고 있는지 알고 있습니다).
문제는 모든 것이 이미 원하는 대로 작동할 때 자신의 커널을 컴파일하면 고유한 이점이 있다고 생각하는 것입니다. 그러나 저는 그렇지 않다고 생각합니다. 필요하지 않은 항목을 비활성화하고 조정 가능한 항목을 조정하는 데 셀 수 없이 많은 시간을 소비할 수 있지만 사실 Linux 커널은 이미 (배포판에 따라) 잘 조정되어 있습니다.최대사용자 상황.
답변2
대부분의 사용자는 자신의 커널을 컴파일할 필요가 없으며 배포판에서 이미 이를 수행하고 있습니다. 일반적으로 릴리스에는 릴리스 작동 방식의 특정 부분, 장치 드라이버의 백포트, 최신이지만 출시되지 않은 커널 버전의 수정 사항 또는 사용자와 함께 개척한 기능을 통합하기 위한 패치 세트가 포함됩니다.
자신만의 커널을 컴파일할 때 몇 가지 옵션이 있습니다. 공식 Linus Torvalds 커널을 컴파일할 수 있습니다. 여기에는 배포판에서 추가한 패치나 사용자 정의(좋을 수도 있고 나쁠 수도 있음)가 포함되지 않습니다. 또는 배포판의 재구축 도구를 사용할 수도 있습니다. 자신만의 커널을 구축합니다.
커널을 다시 빌드하려는 이유는 다음과 같습니다.
- 버그를 패치하거나 프로덕션 시스템에 특정 기능을 추가하기 위해 한두 가지 수정만으로 전체 커널을 업그레이드할 위험을 감수할 수는 없습니다.
- 특정 장치 드라이버나 새로운 기능을 사용해 보세요
- 커널을 확장하려면 작업하세요.
- 일부 "알파" 모듈 또는 기능을 테스트합니다.
또한 많은 개발자는 특수 장치 드라이버가 필요하거나 원치 않는 기능을 제거하려는 임베디드 시스템이나 셋톱 박스용 커널의 사용자 정의 버전을 만드는 데 이를 사용합니다.
답변3
커널을 직접 컴파일하면 머신과 관련된 부분만 포함할 수 있으므로 특히 시작 시 머신이 더 작아지고 잠재적으로 더 빨라집니다. 범용 커널은 부팅 시 가능한 한 많은 하드웨어에 대한 지원을 포함해야 하며 어떤 하드웨어가 컴퓨터에 연결되어 있는지 감지하고 적절한 모듈을 로드하지만 이 모든 작업에는 시간이 걸리고 대신 동적 모듈을 로드해야 합니다. 커널에 직접 들어갑니다. 컴퓨터에 CPU가 하나만 있을 때 커널이 400개의 서로 다른 CPU를 지원하도록 하거나 CPU가 없으면 Bluetooth 마우스를 지원할 이유가 없습니다. 이는 모두 낭비되는 공간입니다.
답변4
자신만의 커널을 컴파일하면 이점을 얻을 수 있는 몇 가지 상황이 있습니다:
모듈 로딩이 비활성화된 커널이 더 안전합니다. 이를 위해서는 모듈로 컴파일하는 대신 필요한 모듈을 선택하고 커널의 일부로 포함해야 합니다.
/dev/kmem에 대한 지원을 비활성화하거나 적절한 컴파일러 옵션으로 이를 약화시키는 것은 보안에 좋습니다. 현재 대부분의 배포판에서는 기본적으로 이 작업을 수행한다고 생각합니다.
가능하다면 initrd를 사용하지 않는 것이 좋습니다. 커널을 부팅하는 하드웨어에 맞게 조정하면 initrd가 제거됩니다.
때로는 최신 커널 버전에 필요한 기능이 포함되어 있을 수도 있지만 오늘날에는 이러한 경우가 매우 드뭅니다. 처음 데비안을 사용하기 시작했을 때 2.4 커널을 사용했지만 udev를 지원하려면 2.6 커널이 필요했던 기억이 납니다.
불필요한 네트워크 프로토콜/옵션을 비활성화하면 TCP/IP 성능이 향상될 수 있습니다.
불필요한 옵션을 비활성화하면 커널의 메모리 공간을 줄일 수 있으며 이는 RAM이 부족한 환경에서 중요합니다. 이는 256MB RAM 시스템을 라우터로 사용할 때 도움이 됩니다.
나는 일반적으로 직렬 또는 SSH를 통해서만 로그인하는 시스템에서 /dev의 모든 "tty" 장치가 짜증나는 것을 발견했습니다.