Files
document-haness/docs/virtualization/final/assets/diagrams/guest-block-io-to-virtqueue/guest-block-io-to-virtqueue.alt.md
T

3.1 KiB
Raw Blame History

게스트의 write() 가 virtqueue 에 실리기까지

Alternative text

게스트 사용자 공간의 PostgreSQL/Keycloak 에서 시작한 write() 가 게스트 커널의 VFS, ext4/XFS, Guest Page Cache, Guest Block Layer, /dev/vda, virtio-blk Frontend 를 거쳐 virtqueue 에 도달하는 위에서 아래로 읽는 흐름도.

Long description

위에서 아래로 읽는다. 맨 위 Guest Userspace 구역에 PostgreSQL / Keycloak 이 있고 write() 가 게스트 커널로 내려간다. Guest Kernel 구역 안에서 VFS 가 먼저 받고, ext4 / XFS 가 파일을 block 공간에 배치하고, Guest Page Cache 가 그 내용을 dirty page 로 받아 두었다가 writeback 으로 Guest Block Layer 에 내려보낸다. Guest Block Layer 는 그것을 WRITE 나 FLUSH 요청으로 바꿔 /dev/vda 에 걸고, virtio-blk Frontend 가 그 요청을 virtqueue 에 게시한다. virtqueue 아래의 VM Boundary 부터는 QEMU 와 호스트 계층이라 이 그림에서 잘랐다. 완료가 같은 virtqueue 로 되돌아오는 역방향은 SSOT 의 다른 절이 대는 사실이라 이 그림에 넣지 않았고 본문 문단이 맡는다.

Elements and evidence

  • Boundary: Guest Userspace (boundary): 게스트 사용자 공간. 저장장치를 직접 다루지 않는다. Evidence: L5820L5822.
  • Boundary: Guest Kernel (boundary): 게스트 커널 공간. VM Boundary 위쪽 계층이 전부 여기 있다. Evidence: L5828L5846.
  • PostgreSQL / Keycloak (service): 파일 연산을 요청하는 게스트 프로세스. Evidence: L5820L5822, L5898L5898, L5824L5826.
  • VFS (service): 열린 파일이 어느 filesystem 구현에 속하는지 보고 연산을 넘기는 공통 계층. Evidence: L5828L5830, L5918L5918.
  • ext4 / XFS (service): 파일과 디렉터리를 block 공간에 배치하는 게스트 filesystem. Evidence: L5832L5832.
  • Guest Page Cache (store): 게스트 RAM 에 있는 cache. write() 가 성공해도 데이터는 아직 여기까지만 확정된다. Evidence: L5834L5834.
  • Guest Block Layer (service): 파일 세계의 요청을 block device 세계의 요청으로 바꾸는 계층. Evidence: L5838L5838.
  • /dev/vda (device): 게스트 Linux 가 하나의 block device 로 인식하는 이름. Evidence: L5842L5842, L5892L5892.
  • virtio-blk Frontend (service): 그 가상 block device 를 제어하는 게스트 커널 driver. Evidence: L5844L5844, L5802L5802.
  • virtqueue (queue): 요청이 실리는 자리. 바로 아래가 VM Boundary 다. Evidence: L5846L5848.

Relationships

  • PostgreSQL / Keycloak → VFS: data. Evidence: L5824L5826, L5903L5903.
  • VFS → ext4 / XFS: data. Evidence: L5830L5832.
  • ext4 / XFS → Guest Page Cache: data. Evidence: L5832L5834.
  • Guest Page Cache → Guest Block Layer: writeback. Evidence: L5836L5838.
  • Guest Block Layer → /dev/vda: WRITE / FLUSH. Evidence: L5840L5842.
  • /dev/vda → virtio-blk Frontend: data. Evidence: L5842L5844.
  • virtio-blk Frontend → virtqueue: Virtio block request. Evidence: L5844L5846.