참고자료
- https://blog.naver.com/alice_k106/221530340759
- https://lwn.net/Articles/718062/
- https://lwn.net/Articles/636943/
- https://lwn.net/Articles/755889/
개인 해석
- 일단 기본적으로 커널에서 제공해줘야하는 기능이다. 컨테이너를 만들때 이미지의 불변인 부분과 수정된 부분을 분리해야하는데 이를 구현하기 위해 널리 사용된다.
- 커널에서 구현방식은 꾸준히 변화하는것 같은데, lwn 자료를 보면 2018년 이전에는 vfs 를 hack하는 방식으로 구현했었고, 이후에는 일종의 파일시스템으로 취급해서 실제 사용하는 파일시스템 위에 overlayfs 를 덧씌우는 방식으로 구현한다.
- 이런 구현방식은 현재도 유지되고 있는것으로 보인다. overlayfs 커널코드 bootlin:
- 구현 내용를 보면 위쪽 레이어와 아래쪽 레이어를 오가는 함수가 존재하며, 조회를 할때 이러한 레이어를 겹쳐서 반환해주는 방식으로 동작하는 것 같다.:
- 궁금점 : 성능 이슈는 없나? 어떠한 파일이 존재하지 않는지를 언제나 모든 레이어를 조회해야한다거나, 파일이 통채로 바뀌었음에도 불구하고 모든 레이어에서 겹치느라 추가적인 메모리를 사용하지는 않나?
- 아직 코드를 다 읽지는 못했지만, 2018년에 별도의 파일시스템으로 분리된 것만 봐도 아직 최적화할 부분이 많을 것 같다.
- 컨테이너가 그냥 프로세스임에도 불구하고 성능이 하락하기는 하는데, 이런 포인트들이 조금씩 깍아 먹는것 같다.:
- 개인 생각은 그냥 프로세스니 VM이랑 성능 비교를 하는게 아니라 베어메탈이랑 비교해야한다고 생각한다.
- 실제로 코드에 TODO가 드문드문 보인다.
- 성능에 대한 생각은 overlayfs 개발자도 고민하고 있는게 눈에 보이는게 dentry랑 cache 관련 코드가 밟힌다.
- 구현 내용를 보면 위쪽 레이어와 아래쪽 레이어를 오가는 함수가 존재하며, 조회를 할때 이러한 레이어를 겹쳐서 반환해주는 방식으로 동작하는 것 같다.: