본문 바로가기

linux kernel33

The Slab Allocator: An Object-Caching Kernel Memory Allocator 이 글은 1994년 Jeff Bonwick (Sun Microsystems)의 The Slab Allocator: An Object-Caching Kernel Memory Allocator를 정리한 것이다. 생각보다 오래 된 논문이다. 1. Introduction 슬랩 할당자는 1994년 Jeff Bonwick이 SunOS 5.4에 도입한 메모리 할당자이다. 이 메모리 할당자는 객체를 할당하고 해제할 때, 메모리를 할당하는 비용보다 생성/소멸시의 비용이 더 높으므로, 이런 생성/소멸 비용을 줄이고자 만들어졌다. 그리고 컬러링(colouring)을 통해 하드웨어 캐시를 최대한 활용하고자 한다. 또한 이 할당자는 통계와 디버깅 기능으로 시스템을 모니터링 하거나 시스템 상의 문제를 탐지할 수 있다. 또한 슬랩.. 2021. 10. 4.
NUMA: Non-Uniform Memory Access NUMA: Non-Uniform Memory Access 메모리 관련 부분을 공부하다보니 NUMA가 많이 나와서 정리해본다. 이 글은 Christoph Lameter의 2013년 문서 "NUMA: An Overview"를 리뷰한 것이다. NUMA는 멀티 프로세서 환경에서 메모리별 접근 속도가 프로세서에 따라 다른 접근 속도 가진 메모리의 형태를 말한다. 일반적인 PC에서는 메모리가 그렇게 많지 않아서 UMA (Uniform-Memory Access)가 많지만, 1990년대 즈음부터 고성능 컴퓨터에 대하여 NUMA를 적용한 컴퓨터가 나오기 시작했다. NUMA에서는 메모리를 노드라는 단위로 나누어지게 되는데, 프로세서마다 노드에 대한 접근 속도가 다르다. 아래 사진은 8개의 프로세서와 2개의 NUMA 노드로.. 2021. 9. 30.
리눅스와 오픈소스에 관한 생각 리눅스와 오픈소스 공부를 시작한 계기 처음 운영체제, 리눅스 커널을 접한건 중학교 쯤이다. 당시에는 나만의 운영체제를 하나 만들어보고 싶었고 (물론 성공적이진 않았지만), 당시엔 해커에 관한 환상이 있었기 때문에 (중2병인지 -_-) 리눅스를 해킹하면 멋있겠다고 생각해서 운영체제 책이랑 리눅스 커널 책 몇권을 읽었다. 물론 지금 생각하면 책의 30%도 이해를 못하긴 했다. 그때는 지금보다 컴퓨터 공학을 잘 몰랐다. 그러다가 학교 도서관에서 한국 오픈소스 개발자들을 소개하는 꾸준히, 자유롭게, 즐겁게라는 책을 우연히 접했다. 책에선 허태준 개발자님을 소개하는데, 2000년대부터 꾸준히 개발에 참여해서 주요 서브시스템을 관리하시는 한국에 몇 안되는 분이다. 멋있기도 했고, 이렇게 먹고 사는 개발자도 있다는게.. 2021. 9. 23.
[LWN.net] More IOPS with BIO Caching More IOPS with BIO caching [LWN.net] Benefits for LWN subscribersThe primary benefit from subscribing to LWN is helping to keep us publishing, but, beyond that, subscribers get immediate access to all site content and access to a number of extra site features. Please sign up today! By Jonatha lwn.net 참고로 IOPS (I/O Operations Per Second)는 스토리지 디바이스가 초당 I/O 연산을 처리하는 횟수이다. 글 내용 옛날에는 스토리지 디바이스가 매우 느.. 2021. 9. 19.
[Linux Kernel] KPTI: Kernel Page-Table Isolation 예전부터 "커널의 페이지 테이블 엔트리는 어디에 있을까?" 가 궁금했는데 최근에 공부하다 궁금증이 해결되었다. 이 질문에 대한 답변은 KPTI를 적용하냐 아니냐에 따라 나뉜다. 우선 적용하지 않은 경우부터 살펴보자. KPTI 적용 전 사진의 왼쪽은 KPTI를 적용하지 않았을 때의 모습이다. KPTI를 적용하지 않으면, 기본적으로 유저 모드 프로세스의 페이지 테이블에는 커널 공간의 주소와 유저 공간의 주소가 모두 매핑된다 (= 페이지 테이블 엔트리가 존재한다.) 이는 TLB Flushing으로 인한 오버헤드를 줄이기 위함이다. TLB는 페이징에서 가상 주소로부터 물리 주소로의 변환을 캐싱하는 버퍼이다. 유저 모드 프로세스는 System Call, Context Switching 등으로 인해 자주 커널 모드.. 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.