XEarthLayer
XEarthLayer ist eine in Rust geschriebene Alternative zu AutoOrtho für das Streaming von Orthofoto-Texturen in X-Plane 12. Das Projekt ist inspiriert von AutoOrtho, setzt jedoch auf eine performante Rust-Implementierung mit adaptivem Prefetching und einem Zwei-Tier-Cache-System.
Frühe Entwicklungsphase
XEarthLayer befindet sich in aktiver Entwicklung. Funktionsumfang und Stabilität können sich zwischen Versionen erheblich ändern.
Funktionsweise
XEarthLayer nutzt ein FUSE-basiertes virtuelles Dateisystem, um Orthofoto-Texturen on demand bereitzustellen. Beim Zugriff auf eine Kachel durch X-Plane wird das Satellitenbild vom konfigurierten Kartenanbieter heruntergeladen, in das DDS-Format (BC1/BC3-Kompression) konvertiert und über das VFS an den Simulator ausgeliefert.
Zwei-Tier-Cache
XEarthLayer verwendet ein zweistufiges Cache-System:
- Memory-Cache: Häufig genutzte Kacheln werden im Arbeitsspeicher vorgehalten für minimale Latenz
- Disk-Cache: Alle heruntergeladenen und konvertierten Kacheln werden persistent auf der Festplatte gespeichert
Wird die konfigurierte Cache-Größe erreicht, werden ältere Kacheln automatisch entfernt, um Platz für neue zu schaffen.
Adaptives Prefetch
Ein Kernfeature von XEarthLayer ist das adaptive Prefetching, das zwischen zwei Modi umschaltet:
- Ground-Mode (Ring-Prefetch): Bei niedriger Flughöhe und geringer Geschwindigkeit werden Kacheln in konzentrischen Ringen um die aktuelle Position vorgeladen — optimal für Anflugsituationen und bodennahes Fliegen
- Cruise-Mode (Track-Prediction): Bei höherer Geschwindigkeit und Flughöhe sagt das System die voraussichtliche Flugroute voraus und lädt Kacheln entlang des prognostizierten Flugpfads vor
Das System kalibriert sich selbst und passt die Prefetch-Strategie an die verfügbare Bandbreite und die aktuelle Flugphase an. Ein Circuit-Breaker-Mechanismus sorgt dafür, dass Prefetch-Anfragen zurückgestellt werden, wenn die On-Demand-Anfragen von X-Plane Vorrang benötigen — so wird sichergestellt, dass die aktuell sichtbaren Kacheln immer zuerst geladen werden.
Kartenquellen
XEarthLayer unterstützt folgende Kartenanbieter:
- Bing Maps
- Google Maps
- Apple Maps
- ArcGIS
- MapBox
- USGS
Systemanforderungen
| Anforderung | Empfehlung |
|---|---|
| Betriebssystem | Linux (FUSE erforderlich) |
| Simulator | X-Plane 12 |
| Internetverbindung | ≥ 800 Mbps empfohlen |
| Speicher | SSD für Disk-Cache |
| Build-Umgebung | Rust Toolchain (nur bei Build aus Quellcode) |
Nur Linux
XEarthLayer ist derzeit ausschließlich für Linux verfügbar. Windows- und macOS-Unterstützung sind nicht implementiert.
Installation
Auf der GitHub Releases-Seite stehen vorkompilierte Pakete für verschiedene Distributionen bereit:
- Debian/Ubuntu:
.deb-Paket - Fedora:
.rpm-Paket - Arch Linux: AUR-Paket
- Andere Distributionen: generisches
.tar.gz-Archiv
Beispiel für Debian/Ubuntu:
# .deb-Paket herunterladen und installieren
sudo dpkg -i xearthlayer_0.3.0-1_amd64.deb
# Einrichtung
xearthlayer setup
Alternativ kann XEarthLayer auch aus dem Quellcode gebaut werden (erfordert Rust Toolchain):
git clone https://github.com/samsoir/xearthlayer.git
cd xearthlayer
make release
make install # Installiert nach ~/.local/bin
xearthlayer setup
Die Einrichtung konfiguriert das Cache-Verzeichnis und die Verknüpfung mit dem Custom-Scenery-Ordner von X-Plane.
Verwendung
XEarthLayer muss vor X-Plane gestartet werden, damit das virtuelle Dateisystem gemountet wird:
# Standard-Start
xearthlayer
# Start mit Cache-Vorwärmen für einen bestimmten Flughafen
xearthlayer run --airport KJFK
Für das adaptive Prefetching muss in X-Plane die ForeFlight-Telemetrie aktiviert sein (UDP-Port 49002), damit XEarthLayer die Flugzeugposition und -geschwindigkeit empfangen kann.
Regionale Pakete
XEarthLayer benötigt separate DSF/TER-Pakete (Digital Surface Format / Terrain), die die Mesh-Daten und Terrain-Definitionen für die jeweiligen Regionen enthalten. Fertige Pakete können direkt über die CLI installiert werden:
# Verfügbare Pakete anzeigen
xearthlayer packages list
# Paket installieren (z. B. Europa)
xearthlayer packages install eu
# Installierte Pakete aktualisieren
xearthlayer packages update
Die Pakete stammen aus dem XEarthLayer Regional Scenery Repository und basieren auf dem Shred86 Ortho4XP-Fork.
CPU-Tuning
XEarthLayer nutzt standardmäßig alle verfügbaren CPU-Kerne für die parallele Tile-Generierung und DDS-Kompression. Das ist optimal, wenn XEarthLayer allein läuft — führt aber zu Problemen, wenn gleichzeitig X-Plane aktiv ist.
Das Problem
X-Plane ist stark Mainthread-gebunden. Wenn XEarthLayer alle Kerne sättigt, kommt es zu:
- Thread-Überbelegung: Mehr aktive Threads als verfügbare Kerne erzwingen ständige Context-Switches
- Hyperthreading-Limitierung: Zwei CPU-intensive Threads auf demselben physischen Kern erreichen zusammen nur ca. 120–130% der Leistung eines einzelnen Threads
- X-Plane-Stuttering: Die Frametime steigt, weil der X-Plane-Mainthread um CPU-Zeit konkurriert
Relevante Einstellungen
Drei Einstellungen in ~/.xearthlayer/config.ini bilden eine Hierarchie:
| Einstellung | Sektion | Standard | Funktion |
|---|---|---|---|
threads |
[generation] |
Anzahl CPUs | Worker-Threads für Tile-Generierung |
cpu_concurrent |
[executor] |
CPUs × 1,25 | Gleichzeitige CPU-intensive Operationen (DDS-Encoding) |
max_concurrent_jobs |
[control_plane] |
CPUs × 2 | Maximale gleichzeitige Tile-Jobs insgesamt |
Der wirkungsvollste Hebel ist cpu_concurrent — er begrenzt die DDS-Encoding-Operationen (BC1/BC3-Kompression), die den größten CPU-Anteil ausmachen.
Empfohlene Werte
Faustregel: Bei parallelem X-Plane-Betrieb auf die Hälfte der physischen Kerne beschränken.
| Szenario | threads |
cpu_concurrent |
max_concurrent_jobs |
|---|---|---|---|
| XEL allein (Default) | 16 | 20 | 32 |
| XEL + X-Plane | 6–8 | 6–8 | 12–16 |
| XEL + X-Plane + Streaming | 4 | 4 | 8 |
| XEL im Hintergrund | 2 | 2 | 4 |
Beispielwerte für ein System mit 16 logischen CPUs (8 Kerne + Hyperthreading)
# ~/.xearthlayer/config.ini — Beispiel für XEL + X-Plane
[generation]
threads = 6
[executor]
cpu_concurrent = 6
[control_plane]
max_concurrent_jobs = 12
Netzwerk ist oft der Flaschenhals
Bei langsamer Internetverbindung bringt eine Reduktion der CPU-Threads kaum Performanceverlust, da die Threads ohnehin auf Downloads warten. Das Prefetch-System passt sich automatisch an den niedrigeren Durchsatz an.
Zusätzlich beeinflusst das Disk-I/O-Profil die CPU-Last indirekt:
disk_io_profile |
Gleichzeitige I/O-Ops | Empfohlen für |
|---|---|---|
hdd |
1–4 | Klassische Festplatten |
ssd |
32–64 | SATA/AHCI SSDs |
nvme |
128–256 | NVMe-Laufwerke |
auto (Default) |
Automatisch erkannt | Die meisten Systeme |
Vergleich mit AutoOrtho
| Dimension | XEarthLayer | AutoOrtho (ProgrammingDinosaur Fork) |
|---|---|---|
| Programmiersprache | Rust | Python (+ C-Pipeline in 2.0) |
| Prefetch-Strategie | Adaptiv (Ground/Cruise-Modi) | Einfach (Umgebungsbasiert) |
| Cache-Eviction | Automatisch (ältere Kacheln werden entfernt) | Automatisch (ältere Kacheln werden entfernt) |
| Plattform | Nur Linux | Windows, Linux, macOS |
| Simulator | Nur X-Plane 12 | X-Plane 11.50+ und 12 |
| Installation | Binary-Pakete oder aus Quellcode | Binary oder Python |
| Regionale Pakete | Separate DSF/TER-Pakete nötig | Integrierte Overlay-Downloads |
| GUI | Keine | Moderne GUI verfügbar |
XEarthLayer richtet sich an Linux-Nutzer, die maximale Streaming-Performance suchen und bereit sind, eine Rust-Build-Umgebung einzurichten. AutoOrtho bietet die breitere Plattformunterstützung und einfachere Einrichtung.