본문 바로가기

전체 글153

2023년 회고 2023년 회고 전역과 복학 2023년 3월, 드디어 군생활이 끝나고 3학년으로 복학했다. 전역신고를 하자마자 정신없이 학교로 달려가서 10시 수업을 들은 게 아직도 생생하다. 오랜만에 학교에 돌아오니 너무 반가웠다. 공부도 많이 하고 사람도 많이 만났던 것 같다. 1학기는 과제와 시험의 연속으로 정말 정신없이 흘러갔다. LSFMM 2023 & OSSNA 2023 참여 정말 꿈 같은 일주일 이었다. 감사하게도 LSFMMBPF Summit 2023에 초대되어서 Linux Foundation의 travel funding을 받고 컨퍼런스에 다녀왔다. OSSNA 2023도 같은 건물에서 진행해서 겸사겸사 다녀왔다. LSFMMBPF은 파일시스템, MM, BPF 서브시스템의 문제점과 향후 개발 계획을 논의하는 자리.. 2023. 12. 31.
PCIe Enumeration Introduction 펌웨어와 운영체제는 컴퓨터에 어떤 PCI(e) 디바이스들이 있는지 어떻게 발견할까? 이전 글에서는 ACPI MCFG 테이블과 PCI Function의 BDF 번호를 알면 특정 Function의 Configuration Space의 위치를 알 수 있다고 했다. 그런데 어떤 디바이스들이 컴퓨터에 연결되었는지를 먼저 알아야 Configuration Space를 읽든 말든 할 수 있다. 펌웨어와 운영체제는 부팅 직후 컴퓨터에 어떤 디바이스들이 있는지 알지 못한다. 부팅 직후 디바이스를 하나씩 발견하는 과정을 Enumeration이라고 한다. PCI Endpoint (Type 0) and Bridge (Type 1) Enumeration을 더 설명하기 전에 우리는 브리지에 관해 더 알아볼 .. 2023. 11. 30.
PCIe Configuration Space Bus, Device, Function Configuration Space와 Enumeration을 다루기 전에, BDF (Bus, Device, Function)이 무엇인지 알아보자. PCI와 PCIe에서는 PCI 도메인(or PCI 세그먼트)당 최대 256개의 버스가 존재할 수 있고, 버스당 최대 32개의 디바이스, 디바이스당 최대 8개의 펑션(function)이 존재할 수 있다. PCI(e) 시스템에서 (Bus, Device, Function)은 PCI 도메인 (or PCI 세그먼트) 내에서 디바이스를 식별할 수 있다. 리눅스에서는 'lspci' 명령어로 PCI(e) 디바이스의 B/D/F를 확인할 수 있다. PCI(e) Configuration Space 운영체제는 어떻게 디바이스와 상호작용할까? .. 2023. 11. 30.
An Introduction to PCI Express Introduction 컴퓨터 조립을 해봤다면 한 번쯤 PCIe에 대해서 들어봤을 것이다. 예를 들어서 "이 NVME SSD는 PCIe 4.0을 지원해서 높은 대역폭을 보여준다"던가 말이다. PCIe는 컴퓨터 시스템에 고성능 디바이스(GPU, 네트워크 카드 등)를 연결하기 위한 표준 인터페이스이다. 이 글은 PCIe가 무엇이고, 이전에 사용되던 PCI에서 어떻게 발전했는지를 다룬다. 또한 PCIe 시스템을 구성하는 루트 컴플렉스, 스위치, 브리지와 엔드포인트 등의 구성요소와 이것이 어떻게 소프트웨어에서 표현되는지를 다룬다. PCI vs. PCI Express PCIe (Peripheral Component Interconnect Express)는 프로세서와 디바이스, 혹은 디바이스와 디바이스가 통신하기 .. 2023. 11. 15.
anon_vma chaining (v2.6.34) Previously on rmap rmap (v2.5.27): pte chaining & page frame reclamation Introduction What is Reverse Mapping? 가상 메모리는 페이지 테이블을 사용해서 가상 주소를 물리 주소로 변환한다. 페이지 테이블은 프로세스별로 존재하며, 각각의 프로세스는 독립적인 가상 주소공간 hyeyoo.com Object-based reverse mapping (v2.6.7) Previously on rmap rmap (v2.5.26): pte chaining & page frame reclamation Introduction What is Reverse Mapping? 가상 메모리는 페이지 테이블을 사용해서 가상 주소를 물리 주소로 변환한다.. 2023. 2. 24.
Object-based reverse mapping (v2.6.7) Previously on rmap rmap (v2.5.26): pte chaining & page frame reclamation Introduction What is Reverse Mapping? 가상 메모리는 페이지 테이블을 사용해서 가상 주소를 물리 주소로 변환한다. 페이지 테이블은 프로세스별로 존재하며, 각각의 프로세스는 독립적인 가상 주소공간 hyeyoo.com 이전 글에서는 v2.5.27에 도입된 minimal rmap을 살펴봤다. pte chain 기반 rmap은 메모리 오버헤드와 fork/exit, page mapping/unmapping의 긴 실행 시간 때문에 머지 않아 object 기반 rmap에 의해 대체되었다. [4], [5] Some changes in pte chaining pt.. 2023. 2. 17.
Physical Memory Model (FLATMEM, SPARSEMEM) struct page 메모 struct page에 대한 간단한 노트 참고로 64비트 리눅스는 LP64를 사용한다. 이 글에서 자료형의 크기는 LP64에 따라서 서술되었다. Introuction struct page는 페이지 프레임 하나 (보통 4096 바이트)에 대한 정 hyeyoo.com Introduction 물리 메모리는 시스템 내에서 다양한 형태로 존재할 수 있다. 물리 주소 공간의 처음부터 끝까지 사용가능한 물리 메모리가 연속적으로 존재하거나, 중간에 구멍이 있을 수도 있다. 아니면 중간에 구멍이 있는 정도가 아니라 드문드문 물리 메모리가 존재할 수도 있으며, 서로 다른 NUMA 노드에 속할 수도 있다. 그림에서 보여주듯 물리 메모리의 레이아웃은 정말 다양한 형태로 존재할 수 있으며, 운영체제 .. 2023. 2. 8.
2022년 회고 2022년 회고 시간은 언제나 총알같이 지나가고 항상 그 자리에는 아쉬움이 남는다. 만족스럽지 못하고 아쉬움이 남기 때문에 회고를 하게 되나보다. 짧게나마 2022년을 돌아보고 2023년 계획을 세워보자. Kernel Development in 2022 한동안 슬랩 서브시스템쪽 패치들을 리뷰하다보니 슬랩에 왠만큼은 익숙해졌다. 올해는 슬랩 서브시스템에서 리뷰어로 활동을 시작했고, 시간을 내서 패치 리뷰, 테스트, bugfix, 리팩토링을 했다. 되돌아 생각해보면 슬랩이 다른 서브시스템과 많이 얽혀있지 않아서 처음에 시작하기가 더 수월했다. 그래서 분야를 더 넓히고 싶어서 올해 목표 중 하나가 슬랩 바깥의 메모리 관리 서브시스템에 익숙해지는 것이었고, 많이 부족하지만 블로그에 정리하면서 어느 정도는 달성했.. 2023. 1. 1.
rmap (v2.5.27): pte chaining & page frame reclamation Introduction What is Reverse Mapping? 가상 메모리는 페이지 테이블을 사용해서 가상 주소를 물리 주소로 변환한다. 페이지 테이블은 프로세스별로 존재하며, 각각의 프로세스는 독립적인 가상 주소공간을 갖는다. MMU는 가상 주소를 물리 주소로(forward mapping) 변환하지만, 운영체제는 반대로 어떤 페이지 프레임이 어떤 프로세스의 가상 주소 공간에 매핑되어있는지(reverse mapping)를 알아야 하는 경우가 있다. 구체적으로 어떤 경우에 reverse mapping이 필요한가 하면 swapout/pageout, migration, compaction을 할때 해당 페이지프레임을 사용하고 있는 프로세스의 pte를 빠르게 찾거나 수정하기 위해 필요하다. 예전 (Linux.. 2022. 12. 26.