Azure VM Swapspace

Für ein Jahr MSDN Abo bekommt man “aus Gottes Gnaden” dann ganze 45 Dollar Azure Guthaben. WOW, echt großzügig für 1000 Euro Schmiergeld!

Und die 45 Dollar reichen gerade um die billigste 1-Kern VM für etwa ein Jahr laufen zu lassen.

Doch leider crashen dort Compiler und andere Tools…


  • 1 CPU Kern,
  • 512 MB RAM
  • 30 GB Festplatte
  • Ubuntu Linux 18.04

Ein Azure VM mit diesen Eigenschaften ist aktuell das billigste Angebot. Aber bevor ich ein ganzes Jahr lang einen Raspberry PI zu Hause am Laufen halten muss, ist dieses Angebot genug, um hin und wieder mal einen Build dort laufen zu lassen.

Gesagt, getan … portal.azure.com, einloggen, Ressourcen anlegen, starten, IP ablesen, Putty starten, apt install build-essentials usw. und am Ende make.

Killed nach ein paar Minuten.

Na toll! Wozu hat man eine VM in der Cloud, wenn der Regen dort auf den Compiler niederprasselt?

Nun, nachdem kleinere Kompilate durchgehen und ich im GATE Projekt stets am SQLITE Projekt hängen bleibe, drängt sich der Verdacht auf:

Dem Compiler geht der RAM aus.

Aber dann sollte eigentlich die SWAP Partition aushelfen. Ist zwar langsamer, aber immerhin kommt man so über die Runden.
Doch offenbar sind keine SWAP-Partitionen in Linux Azure VMs vorkonfiguriert.

Aber nach einer kurzen Suche im Web war die Lösung schnell gefunden:

Microsoft hat seinen eigenen Azure-Dienst in den Cloud Distributionen namens “Microsoft Azure Linux Agent” (waagent) und dieser wird über /etc/waagent.conf konfiguriert.

Wenn man dort folgende Zeilen einträgt (bzw. aktiviert):

1ResourceDisk.Format=y
2ResourceDisk.EnableSwap=y
3ResourceDisk.SwapSizeMB=4096

bindet die VM einen Swap-Bereich auf einem temporären Storage ein. Dieser wird mit dem Beenden der VM ebenfalls freigegeben (bzw. gelöscht), also wird bei jedem Reboot dieser Bereich neu angelegt und formatiert.

Im Beispiel werden 4 GB (4096) für Auslagerungsdateien eingesetzt.

Fazit

Mit diesem kleinen Konfigurationsupdate läuft nun der GATE Build in Azure durch und bestätigt damit wieder einmal, dass ohne RAM bzw. virtuellen Speicher nichts mehr läuft.

Vorbei sind die Zeiten, wo man mit 64 MB RAM nicht wusste, wie man sie voll kriegen soll.

Naja … zumindest habe ich etwas über Azure gelernt … nämlich dass es für Buildvorgänge unverschämt teuer ist. Für Builds bleibe ich bei BitBucket. Aber wenn ich mal schnell eine Linux Konsole brauche, habe ich die Azure-VM nun griffbereit (samt SWAP).


Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!