본문 바로가기

virtual memory11

Page Cache: write 글을 좀 오랜만에 쓴다. 이것저것 하느라 글을 그동안 못썼다. 흠, 다음 글은 뭐쓰지? 이전 글 VFS: read_iter() & write_iter() 원래는 페이지 캐시를 정리하려고 했는데 정리하다보니 read/write 매커니즘을 정리할 수밖에 없었다. 이 글에선 read_iter()가 어떻게 동작한는지 간단하게 알아본다. 관련 글 이 글은 가상 파일시스 hyeyoo.com Page Cache: filemap_read 이전 글 이전 글에서는 read() 시스템 호출에서 어떤 일이 일어나는지 알아봤다. read() 시스템 호출은 모드와 권한이 적절한지 확인한 후, 1) Direct IO를 수행하거나 2) filemap_read()로 페이지 캐시에서 hyeyoo.com 앞선 글에서 read()를 할 때.. 2022. 3. 9.
Page Cache: filemap_read 이전 글 이전 글에서는 read() 시스템 호출에서 어떤 일이 일어나는지 알아봤다. read() 시스템 호출은 모드와 권한이 적절한지 확인한 후, 1) Direct IO를 수행하거나 2) filemap_read()로 페이지 캐시에서 데이터를 읽어온다는 것을 알아봤다. VFS: read_iter() & write_iter() 원래는 페이지 캐시를 정리하려고 했는데 정리하다보니 read/write 매커니즘을 정리할 수밖에 없었다. 이 글에선 read_iter()가 어떻게 동작한는지 간단하게 알아본다. 관련 글 이 글은 가상 파일시스 hyeyoo.com 페이지 캐시란 디스크의 속도는 어마무시하게 느리다. HDD에서 지연시간이 밀리초 단위로 발생함을 생각했을 때, 중간에 캐시가 없다면 프로세서가 파일의 내용을 .. 2022. 2. 9.
Virtual Memory: Zone의 종류 노드(Node)는 용도에 따라서 메모리 영역을 한 개 이상의 영역으로 분리해서 관리한다. 이 때 각 영역을 존(Zone)이라고 한다. 이 글에선 존의 종류에 어떤 것이 있는지 알아본다. 존과 노드, NUMA에 대한 내용은 존, 노드를 정리한 글과 NUMA를 정리한 글에 정리해두었다. Zone의 종류 리눅스에 어떤 존들이 있는지 살펴보자. 참고로 아래 서술한 존이 항상 모두 존재하는 건 아니다. 노드마다 존이 1개 이상 존재하는 건 맞지만 그렇다고 항상 모든 종류의 존이 존재하지는 않는다. 예를 들어서 어떤 시스템은 모든 메모리 영역이 ZONE_NORMAL일 수도 있다. ZONE_DMA DMA는 DMA 글에 정리해두었다. ZONE_DMA는 x86에서 하위 16MB의 메모리를 DMA용으로 예약된 존이다. I.. 2022. 1. 3.
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.