Files

1427 lines
32 KiB
Plaintext

{
"type": "excalidraw",
"version": 2,
"source": "techviz-harness",
"elements": [
{
"id": "edge-cpu-runs-guest",
"type": "arrow",
"x": 400.0,
"y": 550.0,
"width": 0.0,
"height": 96.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": null,
"seed": 845357759,
"version": 1,
"versionNonce": 1612344110,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"points": [
[
0.0,
0.0
],
[
0.0,
48.0
],
[
0.0,
48.0
],
[
0.0,
96.0
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "node-physical-cpu",
"focus": 0,
"gap": 4
},
"endBinding": {
"elementId": "node-guest-code",
"focus": 0,
"gap": 4
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": true
},
{
"id": "edge-label-cpu-runs-guest",
"type": "text",
"x": 376.0,
"y": 586.0,
"width": 96,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 536766967,
"version": 1,
"versionNonce": 1971718843,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "VMX non-root",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "VMX non-root",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "edge-device-dma",
"type": "arrow",
"x": 610.0,
"y": 533.0,
"width": 22.5,
"height": 113.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": null,
"seed": 1475632954,
"version": 1,
"versionNonce": 99932222,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"points": [
[
22.5,
0.0
],
[
22.5,
56.5
],
[
0.0,
56.5
],
[
0.0,
113.0
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "node-pci-device",
"focus": 0,
"gap": 4
},
"endBinding": {
"elementId": "node-iommu",
"focus": 0,
"gap": 4
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": true
},
{
"id": "edge-label-device-dma",
"type": "text",
"x": 576.25,
"y": 549.5,
"width": 90,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 83407640,
"version": 1,
"versionNonce": 1095275041,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "DMA",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "DMA",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "edge-kvm-vm-entry",
"type": "arrow",
"x": 164.0,
"y": 340.5,
"width": 236.0,
"height": 104.5,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": null,
"seed": 1904768359,
"version": 1,
"versionNonce": 99296897,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"points": [
[
0.0,
0.0
],
[
0.0,
52.25
],
[
236.0,
52.25
],
[
236.0,
104.5
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "node-kvm",
"focus": 0,
"gap": 4
},
"endBinding": {
"elementId": "node-physical-cpu",
"focus": 0,
"gap": 4
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": true
},
{
"id": "edge-label-kvm-vm-entry",
"type": "text",
"x": 237.0,
"y": 352.75,
"width": 90,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 185792823,
"version": 1,
"versionNonce": 154830599,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "VM entry",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "VM entry",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "edge-qemu-device-fd",
"type": "arrow",
"x": 393.0,
"y": 148.0,
"width": 103.0,
"height": 96.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": null,
"seed": 137397988,
"version": 1,
"versionNonce": 736965404,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"points": [
[
103.0,
0.0
],
[
103.0,
48.0
],
[
0.0,
48.0
],
[
0.0,
96.0
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "node-qemu",
"focus": 0,
"gap": 4
},
"endBinding": {
"elementId": "node-vfio",
"focus": 0,
"gap": 4
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": true
},
{
"id": "edge-label-qemu-device-fd",
"type": "text",
"x": 399.5,
"y": 156.0,
"width": 90,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 778589170,
"version": 1,
"versionNonce": 213892165,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "장치 fd",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "장치 fd",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "edge-qemu-kvm-run",
"type": "arrow",
"x": 164.0,
"y": 148.0,
"width": 314.0,
"height": 104.5,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": null,
"seed": 449529868,
"version": 1,
"versionNonce": 1008374866,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"points": [
[
314.0,
0.0
],
[
314.0,
52.25
],
[
0.0,
52.25
],
[
0.0,
104.5
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "node-qemu",
"focus": 0,
"gap": 4
},
"endBinding": {
"elementId": "node-kvm",
"focus": 0,
"gap": 4
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": true
},
{
"id": "edge-label-qemu-kvm-run",
"type": "text",
"x": 276.0,
"y": 160.25,
"width": 90,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1197685344,
"version": 1,
"versionNonce": 1782962046,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "KVM_RUN",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "KVM_RUN",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "edge-qemu-vhost-ioctl",
"type": "arrow",
"x": 514.0,
"y": 148.0,
"width": 89.0,
"height": 104.5,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": null,
"seed": 1582010981,
"version": 1,
"versionNonce": 393196348,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"points": [
[
0.0,
0.0
],
[
0.0,
52.25
],
[
89.0,
52.25
],
[
89.0,
104.5
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "node-qemu",
"focus": 0,
"gap": 4
},
"endBinding": {
"elementId": "node-vhost",
"focus": 0,
"gap": 4
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": true
},
{
"id": "edge-label-qemu-vhost-ioctl",
"type": "text",
"x": 513.5,
"y": 160.25,
"width": 90,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 149615293,
"version": 1,
"versionNonce": 385858350,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "제어 ioctl",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "제어 ioctl",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "edge-qemu-virtqueue",
"type": "arrow",
"x": 532.0,
"y": 148.0,
"width": 307.0,
"height": 104.5,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": null,
"seed": 1873298031,
"version": 1,
"versionNonce": 1994100496,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"points": [
[
0.0,
0.0
],
[
0.0,
52.25
],
[
307.0,
52.25
],
[
307.0,
104.5
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "node-qemu",
"focus": 0,
"gap": 4
},
"endBinding": {
"elementId": "node-virtio-driver",
"focus": 0,
"gap": 4
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": true
},
{
"id": "edge-label-qemu-virtqueue",
"type": "text",
"x": 640.5,
"y": 160.25,
"width": 90,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 444563865,
"version": 1,
"versionNonce": 1977908933,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "virtqueue",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "virtqueue",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "edge-vfio-binds-device",
"type": "arrow",
"x": 393.0,
"y": 349.0,
"width": 239.5,
"height": 113.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": null,
"seed": 992274126,
"version": 1,
"versionNonce": 20624247,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"points": [
[
0.0,
0.0
],
[
0.0,
56.5
],
[
239.5,
56.5
],
[
239.5,
113.0
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "node-vfio",
"focus": 0,
"gap": 4
},
"endBinding": {
"elementId": "node-pci-device",
"focus": 0,
"gap": 4
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": true
},
{
"id": "edge-label-vfio-binds-device",
"type": "text",
"x": 467.75,
"y": 365.5,
"width": 90,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 78940901,
"version": 1,
"versionNonce": 280960500,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 13,
"fontFamily": 5,
"text": "vfio-pci 결합",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "vfio-pci 결합",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-qemu",
"type": "rectangle",
"x": 379.5,
"y": 60.0,
"width": 251.0,
"height": 88.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1265942130,
"version": 1,
"versionNonce": 447320704,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-qemu",
"type": "text",
"x": 389.5,
"y": 70.0,
"width": 231.0,
"height": 68.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 82355235,
"version": 1,
"versionNonce": 463780486,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "QEMU\n/dev/kvm\nKVM_CREATE_VM · KVM_CREATE_VCPU",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "QEMU\n/dev/kvm\nKVM_CREATE_VM · KVM_CREATE_VCPU",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-kvm",
"type": "rectangle",
"x": 70.0,
"y": 252.5,
"width": 188.0,
"height": 88.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1294725949,
"version": 1,
"versionNonce": 774205501,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-kvm",
"type": "text",
"x": 80.0,
"y": 262.5,
"width": 168.0,
"height": 68.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 820201432,
"version": 1,
"versionNonce": 242634004,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "KVM\nstruct kvm_run\nKVM_GET_VCPU_MMAP_SIZE",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "KVM\nstruct kvm_run\nKVM_GET_VCPU_MMAP_SIZE",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-vfio",
"type": "rectangle",
"x": 318.0,
"y": 244.0,
"width": 150.0,
"height": 105.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 223861255,
"version": 1,
"versionNonce": 909671610,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-vfio",
"type": "text",
"x": 328.0,
"y": 254.0,
"width": 130.0,
"height": 85.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 588619913,
"version": 1,
"versionNonce": 1353122638,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "VFIO\nvfio-pci\nIOMMU 그룹\n/dev/vfio/vfio",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "VFIO\nvfio-pci\nIOMMU 그룹\n/dev/vfio/vfio",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-vhost",
"type": "rectangle",
"x": 528.0,
"y": 252.5,
"width": 150.0,
"height": 88.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1987300733,
"version": 1,
"versionNonce": 128975583,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-vhost",
"type": "text",
"x": 538.0,
"y": 262.5,
"width": 130.0,
"height": 68.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1610481447,
"version": 1,
"versionNonce": 1653011569,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "vhost\n리눅스 커널 구현\nvirtqueue 공유",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "vhost\n리눅스 커널 구현\nvirtqueue 공유",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-virtio-driver",
"type": "rectangle",
"x": 738.0,
"y": 252.5,
"width": 202.0,
"height": 88.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 858344171,
"version": 1,
"versionNonce": 1614418838,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-virtio-driver",
"type": "text",
"x": 748.0,
"y": 262.5,
"width": 182.0,
"height": 68.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1644546083,
"version": 1,
"versionNonce": 1597362718,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "게스트 virtio 드라이버\nvirtio-pci · virtio-mmio\nvirtqueue",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "게스트 virtio 드라이버\nvirtio-pci · virtio-mmio\nvirtqueue",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-physical-cpu",
"type": "rectangle",
"x": 302.5,
"y": 445.0,
"width": 195.0,
"height": 105.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 79723510,
"version": 1,
"versionNonce": 75896935,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-physical-cpu",
"type": "text",
"x": 312.5,
"y": 455.0,
"width": 175.0,
"height": 85.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 244061788,
"version": 1,
"versionNonce": 1572847054,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "물리 CPU\nVMX root · VMX non-root\nVM entry · VM exit\nguest-state 영역",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "물리 CPU\nVMX root · VMX non-root\nVM entry · VM exit\nguest-state 영역",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-pci-device",
"type": "rectangle",
"x": 557.5,
"y": 462.0,
"width": 150.0,
"height": 71.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 124646055,
"version": 1,
"versionNonce": 1524968011,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-pci-device",
"type": "text",
"x": 567.5,
"y": 472.0,
"width": 130.0,
"height": 51.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 956412321,
"version": 1,
"versionNonce": 1361554348,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "물리 PCI 장치\n게스트 직접 할당",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "물리 PCI 장치\n게스트 직접 할당",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-guest-code",
"type": "rectangle",
"x": 325.0,
"y": 646.0,
"width": 150.0,
"height": 71.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1316201237,
"version": 1,
"versionNonce": 1955395610,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-guest-code",
"type": "text",
"x": 335.0,
"y": 656.0,
"width": 130.0,
"height": 51.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 517895106,
"version": 1,
"versionNonce": 849887495,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "게스트 코드\nvCPU",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "게스트 코드\nvCPU",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "node-iommu",
"type": "rectangle",
"x": 535.0,
"y": 646.0,
"width": 150.0,
"height": 71.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffffff",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1289147613,
"version": 1,
"versionNonce": 1538872766,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false
},
{
"id": "node-label-iommu",
"type": "text",
"x": 545.0,
"y": 656.0,
"width": 130.0,
"height": 51.0,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 0,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": null,
"roundness": {
"type": 3
},
"seed": 1510486535,
"version": 1,
"versionNonce": 1752225356,
"isDeleted": false,
"boundElements": [],
"updated": 0,
"link": null,
"locked": false,
"fontSize": 15,
"fontFamily": 5,
"text": "IOMMU\nDMA · 인터럽트 리매핑",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": null,
"originalText": "IOMMU\nDMA · 인터럽트 리매핑",
"autoResize": true,
"lineHeight": 1.25
}
],
"appState": {
"gridSize": 10,
"viewBackgroundColor": "#ffffff",
"currentItemFontFamily": 5
},
"files": {}
}