ARM on x86 & Ubuntu 24.04をQEMUで構築・性能測定

投稿日:November 12, 2025
Hero Image

x86_64なUbuntu24.04ホスト上において,QEMUを用いてaarchな環境を立てた.

環境構築

1. QEMUインストール

参考サイトではapt installにqemuが入っていたが,24.04では必要なし.

$ sudo apt install -y qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager
$ sudo apt install -y qemu-system-arm qemu-efi-aarch64 qemu-efi-arm qemu-system-arm

2. イメージ取得

取得とリサイズ.リサイズは必要に応じて,好みのサイズへ.

$ wget https://cloud-images.ubuntu.com/noble/20251031/noble-server-cloudimg-arm64.img
$ qemu-img resize  noble-server-cloudimg-arm64.img 100G

3. clodu-init用の設定

user-dataファイルを作成し,以下を記述.ubuntuユーザでubuntuというパスワードでログインできるようにしている.

#cloud-config
password: ubuntu
chpasswd: { expire: False }
ssh_pwauth: True

ファイル作成

$ touch meta-data
$ sudo apt install genisoimage
$ genisoimage -output ./udata.iso -volid cidata -joliet -rock user-data meta-data

4. ネットワークの設定

ホストマシンのNICをブリッジにして,外からアクセスできるようにする.

$ sudo apt  install network-manager
$ sudo virsh net-destroy default
$ sudo virsh net-undefine default

/etc/netplan/以下の設定ファイルに以下を記載.デバイス名やアドレスは適宜変更すること.

network:
  version: 2
  ethernets:
    enp39s0:
      optional: true
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      interfaces: [enp39s0]
      addresses: [192.168.1.10/24]
      routes:
      - to: "default"
        via: 192.168.1.1
      nameservers:
        addresses:
        - 192.168.1.1
      parameters:
        stp: false
      dhcp4: false
      dhcp6: false

設定反映.optionがあるとnetplan tryできない?
接続できなくなる可能性あり,慎重に実施すること.

$ sudo netplan apply

5. 起動

sudo virt-install \
  --connect qemu:///system \
  --name ubuntu-arm \
  --vcpus 8 \
  --ram 16384 \
  --hvm \
  --virt-type qemu \
  --arch aarch64 \
  --os-variant ubuntu24.04 \
  --import \
  --disk path=$PWD/noble-server-cloudimg-arm64.img \
  --disk path="$PWD/udata.iso,device=cdrom" \
  --network bridge=br0 \

Ctrl+]でVMから出れる.

性能測定

性能を以下の環境・方法で測定してみた.
なお,使用したベンチマークはコア単体の性能というよりは「メモリバンド幅による効果が大きいベンチマーク」出典であることに注意.

使用マシン

  • CPU: Ryzen7 3700X (8 Cores / 16 Threads)
  • RAM: 32 GB @3200 MHz (16GB*2)
  • Disk: 1 TB SATA SSD
  • OS: Ubuntu 24.04.3 LTS (GNU/Linux 6.8.0-87-generic x86_64)

なお,CPUはオーバークロックは行っておらず,デフォルトの可変クロックの設定を用いている.

ARM測定環境

CPUは「Neoverse-V1」と「Cortex-A57」(CPUを使用しないときはデフォルトでこれになる)を使用.

  • CPU: 8 cores
  • RAM: 16 GB
  • OS:Ubuntu 24.04.3 LTS (GNU/Linux 6.8.0-87-generic x86_64)

起動コマンド

sudo virt-install \
  --connect qemu:///system \
  --name ubuntu-arm \
  --vcpus 8 \
  --ram 16384 \
  --hvm \
  --virt-type qemu \
  --arch aarch64 \
  --os-variant ubuntu24.04 \
  --import \
  --disk path=$PWD/my-ubuntu-arm-disk.qcow2 \
  --disk path="$PWD/udata.iso,device=cdrom" \
  --network bridge=br0 \
  --cpu=<arch name>

測定方法

姫野ベンチマークを続けて3回実行し,「cpu」・「MFLOPS measured」の値の平均をとった.
「C (with Makefile)」を用いて,MIDDLEの問題を使用した.
コンパイラはgcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04)を使用し,コンパイルオプションは-O3で実行した.

測定結果

以下の表のようになった.
約56~67分の1の性能になった.

CPU 平均実行時間 平均MFLOPS
Ryzen7 3700X (ホストマシン上) 2.7 10087.7
Neoverse-V1 183.7 149.3
Cortex-A57 152.0 180.4

そのほかメモ

CLIでVMを管理

virshコマンドを使用する.
virsh listで一覧表示や,virsh undefineで削除?.
UEFIが使われていてvirsh undefineできないときは,--nvramオプションを追加

実行時の権限エラー

以下のようなエラーがでた.

WARNING  /home/USER_NAME/workspace/qemu-arm/noble-server-cloudimg-arm64.img may not be accessible by the hypervisor. You will need to grant the 'libvirt-qemu' user search permissions for the following directories: ['/home/USER_NAME']
WARNING  /home/USER_NAME/workspace/qemu-arm/udata.iso may not be accessible by the hypervisor. You will need to grant the 'libvirt-qemu' user search permissions for the following directories: ['/home/USER_NAME']

よい方法かどうかはわからないが,とりあえず以下で解決.

sudo chmod o+x /home/USER_NAME

同様のエラーがでたら,エラー箇所に都度権限付与.

ディスクの書き込み先

このままだと,ダウンロードしてきたimgそのものにデータが書き込まれてしまう.
それを避けたい場合は,以下のようにする.

$ qemu-img create -f qcow2 -F qcow2 \
  -b $PWD/noble-server-cloudimg-arm64.img \
  $PWD/my-ubuntu-arm-disk.qcow2

起動時に,--disk path=$PWD/my-ubuntu-arm-disk.qcow2を代わりに指定.

CPUを変えてみる

使用できるCPUは以下で表示できる.

$ qemu-system-aarch64 -cpu help -machine virt

起動時に,--cpu <名前>で指定できる.

cloud-init停止

$ sudo touch /etc/cloud/cloud-init.disabled

A64FXのエミュレーション

ベンチマーク時に入れたかったが,以下の出力で停止し,使用できなかった.
なお,error: prohibited by secure boot policy.は他のCPUでも出ても起動できた.
secure boot無効化を試したが,--boot uefi,loader.secure='no'のみでは同様のログが出てきてsecure bootが有効化されていそうだったため,要調査.

Starting install...
Creating domain...                                                                                                                |    0 B  00:00:00
Running text console command: virsh --connect qemu:///system console ubuntu-arm
Connected to domain 'ubuntu-arm'
Escape character is ^] (Ctrl + ])
BdsDxe: loading Boot0001 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x1,0x4)/Pci(0x0,0x0)
BdsDxe: starting Boot0001 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x1,0x4)/Pci(0x0,0x0)
Reset System
UEFI firmware (version 2024.02-2ubuntu0.4 built at 03:51:00 on Jun  4 2025)
BdsDxe: loading Boot0003 "Ubuntu" from HD(15,GPT,B128B9E4-12A7-4969-B6F2-5E6E6854EC31,0x800,0x31801)/\EFI\ubuntu\shimaa64.efi
BdsDxe: starting Boot0003 "Ubuntu" from HD(15,GPT,B128B9E4-12A7-4969-B6F2-5E6E6854EC31,0x800,0x31801)/\EFI\ubuntu\shimaa64.efi
error: prohibited by secure boot policy.
EFI stub: Booting Linux Kernel...
EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
EFI stub: Measured initrd data into PCR 9
EFI stub: Generating empty DTB
EFI stub: Exiting boot services...
EFI stub: UEFI Secure Boot is enabled.

おわりに

実際にいろいろなCPUを手軽に試せて楽しい半面,何かこの上で検証をやろうとは個人的には思えない動作速度であった.
ARM実機買いたい欲が一層強まってしまった...

参考資料

以下を参考にさせていただきました.