All154 Virtual Memory: Grouping pages by mobility 2000년대에는 가상 메모리에서 단편화를 줄이려는 노력이 꾸준히 있었다. 그 중 하나가 이 글에서 분석할, Mel Gorman의 패치 시리즈이다. 이 패치 시리즈는 특성이 서로 다른 페이지를 묶어서 관리해 외부 단편화를 최소화한다. External Fragmentation 시스템이 부팅된 이후 시간이 지남에 따라서 메모리는 자연스럽게 단편화가 발생한다. 위 사진처럼 실제 가용 메모리의 크기는 충분하더라도 메모리 블럭이 쪼개지면서 연속적이지 않게되는 걸 외부 단편화라고 한다. 부팅 이후 시간이 많이 지나면 지날수록 외부 단편화가 심해진다. What is mobility 우선 mobility가 무엇인지 살펴보자. 리눅스에서 페이지의 mobility는 migratetype으로 정의되므로 migratetype을.. 2022. 1. 2. Virtual Memory: Node and Zone 이 글은 Mel Gorman의 Understanding The Linux Virtual Memory Manager의 일부를 정리한 것이다. 최신의 가상 메모리 서브시스템과는 내용이 상이할 수 있다. 하지만 기본 개념을 설명하기엔 충분하다고 생각한다. 최신 내용은 필요에 따라서 별도로 글로 정리할 생각이다. Node 메모리의 접근 속도가 균일하지 않은 시스템을 NUMA 시스템이라고 한다. 자세한 건 NUMA 글을 참고하자. NUMA 시스템에서 같은 특성(접근 속도)을 갖는 메모리를 노드라고 한다. 예를 들어서 프로세서 2개(각각 4코어)와 노드 2개가 있을 때는 프로세서에 기준으로 자신에게 가까운 노드(local node)에 접근하는 속도는 빠르고, 먼 노드(remote node)에 접근하는 속도는 느리다.. 2022. 1. 2. 2021년 회고 시간은 정말 빨리 간다. 스무살이 엊그제였던 것 같은데 이제 스물 셋이라니😢 누가 장난 치는 것 같다. 시간이 이렇게 빨리 간다니. 작년엔 블로그를 안하다보니 2020년 회고는 안썼다. 아쉬운대로 2021년 회고와 내년은 어떻게 보낼지 좀 고민해보자. 아, 그리고 놀라운 사실이 있다. 내년이 끝나도 나는 여전히 군인이다. 빨리 전역하고 싶다. 시간 가는 건 싫은데 하고 싶은 건 또 많아서 전역이랑 졸업은 빨리 하고 싶은게 사람 마음이 참 그렇다. 42 서울 42 서울에 관해 간단한 회고를 적어보자면, 나는 42 서울에서 맨땅에 헤딩하는 법을 배웠다. 42에서는 나를 알려줄 사람, 책도 없고 오로지 동료와 프로젝트만 주어진다. 내가 하려는 프로젝트에 대해 아무 단서가 없는 상황에서 옆 사람과 토론하면서 문.. 2021. 12. 31. Direct Memory Access API 이 글은 리눅스의 문서 Documentation/DMA-API-HOWTO.txt와 배경 지식을 정리한 글이다. 메일을 읽다보니 DMA를 좀더 공부하게 됐다. 예전부터 디바이스 드라이버에 관심이 있었는데 이걸 읽고나니 디바이스와 CPU가 통신하는 매커니즘 자체는 이해한 것 같다. 물론 특정 디바이스 드라이버를 작성하려면 PCI 레이어와 디바이스가 사용하는 프로토콜(?) 관련 문서, 디바이스의 하드웨어 스펙 등등도 봐야겠지? 참고로 DMA-API-HOWTO는 API를 친절하게 설명해주는 문서라 모든 내용을 설명하지는 않는다. 더 자세한건 DMA-API 문서를 봐야한다. (이 글에는 dma_alloc_pages()나 dma_alloc_attrs() 등등은 생략되어있다.) 배경 지식 address 용어 정리 v.. 2021. 12. 29. perf로 CPU 샘플링하기 (feat. perf record) 얼마전에 깃헙 블로그에 SL[AUO]B 할당자의 CPU Flame Graph를 간단하게 분석해서 올렸었는데, perf에서 프로파일링 하는 방식을 제대로 모른 채 사용하다보니 결과가 왜곡됐었다. 그래서 간단하게라도 기술적인 부분을 정리하려고 한다. TMI지만 이 글 제목을 원래는 "함수 호출 스택 샘플링"이라고 하려다가, CPU 샘플링/프로파일링이라는 말을 더 많이 쓰는 것 같아서 지금의 제목이 되었다. Sampling 우리는 워크로드에서 어떤 일이 일어나는지를 분석하고 싶어한다. 뭐 캐시 미스나 사이클당 명령어와 같은 PMC (Performance Monitoring Counter)일 수도 있고, 아니면 특정 벤치마크에서 어떤 컴포넌트가 얼마나 CPU를 사용하는지가 궁금할 수도 있다. 간단한 예로 함수 .. 2021. 12. 15. Virtual Memory: Folio in 5.16 Introduction 저번 개발 주기때 간간이 보이길래 공부했었는데, 5.16에서 folio 패치셋이 드디어 머지되었다. 간단하게 요약해보자면 커널에서 메모리는 페이지 단위로 관리된다. 종종 여러 페이지를 그룹으로 묶어서 하나의 페이지처럼 처리해야할 때가 있는데 이럴때 보통 compound page나 thp (transparent huge pages)를 사용한다. compound page 같은 경우에는 첫 번째의 페이지가 head page이고, 그 외에는 모두 tail page이다 실제로 파일시스템에 compound page를 사용해서 큰 페이지 단위로 처리할 때 성능상의 이점이 있다고 한다. 하지만 compound page를 사용하는 경우에는 이게 head page인 tail page인지 명확하지 않.. 2021. 12. 12. 이전 1 ··· 3 4 5 6 7 8 9 ··· 26 다음