본문 바로가기

전체 글154

[Linux Kernel] KPTI: Kernel Page-Table Isolation 예전부터 "커널의 페이지 테이블 엔트리는 어디에 있을까?" 가 궁금했는데 최근에 공부하다 궁금증이 해결되었다. 이 질문에 대한 답변은 KPTI를 적용하냐 아니냐에 따라 나뉜다. 우선 적용하지 않은 경우부터 살펴보자. KPTI 적용 전 사진의 왼쪽은 KPTI를 적용하지 않았을 때의 모습이다. KPTI를 적용하지 않으면, 기본적으로 유저 모드 프로세스의 페이지 테이블에는 커널 공간의 주소와 유저 공간의 주소가 모두 매핑된다 (= 페이지 테이블 엔트리가 존재한다.) 이는 TLB Flushing으로 인한 오버헤드를 줄이기 위함이다. TLB는 페이징에서 가상 주소로부터 물리 주소로의 변환을 캐싱하는 버퍼이다. 유저 모드 프로세스는 System Call, Context Switching 등으로 인해 자주 커널 모드.. 2021. 9. 18.
GCP에서 Nested KVM 활성화 어제부터 자꾸 커널을 날려먹다보니까 buildroot의 필요성을 느낀다. 콘솔에 직접 접근할 수가 없으니까 코드 한 번 잘못 수정하면 되돌릴 수가 없다. 매번 백업 이미지 만들수도 불편하다. 그리고 buildroot를 사용하면 좋은 점은 git bisect run으로 bisection을 자동화할 수 있다 (!) 무튼간에 buildroot를 쓰려면 kvm을 활성화해야하는데 GCP에서는 기본적으로 nested kvm을 지원하지 않는다. 따라서 nested kvm을 활성화해야한다. 중첩된 가상화 사용 설정 | Compute Engine 문서 | Google Cloud 의견 보내기 중첩된 가상화 사용 설정 Linux 이 문서에서는 가상 머신(VM) 인스턴스에서 중첩된 가상화를 사용 설정하는 방법과 중첩된 VM을.. 2021. 9. 18.
[Linux Kernel] GCP에서 커스텀 커널 사용하기 사지방에서 공부를 하다보니 클라우드를 쓸 수밖에 없다. 예전에 한 번 커널을 빌드하고 설치했는데 아무것도 안 바뀌길래 안 되는줄 알았는데, 몇가지 config를 설정해주면 잘 설치가 된다. 커스텀 이미지 빌드 요구사항 | Compute Engine 문서 | Google Cloud 커스텀 이미지 빌드 요구사항 cloud.google.com 1. 혹시 모르니 GCP 상에서 설치 전 백업 만들기 2. make defconfig - 기본 config 만들기 3. make localmodconfig - 기본 config에서 현재 사용중인 모듈 추가 4. make menuconfig로 위 링크에 있는 config 활성화 (의존성 때문에 menuconfig로 하는게 편함) 5. sudo make install 2021. 9. 17.
[Linux Kernel] 리눅스 커널 개발 가이드: For more information 8. For more information — The Linux Kernel documentation Linux Device Drivers, 3rd Edition (Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman). Online at https://lwn.net/Kernel/LDD3/. Linux Kernel Development (Robert Love). Understanding the Linux Kernel (Daniel Bovet and Marco Cesati). www.kernel.org For more information 커널 개발 관련 주제를 다룬 문서는 많다. 그 중 첫번째는 커널 소스에 포함된 Documentation 디렉토리이다... 2021. 9. 16.
[Linux Kernel] 리눅스 커널 개발 가이드: Advanced Topics 7. Advanced topics — The Linux Kernel documentation At this point, hopefully, you have a handle on how the development process works. There is still more to learn, however! This section will cover a number of topics which can be helpful for developers wanting to become a regular part of the Linux kernel dev www.kernel.org 여기까지 읽었으면 어떻게 커널을 개발하는지 감이 왔을 것이다. 하지만 아직 배울게 좀더 남았다! 이 글에서는 개발자들이 리눅스 커널을.. 2021. 9. 16.
[Linux Kernel] 리눅스 커널 개발 가이드: Followthrough 자, 이제 당신이 작업한 내용을 패치로 보내기까지 했다. 커널 개발자들이 (심지어 숙련된 개발자들도) 가장 많이 실수하는 것은 패치를 보냈다고 모든게 끝났다고 생각하는 것이다. 사실은, 패치를 보내는 것은 다음 단계를 밟는 것이고 아직 할일이 더 남았다. 패치를 처음 보내자마자 더 이상 개선할 점이 없고 바로 머지되는 경우는 매우 드물다. 커널 개발 프로세스는 이 사실을 잘 알고, 게시된 패치를 개선한다. 당신은 코드를 작성한 사람으로서 당신의 코드가 커널의 품질에 맞게 개선되도록 책임을 져야한다. 이 단계에서 실패하면 메인라인에 머지되지 않을 것이다. 6.1 Working with reviewers 의미가 있는 패치는 다른 개발자들이 코드를 리뷰하면서 코멘트를 남길 것이다. 리뷰어와 함께 일하는 것은 .. 2021. 9. 15.
[Linux Kernel] 리눅스 커널 개발 가이드: Posting Patches 와 휴가 나가고 나서 격리때문에 블로그 글을 하나도 못썼다. 얼른 이 시리즈 마저 번역(이라기엔 야매지만)하고 다른 주제도 글 써야겠다. 5. Posting patches — The Linux Kernel documentation Sooner or later, the time comes when your work is ready to be presented to the community for review and, eventually, inclusion into the mainline kernel. Unsurprisingly, the kernel development community has evolved a set of conventions and procedures which www.kernel.or.. 2021. 9. 14.
[Linux Kernel] 리눅스 커널 개발 가이드: Getting the code right 4. Getting the code right — The Linux Kernel documentation 4.1.1. Coding style The kernel has long had a standard coding style, described in Linux kernel coding style. For much of that time, the policies described in that file were taken as being, at most, advisory. As a result, there is a substantial amount of co www.kernel.org 커뮤니티와 함께 설계를 하는 것도 할 이야기가 많지만, 모든 커널 개발 프로젝트의 증명은 결과적으로 코드가 한다. 다른 .. 2021. 8. 30.
[Linux Kernel] 리눅스 커널 개발 가이드: Early-stage planning 3. Early-stage planning — The Linux Kernel documentation When contemplating a Linux kernel development project, it can be tempting to jump right in and start coding. As with any significant project, though, much of the groundwork for success is best laid before the first line of code is written. Some time spent www.kernel.org 리눅스 커널 개발을 할때, 바로 코딩부터 시작하려는 욕심이 들 수도 있다. 하지만 대부분의 중요한 프로젝트가 그렇듯, 프로젝트.. 2021. 8. 27.