27 lines
2.2 KiB
Markdown
27 lines
2.2 KiB
Markdown
# 가상 머신 둘과 호스트 프로세스가 하나의 NVMe 로 모인다
|
||
|
||
## Alternative text
|
||
|
||
VM1 QEMU, VM2 QEMU, Nginx, Host 기타 네 곳에서 나온 화살표가 하나의 Host Block Layer 로 모이고 거기서 NVMe 로 나가는 수렴 흐름도.
|
||
|
||
## Long description
|
||
|
||
위쪽에 네 출발점이 나란히 있다. VM1 QEMU 는 WRITE X 와 READ Y, WRITE Z 를 내고 VM2 QEMU 는 READ A 와 WRITE B 를 내며, 그 옆에 호스트의 Nginx 와 다른 프로세스가 있다. 네 갈래가 모두 가운데의 Host Block Layer 하나로 모인다. Host Block Layer 는 그 I/O 가 가상 머신 안에서 시작했는지 호스트 프로세스에서 시작했는지를 본질적으로 구분해 처리하는 계층이 아니라 들어온 것을 모두 Host block request 로 다루고, 그 요청들을 queue 에서 관리해 맨 아래 NVMe 로 dispatch 한다. 여기서 생기는 경쟁이 Storage Contention 이고 CPU 실행 시간을 두고 벌어지는 CPU Contention 과는 다투는 자원이 다르다는 것은 본문 문단이 맡는다.
|
||
|
||
## Elements and evidence
|
||
|
||
- **VM1 QEMU** (service): 가상 머신 하나의 QEMU 프로세스. 게스트의 I/O 가 여기서 호스트 파일 I/O 가 된다. Evidence: L7029–L7029, L7041–L7044.
|
||
- **VM2 QEMU** (service): 다른 가상 머신의 QEMU 프로세스. Evidence: L7031–L7031, L7046–L7048.
|
||
- **Nginx** (service): 호스트에서 직접 도는 프로세스. Evidence: L7033–L7033.
|
||
- **Host 기타** (service): 그 밖의 호스트 프로세스. Evidence: L7035–L7038.
|
||
- **Host Block Layer** (service): 어디서 왔는지 구분하지 않고 모두 Host block request 로 다루는 계층. queue 에서 관리해 device 로 내보낸다. Evidence: L7031–L7031, L7017–L7022, L7054–L7054, L7058–L7060.
|
||
- **NVMe** (device): 네 갈래가 결국 함께 쓰는 하나의 물리 device. Evidence: L7031–L7031, L7019–L7019, L7066–L7069.
|
||
|
||
## Relationships
|
||
|
||
- **VM1 QEMU → Host Block Layer:** data. Evidence: L7029–L7031.
|
||
- **VM2 QEMU → Host Block Layer:** data. Evidence: L7031–L7031.
|
||
- **Nginx → Host Block Layer:** data. Evidence: L7031–L7033.
|
||
- **Host 기타 → Host Block Layer:** data. Evidence: L7031–L7035.
|
||
- **Host Block Layer → NVMe:** dispatch. Evidence: L7031–L7031, L7054–L7054.
|