QEMU 4.0 ์—๋ฎฌ๋ ˆ์ดํ„ฐ ์ถœ์‹œ

ํ˜•์„ฑ๋œ ํ”„๋กœ์ ํŠธ ๋ฆด๋ฆฌ์Šค QEMU 4.0. ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ์„œ QEMU๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์™„์ „ํžˆ ๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ํ•˜๋‚˜์˜ ํ•˜๋“œ์›จ์–ด ํ”Œ๋žซํผ์šฉ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด x86 ํ˜ธํ™˜ PC์—์„œ ARM ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. QEMU์˜ ๊ฐ€์ƒํ™” ๋ชจ๋“œ์—์„œ๋Š” CPU์—์„œ ๋ช…๋ น์„ ์ง์ ‘ ์‹คํ–‰ํ•˜๊ณ  Xen ํ•˜์ดํผ๋ฐ”์ด์ € ๋˜๋Š” KVM ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ์˜ ์ฝ”๋“œ ์‹คํ–‰ ์„ฑ๋Šฅ์ด ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ์›๋ž˜ x86 ํ”Œ๋žซํผ์šฉ์œผ๋กœ ๋นŒ๋“œ๋œ Linux ์‹คํ–‰ ํŒŒ์ผ์ด ๋น„ x86 ์•„ํ‚คํ…์ฒ˜์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก Fabrice Bellard๊ฐ€ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋…„๊ฐ„์˜ ๊ฐœ๋ฐœ์„ ํ†ตํ•ด 14๊ฐœ์˜ ํ•˜๋“œ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์—๋ฎฌ๋ ˆ์ด์…˜ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ์—๋ฎฌ๋ ˆ์ดํŠธ๋œ ํ•˜๋“œ์›จ์–ด ์žฅ์น˜์˜ ์ˆ˜๋Š” 400๊ฐœ๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ 4.0์„ ์ค€๋น„ํ•˜๋ฉด์„œ 3100๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ 220๊ฐœ ์ด์ƒ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ด์‡  ๊ฐœ๋Ÿ‰QEMU 4.0์— ์ถ”๊ฐ€๋จ:

  • ARMv8+ ๋ช…๋ น ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ARM ์•„ํ‚คํ…์ฒ˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค: SB, PredInv, HPD, LOR, FHM, AA32HPD,
    PAuth, JSConv, CondM, FRINT ๋ฐ BTI. Musca ๋ฐ MPS2 ๋ณด๋“œ ์—๋ฎฌ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ARM PMU(์ „์› ๊ด€๋ฆฌ ์žฅ์น˜) ์—๋ฎฌ๋ ˆ์ด์…˜์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์œผ๋กœ ๋ฏธ๋• 255GB ์ด์ƒ์˜ RAM์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๊ณผ "noload" ์œ ํ˜•์˜ u-boot ์ด๋ฏธ์ง€ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ€์ƒํ™” ๊ฐ€์† ์—”์ง„์˜ x86 ์•„ํ‚คํ…์ฒ˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ํ•ดํ‚น (Intel Hardware Accelerated Execution)์€ Linux ๋ฐ NetBSD์™€ ๊ฐ™์€ POSIX ํ˜ธํ™˜ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” Darwin ํ”Œ๋žซํผ๋งŒ ์ง€์›๋จ). ์ด์ œ ๋ฉ”์ธ PCIe ํฌํŠธ์šฉ Q35 ์นฉ์…‹ ์—๋ฎฌ๋ ˆ์ดํ„ฐ(ICH9)์—์„œ PCIe 16 ์‚ฌ์–‘์— ์ •์˜๋œ ์ตœ๋Œ€ ์†๋„(32GT/s)์™€ ์—ฐ๊ฒฐ ๋ผ์ธ ์ˆ˜(x4.0)๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด 2.5GT๋Š” ์ด์ „ ์œ ํ˜•์˜ QEMU ์‹œ์Šคํ…œ /s ๋ฐ x1์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. "-kernel" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Xen PVH ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • MIPS ์•„ํ‚คํ…์ฒ˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—๋Š” ํด๋ž˜์‹ TCG(Tiny Code Generator) ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์—๋ฎฌ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ CPU I7200(nanoMIPS32 ISA) ๋ฐ I6500(MIPS64R6 ISA) ์—๋ฎฌ๋ ˆ์ด์…˜ ์ง€์›, QMP(QEMU ๊ด€๋ฆฌ ํ”„๋กœํ† ์ฝœ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CPU ์œ ํ˜• ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ, SAARI ๋ฐ SAAR ๊ตฌ์„ฑ ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Fulong 2E ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Interthread Communication Unit ๊ตฌํ˜„์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • PowerPC ์•„ํ‚คํ…์ฒ˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—๋Š” XIVE ์ธํ„ฐ๋ŸฝํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์—๋ฎฌ๋ ˆ์ด์…˜ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ , POWER9์— ๋Œ€ํ•œ ์ง€์›์ด ํ™•์žฅ๋˜์—ˆ์œผ๋ฉฐ, P ์‹œ๋ฆฌ์ฆˆ์—๋Š” PCI ํ˜ธ์ŠคํŠธ ๋ธŒ๋ฆฌ์ง€(PHB, PCI ํ˜ธ์ŠคํŠธ ๋ธŒ๋ฆฌ์ง€)๋ฅผ ํ•ซ ํ”Œ๋Ÿฌ๊ทธํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Spectre ๋ฐ Meltdown ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • RISC-V ์•„ํ‚คํ…์ฒ˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์— PCI ๋ฐ USB ์—๋ฎฌ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์žฅ๋œ ๋””๋ฒ„๊น… ์„œ๋ฒ„(gdbserver)๋Š” ์ด์ œ XML ํŒŒ์ผ์˜ ๋ ˆ์ง€์Šคํ„ฐ ๋ชฉ๋ก ์ง€์ •์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. mstatus ํ•„๋“œ TSR, TW ๋ฐ TVM์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • s390 ์•„ํ‚คํ…์ฒ˜ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—๋Š” z14 GA 2 CPU ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ง€์›๊ณผ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐ ๋ฒกํ„ฐ ์—ฐ์‚ฐ์„ ์œ„ํ•œ ๋ช…๋ น์–ด ํ™•์žฅ ์—๋ฎฌ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฅ์น˜๋ฅผ ํ•ซํ”Œ๋Ÿฌ๊ทธํ•˜๋Š” ๊ธฐ๋Šฅ์ด vfio-ap์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Tensilica Xtensa ์ œํ’ˆ๊ตฐ ํ”„๋กœ์„ธ์„œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” Linux์— ๋Œ€ํ•œ SMP ์ง€์›์„ ๊ฐœ์„ ํ•˜๊ณ  FLIX(Flexible length Instructions Extension)์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • QEMU GTK ์ธํ„ฐํŽ˜์ด์Šค์™€ ์œ ์‚ฌํ•œ ๋””์ž์ธ์œผ๋กœ Spice ์›๊ฒฉ ์•ก์„ธ์Šค ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „์„ ๊ตฌ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด '-display spice-app' ์˜ต์…˜์ด ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • VNC ์„œ๋ฒ„ ๊ตฌํ˜„์— tls-authz/sasl-authz ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค ์ œ์–ด์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • QMP(QEMU ๊ด€๋ฆฌ ํ”„๋กœํ† ์ฝœ)๋Š” ์ค‘์•™/์™ธ๋ถ€(๋Œ€์—ญ ์™ธ) ๋ช…๋ น ์‹คํ–‰์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ธ”๋ก ์žฅ์น˜ ์ž‘์—…์„ ์œ„ํ•œ ์ถ”๊ฐ€ ๋ช…๋ น์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์›๋˜๋Š” mdev(Intel vGPU)์šฉ VFIO์— EDID ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ด ์ถ”๊ฐ€๋˜์–ด xres ๋ฐ yres ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด ํ•ด์ƒ๋„๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Xen์šฉ์œผ๋กœ ์ƒˆ๋กœ์šด 'xen-disk' ์žฅ์น˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์žฅ์น˜๋Š” (xenstore์— ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ณ ๋„) Xen PV์šฉ ๋””์Šคํฌ ๋ฐฑ์—”๋“œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Xen PV ๋””์Šคํฌ ๋ฐฑ์—”๋“œ์˜ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ ๋””์Šคํฌ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ๋ธ”๋ก ์žฅ์น˜์—์„œ ์ง„๋‹จ ๋ฐ ์ถ”์  ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์œผ๋ฉฐ, ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” NBD ์„œ๋ฒ„ ๊ตฌํ˜„๊ณผ์˜ ํด๋ผ์ด์–ธํŠธ ํ˜ธํ™˜์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. qemu-nbd์— "--bitmap", "--list" ๋ฐ "--tls-authz" ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์—๋ฎฌ๋ ˆ์ดํŠธ๋œ IDE/๊ฒฝ์œ  ์žฅ์น˜์— PCI IDE ๋ชจ๋“œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • lzfse ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ dmg ์ด๋ฏธ์ง€๋ฅผ ์••์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. qcow2 ํ˜•์‹์˜ ๊ฒฝ์šฐ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์—ฐ๊ฒฐ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. qcow2 ์••์ถ• ํ’€๊ธฐ ์ž‘์—…์€ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋กœ ์ด๋™๋ฉ๋‹ˆ๋‹ค. vmdk ์ด๋ฏธ์ง€์— "blockdev-create" ์ž‘์—…์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • virtio-blk ๋ธ”๋ก ์žฅ์น˜์—๋Š” DISCARD(๋ธ”๋ก ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์•Œ๋ฆผ) ๋ฐ WRITE_ZEROES(๋…ผ๋ฆฌ ๋ธ”๋ก ๋ฒ”์œ„๋ฅผ XNUMX์œผ๋กœ ์ง€์ •) ์ž‘์—…์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • pvrdma ์žฅ์น˜๋Š” RDMA ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ๊ทธ๋žจ ์„œ๋น„์Šค(MAD)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์—ฌ ๋ณ€๊ฒฝ, ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "-fsdev" ๋ฐ "-virtfs"์˜ "handle" ์˜ต์…˜ ๋Œ€์‹  "local" ๋˜๋Š” "proxy" ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "-virtioconsole"("-device virtconsole"๋กœ ๋Œ€์ฒด), "-no-frame", "-clock", "-enable-hax"("-accel hax"๋กœ ๋Œ€์ฒด) ์˜ต์…˜์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฅ์น˜ "ivshmem"์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค("ivshmem-doorbell" ๋ฐ "ivshmem-plain"์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ). SDL1.2๋ฅผ ์‚ฌ์šฉํ•œ ๋นŒ๋“œ ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(SDL2๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ).

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€