🐧 Köra Ubuntu via QEMU pĂ„ M1 Mac ïŁż

PermalÀnk
Datavetare ♄ ★
●

🐧 Köra Ubuntu via QEMU pĂ„ M1 Mac ïŁż

NÀr jag vÀl tog mig tid att titta lite nÀrmare pÄ hur Alexander Graf fick igÄng Windows on ARM64 via QEMU pÄ "Apple silicon" blev det föga förvÄnande rÀtt uppenbart att med lite smÀrre justeringar kommer det Àven kunna anvÀndas för att köra Linux.

Det som Àr det finna i krÄksÄngen med herr Grafs patch Àr att den adderar stöd för HW-accelering i QEMU. De som Àr vana med Linux kÀnner sÀker till KVM (Kernel-based Virtual Machine), vilket Àr motsvarande teknik pÄ Linux som Graf nu fÄtt igÄng under MacOS.

GÄr att köra QEMU Àven utan "hfv" acceleration (HFV Àr namnet pÄ MacOS motsvarighet till KVM, stöd finns redan för x86-baserade Mac:ar och patchen lÀgger till stöd för ARM64 baserade), men utan sÄdan acceleration Àr det flera gÄnger lÄngsammare Àn med acceleration. QEMU kommer fortfarande behöva emulera vissa periferienheter, men om man i sÄ lÀng utstrÀckning som möjligt anvÀnder de som bygger pÄ en teknik som kallas VirtIO

SÄ hÀr följer en How-To för att fÄ igÄng Ubuntu 20.04 server under QEMU pÄ M1 Mac

Bygga en patchad version av QEMU

Installera Apples CLI verktyg för utvecklare

xcode-select --install

Installera MacPorts: https://www.macports.org/install.php
Till skillnad frÄn Homebrew sÄ har MacPorts redan rÀtt fulltÀckande ARM64-native stöd

Följande saker mÄste finnas för att QEMU ska kunna byggas

sudo port install ninja pkgconfig texinfo libtool glib2 libpixman

HÀmta QEMU kÀllkoden

Applicera Alexander Grafs patchar och bygg QEMU

cd qemu git checkout 944fdc5 -b m1_hvf curl https://patchwork.kernel.org/series/392975/mbox | git am mkdir build cd build ../configure --target-list=aarch64-softmmu --enable-cocoa make -j 8

Om allt gÄr bra (notera hur snabbt M1 bygger QEMU!!!) ska det bl.a. nu finnas en qemu-system-aarch64 samt qemu-img. Finns massa annat ocksÄ, men Àr dessa tvÄ som behövs senare.

Skapa virtuell disk att lagra installationen pÄ

Installationsdisken för Ubuntu skapas pÄ följande vis, Àndra storleken till vad som Àr rÀtt för dig

qemu-img create -f qcow2 hda.qcow2 64G

UEFI/bootrom

Behövs ocksÄ ett "BIOS", vilket i ARM64 fallet Àr en lÀmplig UEFI. En sÄdan kan laddas ner hÀrifrÄn

Skapa en virtuell flash-disk för UEFI och en dÀr konfiguration kan sparas

tar xzvf QEMU_EFI-*.tar.gz dd if=/dev/zero of=pflash0.img bs=1m count=64 dd if=/dev/zero of=pflash1.img bs=1m count=64 dd if=QEMU_EFI.fd of=pflash0.img conv=notrunc dd if=QEMU_VARS.fd of=pflash1.img conv=notrunc

Ladda ner Ubuntu installationen

Jag anvÀnder Ubuntu server 20.04 LTS som man hittar hÀr. Filen heter ubuntu-20.04.1-live-server-arm64.iso i mitt fall.

Installera

Följande kommer installera Ubuntu pÄ hda.qcow2 disken som skapades ovan

qemu-system_aarch64 \ -M virt,highmem=off -accel hvf -cpu max -m 4G -smp 4 \ -device virtio-net-pci,netdev=net0,romfile="" \ -netdev type=user,id=net0,hostfwd=tcp::2222-:22 \ -device virtio-blk-pci,drive=drv0 \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-pci,rng=rng0 \ -drive format=qcow2,file=hda.qcow2,if=none,id=drv0 \ -drive if=pflash,format=raw,file=pflash0.img,readonly \ -drive if=pflash,format=raw,file=pflash1.img \ -nographic \ -device virtio-scsi \ -device scsi-cd,drive=cd \ -drive if=none,id=cd,file=ubuntu-20.04.1-live-server-arm64.iso

Kör igenom hela installationen, vÀlj "reboot" i slutet och stÀng ned QEMU.

Köra Ubuntu

Enda man behöver Àndra Àr sÄ att installationsmediet inte lÀngre kommer med, detta kör installationen och sÀtter upp sÄ man kan SSH:a till "localhost:2222" för att komma in i sin instans. Terminalemumering Àr vÀsentligt bÀttre via SSH Àn att köra pÄ seriekonsolen

qemu-system_aarch64 \ -M virt,highmem=off -accel hvf -cpu max -m 4G -smp 4 \ -device virtio-net-pci,netdev=net0,romfile="" \ -netdev type=user,id=net0,hostfwd=tcp::2222-:22 \ -device virtio-blk-pci,drive=drv0 \ -object rng-random,filename=/dev/urandom,id=rng0 \ -device virtio-rng-pci,rng=rng0 \ -drive format=qcow2,file=hda.qcow2,if=none,id=drv0 \ -drive if=pflash,format=raw,file=pflash0.img,readonly \ -drive if=pflash,format=raw,file=pflash1.img \ -nographic

Har inte hunnit köra nÄgra benchmarks Àn, men som han tycket om Linux: det kÀnns rÀtt snabbt, gÄr överhuvudtaget inte att jÀmföra med att köra t.ex. RPi4.

Första inloggning för egen del

ssh -p2222 localhost kjonsson@localhost's password: Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-56-generic aarch64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Thu Dec 3 10:24:00 UTC 2020 System load: 0.0 Usage of /: 19.8% of 30.63GB Memory usage: 5% Swap usage: 0% Processes: 135 Users logged in: 0 IPv4 address for enp0s1: 10.0.2.15 IPv6 address for enp0s1: fec0::5054:ff:fe12:3456 80 updates can be installed immediately. 0 of these updates are security updates. To see these additional updates run: apt list --upgradable Last login: Thu Dec 3 09:59:17 2020 from 10.0.2.2 To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. kjonsson@icestorm:~$

PermalÀnk
Medlem ♄
●

Kul. Hur ser det ut med docker? kan du köra en x86 virt maskin ?

PermalÀnk
Datavetare ♄ ★
●
Skrivet av Meto:

Kul. Hur ser det ut med docker? kan du köra en x86 virt maskin ?

Är egentligen Docker jag vill köra. Men just nu finns en del hinder, primĂ€rt att sprĂ„ket Go inte har stöd för ARM64/MacOS. Det positiva Ă€r att Go har stöd för ARM64/Linux (har installerat under Ubuntu 20.04 trĂ„den handlar om) och ARM64/MacOS stöd kommer i nĂ€sta uppdatering, verkar hĂ€nda början av 2021.

Docker har sagt att man jobbar pÄ stöd för ARM64/MacOS, sÄ en release lÀr komma relativt kort efter att Golang för ARM64/MacOS slÀpps.

Det Àr möjligt att anvÀnda QEMU för att köra t.ex. x86_64 pÄ ARM64 eller egentligen vilken CPU som helst QEMU stödjer (vilket Àr rÀtt mÄnga). Problemet Àr man bara kan ha HW-accelererad virtualisering i QEMU om man kör ARM64 pÄ ARM64 (eller x86_64 pÄ x86_64) ihop med HW-stöd i CPU + de bibliotek som krÀvs för att anvÀnda HW-stöder i CPU (KVM under Linux och HVF under MacOS). Utan sÄdan HW-stöd kommer det bli lÄngsamt.

AnvÀnder QEMU en hel del i jobbet för att köra ARM och RISC-V pÄ min x86_64 baserade Ubuntu maskin. Det som jag vill testa med ovan Àr att köra vÄran utvecklingsmiljö vi har pÄ jobbet. Den har lÀnge bara funnits pÄ x86/x86_64, den fungerande pÄ SPARC för ~15 Är sedan (nÀr SPARC fortfarande var relevant). Kanske hÀngde SPARC-generna kvar, för tog en person ett par dagar att fÄ igÄng miljön pÄ ARM64. Enda vi testat pÄ sÄ hÀr lÄngt Àr en RPi4, M1 Àr ett gÀng heltalsfaktorer snabbare.

Hoppas det blir riktigt bra, dÄ kan man motivera IT att vi ska dumpa gammel-PCn vi kör nu och fÄ MBP i stÀllet

Har kört Ubuntu 20.04 pÄ ARM64 sedan i april, det pÄ en RPi4. Sett till funktion fungerar Linux direkt lysande pÄ ARM64, det Àr mer moget Àn MacOS/ARM64. En komplicerande faktor för MacOS/ARM64 Àr att de valt en lite annorlunda ABI Àn referensen som Arm föreslÄr (vilket Àr vad bÄde Windows och Linux anvÀnder). Det Àr relativt smÄ skillnader, men Àndock skillnader, vilket krÀver en insats frÄn alla kompilatorer som man vill ska stödja MacOS/ARM64.

Mycket fungerar redan dÄ det mesta som har nÄgot Är pÄ nacken bygger pÄ C eller C++, dÀr finns redan bra stöd frÄn Apple sjÀlva. Vidare fungerar Apples egna saker som Swift bra. Rust stöd, som ihop med Go Àr en blocker för Homebrew stöd, vÀntas under december.

Största bristen för egen del Àr att det saknas en Fortran kompilatorer som stödjer MacOS/ARM64. Inte för att jag personligen tÀnker skriva nÄgot i Fortran, men finns rÀtt mycket existerande kod inom matematiksfÀren bygger pÄ Fortran och utan sÄdant stöd kommer statistiksprÄket R inte fungera (det fungerar pÄ Linux/ARM64, sÄ nu har jag ett sÀtt att köra det). Finns indikationer pÄ att Apple inser vÀrdet av R och kommer se till att ta fram de resurser som krÀvs för att fixa stöd för GNU Fortran (gfortran, Àr det som anvÀnds pÄ Linux).

Har gjort nÄgra snabbskott runt prestanda, verkar som QEMU/ARM64+HVF presterar 80-90 % av att köra "native" pÄ MacOS. Förhoppningsvis Àr det tecken pÄ omoget QEMU+HVF stöd, för kör man x86_64 pÄ x86_64 via Linux/KVM brukar man ligga pÄ 90-100 % av native hastighet.

PermalÀnk
Medlem ♄
●
Skrivet av Yoshman:

Största bristen för egen del Àr att det saknas en Fortran kompilatorer som stödjer MacOS/ARM64. Inte för att jag personligen tÀnker skriva nÄgot i Fortran, men finns rÀtt mycket existerande kod inom matematiksfÀren bygger pÄ Fortran och utan sÄdant stöd kommer statistiksprÄket R inte fungera (det fungerar pÄ Linux/ARM64, sÄ nu har jag ett sÀtt att köra det). Finns indikationer pÄ att Apple inser vÀrdet av R och kommer se till att ta fram de resurser som krÀvs för att fixa stöd för GNU Fortran (gfortran, Àr det som anvÀnds pÄ Linux).

Jag instĂ€mmer helt. Är nybliven Ă€gare till en Macbook Pro (M1 / 16 GB RAM / 512 GB SSD) och det jag saknar Ă€r en Fortran-kompilator. Förutom R Ă€r det Ă€ven sĂ„ att mĂ„nga Python-bibliotek (SciPy m.fl.) krĂ€ver en sĂ„dan kompilator för att bygga. Om man vill visualisera kvantitativ data snabbt och lĂ€tt Ă€r det Fortran-beroende sprĂ„k och bibliotek som gĂ€ller ganska ofta.

Men den som vÀntar pÄ nÄgot gott...

PermalÀnk
Medlem ♄
●

Nya patchar med WFI-stöd

Tack för de överskÄdliga instruktionerna!

Jag testade setupen pÄ min M1 Macbook Air och mÀrkte snart att emuleringen kör de 4 tilldelade kÀrnorna för fullt Àven nÀr gÀstsystemet Àr inaktivt. Det beror pÄ att den ovanstÄende patchningen inte implementerar WFI (wait for interrupt). Nu Àr det ÄtgÀrdat, se https://patchew.org/QEMU/20201211151300.85322-1-agraf@csgraf..... De nya patcharna har ocksÄ en hel del andra förbÀttringar och de kan appliceras automatiskt pÄ kÀllkoden för quemu version 5.2.0 som slÀpptes efter commit 944fdc5.

Kör följande kommandon i git-repot för qemu:

git checkout v5.2.0 -B m1_hvf curl https:""//patchew.org/QEMU/20201211151300.85322-1-agraf@csgraf.de/mbox | git am

(Citattecknen i addressen finns dÀr bara för att forumet inte skall göra om den till en förkortad lÀnk.)

Kör config-kommandot i de ursprungliga instruktionerna och bygg om qemu. Bygget gÄr rÀtt fort, sÄ jag körde "make clean" före det nya bygget Àven om det kanske inte behövs.

PermalÀnk
Datavetare ♄ ★
●
Skrivet av Björn Samuelsson:

Tack för de överskÄdliga instruktionerna!

Jag testade setupen pÄ min M1 Macbook Air och mÀrkte snart att emuleringen kör de 4 tilldelade kÀrnorna för fullt Àven nÀr gÀstsystemet Àr inaktivt. Det beror pÄ att den ovanstÄende patchningen inte implementerar WFI (wait for interrupt). Nu Àr det ÄtgÀrdat, se https://patchew.org/QEMU/20201211151300.85322-1-agraf@csgraf..... De nya patcharna har ocksÄ en hel del andra förbÀttringar och de kan appliceras automatiskt pÄ kÀllkoden för quemu version 5.2.0 som slÀpptes efter commit 944fdc5.

Kör följande kommandon i git-repot för qemu:

git checkout v5.2.0 -B m1_hvf curl https:""//patchew.org/QEMU/20201211151300.85322-1-agraf@csgraf.de/mbox | git am

(Citattecknen i addressen finns dÀr bara för att forumet inte skall göra om den till en förkortad lÀnk.)

Kör config-kommandot i de ursprungliga instruktionerna och bygg om qemu. Bygget gÄr rÀtt fort, sÄ jag körde "make clean" före det nya bygget Àven om det kanske inte behövs.

Noterade sjÀlv att QEMU lÄg och drog 100 %, sÄ stÀngde av den.
Applicerade de nya patcharna och nu fungerar det som vÀntat, sÄ tack för informationen!

QEMU Ă€r vĂ€ldigt anvĂ€ndbart, men lite beroende pĂ„ vad man vill Ă„stadkomma sĂ„ kan Docker vara en bĂ€ttre lösning för Linux stöd. Finns sedan nĂ„gra veckor tillbaka en preview av Docker för MacOS/ARM64. 🐳🐳🐳

En trevlig egenskap hos Docker Àr att man kan köra bÄde Linux/ARM64 (vilket Àr förval) men Linux/x86_64 fungerar ocksÄ. Linux/x86_64 presterar sÀmre Àn ARM64 versionen (av uppenbara skÀl), beroende pÄ vad man vill göra kan det vara vÀldigt vÀrdefull att kunna köra bÄde ARM64 och x86_64 pÄ samma dator.

PermalÀnk
Entusiast ♄ ★
●
Skrivet av Björn Samuelsson:

git checkout v5.2.0 -B m1_hvf curl https:""//patchew.org/QEMU/20201211151300.85322-1-agraf@csgraf.de/mbox | git am

(Citattecknen i addressen finns dÀr bara för att forumet inte skall göra om den till en förkortad lÀnk.)

DÄ kan ju jag tipsa om [noparse], som Ästadkommer samma effekt utan fulhack. Infogas enkelt med Better SweClockers. Funkar utmÀrkt inuti [code]-block; citera för att se exakt hur jag gjort.

git checkout v5.2.0 -B m1_hvf curl https://patchew.org/QEMU/20201211151300.85322-1-agraf&#x40;csgraf.de/mbox | git am

PermalÀnk
Medlem ♄ ★
●
Skrivet av Alling:

DÄ kan ju jag tipsa om [noparse], som Ästadkommer samma effekt utan fulhack. Infogas enkelt med Better SweClockers. Funkar utmÀrkt inuti [code]-block; citera för att se exakt hur jag gjort.

git checkout v5.2.0 -B m1_hvf curl https://patchew.org/QEMU/20201211151300.85322-1-agraf&#x40;csgraf.de/mbox | git am

Bra info!
Jag undrar varför inte Sweclockers har lagt till en knapp för att infoga code i verktygsfÀltet.

PermalÀnk
Entusiast ♄ ★
●
Skrivet av Eazy:

Bra info!
Jag undrar varför inte Sweclockers har lagt till en knapp för att infoga code i verktygsfÀltet.

Better SweClockers har knappar för nÀstan all formatering som stöds i foruminlÀgg.