1. 개요
Apple이 M1 CPU를 만들었다고 했을 땐 크게 관심이 없었는데 여러 리뷰를 보니까 성능도 좋으면서(최적화 잘 된 것만) 저전력으로 동작한다는 얘기를 많이 하기에 냅다 질러버렸다..... (아아...)
다만 Linux Application 개발자로서 Linux가 있어야 맴이 편하기 때문에 Virtual Machine이라도 하나 구축하는게 좋은데 M1 Cpu를 사용하다 보니 Parellels, VMWare, VirtualBox 다 공식 버전이 없는 상태이다.
그러던 와중에 Windows 10 ARM버전을 구동하는데 성공했다는 얘기를 듣고 검색해보니 역시나 Ubuntu 20.04 ARM을 구동하는 방법이 존재했고 그 방법을 공유하고자 본 포스트를 작성한다.
2. Prepare
2-1. homebrew install
Homebrew 사이트에 친절히 설명 되어 있다.
2-2. Install QEMU and packages
brew install ninja pkgconfig glib pixman qemu
Reference의 내용으로는 QEMU Source를 받아서 관련 Patch를 적용하는 방법으로 가이드하고 있으나 뭔가 문제가 있는지 제대로 동작하지 않는다. 따라서 Pre-built된 QEMU 바이너리를 이용한다. (아래 링크의 파일 다운로드)
mega.nz/file/QYB0QTrC#p6IMBJlFqqNKuGonwrDkPOVKQj8yHCVgiLOYVaGvs4M
다만 qemu-img 라는 command를 사용해야 하기 때문에 brew install로 qemu package를 같이 설치해 준다.
2-3. Create VM HDD Image
Virtual Machine 에서 사용할 가상 HDD를 생성한다.
qemu-img 를 사용하여 40Gb의 가상 HDD 파일을 생성
qemu-img create -f qcow2 /path/to/Ubuntu.qcow2 40G
2-4. Download Ubuntu 20.04 on ARM and EFI Image
Ubuntu 20.04.2 TLS Daily Build 이미지로 AMD64가 아니라 ARM64 이미지로 받아야 한다.
Ubuntu 20.04.2 : cdimage.ubuntu.com/focal/daily-live/current/
EFI Image : www.sevarg.net/images/2021-qemu-m1/QEMU_EFI.fd
2-5. Run QEMU with Ubuntu 20.04 Install Image
2-2 에서 받은 QEMU prebuilt image의 압축을 풀면 qemu-system-aarch64 실행파일이 있으며 이를 아래와 같이 실행한다.
-m은 가상머신에 할당할 RAM 크기를 의미하며 -smp는 가상머신에 할당할 cpu core 갯수를 의미한다.
-bios의 인자로 /path/to/QEMU_EFI.fd 를 2-4에서 받은 EFI Image 경로를 적어주며
-drive file=/path/to/Ubuntu.qcow2,if=virtio,cache-writethrough 에서 /path/to/Ubuntu.qcow2는 2-3에서 만들었던 가상 HDD 파일의 경로를 적으면 된다.
가장 마지막의 -cdrom /path/to/focal-desktop-arm64.iso는 2-4에서 다운로드한 Ubuntu 20.04.2 on ARM ISO 파일의 경로를 적으면 된다.
./qemu-system-aarch64 \
-serial stdio \
-M virt,highmem=off \
-accel hvf \
-cpu cortex-a72 \
-smp 4 \
-m 4096 \
-bios /path/to/QEMU_EFI.fd \
-device virtio-gpu-pci \
-display default,show-cursor=on \
-device qemu-xhci \
-device usb-kbd \
-device usb-tablet \
-device intel-hda \
-device hda-duplex \
-drive file=/path/to/Ubuntu.qcow2,if=virtio,cache=writethrough \
-cdrom /path/to/focal-desktop-arm64.iso
2-6. Install Ubuntu 20.04
실행 후 통상적인 Ubuntu 설치 화면이 나오며 설치를 진행하면 된다.
3. Running
설치 후 실행은 아래와 같이 하면 된다. (-cdrom 옵션만 없애면 된다)
./qemu-system-aarch64 \
-serial stdio \
-M virt,highmem=off \
-accel hvf \
-cpu cortex-a72 \
-smp 4 \
-m 4096 \
-bios /path/to/QEMU_EFI.fd \
-device virtio-gpu-pci \
-display default,show-cursor=on \
-device qemu-xhci \
-device usb-kbd \
-device usb-tablet \
-device intel-hda \
-device hda-duplex \
-drive file=/path/to/Ubuntu.qcow2,if=virtio,cache=writethrough
CPU 8개를 할당하여 Linux Kernel Build를 해본 결과 생각보다 빠른 성능을 보여줬으며 Linux Application 개발자로서 급할 땐 이렇게 구성해서라도 사용하면 될 듯 싶다.
다만 ARM버전이라서 Compile 후 나온 이미지는 Arm 용 Binary라서 일반 PC에서는 사용할 수 없으나 Embedded Linux 에서는 활용도가 좋을 것으로 보인다. (Embedded Linux 는 AP를 대부분 ARM 을 사용한 SoC이기 때문)
근데 어디까지나 생각외로 빠르단 의미지 절대적으로 빠르다는 아님을 명시하시길 바랍니다.
만약 다음 버전의 M1이 16코어 & 32Gb RAM 이 나온다고 하면 CTO로 주문해서 구매할 것 같다... 으어 내 텅장.... ㅠㅠ
4. Reference
www.sevarg.net/2021/01/09/arm-mac-mini-and-boinc/