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-arm2. イメージ取得
取得とリサイズ.リサイズは必要に応じて,好みのサイズへ.
$ wget https://cloud-images.ubuntu.com/noble/20251031/noble-server-cloudimg-arm64.img
$ qemu-img resize noble-server-cloudimg-arm64.img 100G3. 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.disabledA64FXのエミュレーション
ベンチマーク時に入れたかったが,以下の出力で停止し,使用できなかった.
なお,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実機買いたい欲が一層強まってしまった...
参考資料
以下を参考にさせていただきました.
