[OsmAnd] Laufzeit, HDD- und RAM-Verbrauch MapCreator

Ich versuche momentan für OsmAnd einen länderübergreifenden Kartenausschnitt zu erstellen. Ich habe dazu europe-latest.osm.pbf von download.geofabrik.de geladen, ein .poly-File mit JOSM erstellt und dieses mit osmosis --rbf --bp completeRelations --wb (Kommando gekürzt) angewendet (ergibt ca. 2GB).

Die resultierende Datei habe ich mit dem über die Batchdatei gestarteten OsmAnd MapCreator über “File”->(der Eintrag ohne “region”) geöffnet, wie es zuvor mit einem kleineren Geofab-Extrakt funktionierte. Nun erhielt ich im Verzeichnis $HOME/osmand (oder wie auch immer man das unter Windows angibt) die ca. 32GB grosse Datei nodes.tmp.odb. Beim länger dauernden Schritt nach “Loading file” (Vorindizieren von Strassen oder so ähnlich) kam es danach zu einer Fehlermeldung, die auf zu wenig nutzbaren Arbeitsspeicher hinwies, wonach er trotzem weiter so tat, als würde er etwas tun, Prozessorlast lies allerdings nach (war schon zuvor nicht hoch).

Nun frage ich mich:

  • Wie lange dauert so ein Durchlauf ungefähr (Deutschland, 8GB RAM, Quadcore (Intel i5) 2,4GHz)?

  • Reicht es zur Vermeidung des aufgetretenen Fehlers im Java-Aufruf das “–Xmx720M” durch “–Xmx6G” zu ersetzen? (Ich kann’s gerade nicht testen, da ich versehentlich ganz Europa statt nur meinen Ausschnitt ausgewählt hatte und das System jetzt nicht nutzen kann)

  • Wie gross wird diese nodes.tmp.odb und was ist das eigentlich?

/edit: Das zuvor im letzten Abschnitt stehende nach der Entdeckung eines Tippfehlers korrigiert (falsche Datei ausgewählt).

Hi

Schau mal hier vorbei, demnach geht ganz DE nicht in einem Durchlauf: http://wiki.openstreetmap.org/wiki/DE:OsmAndMapCreator

Unter WIN7 haut es dich mich 720M raus und die deutliche Erhöhung der Zahl, bei mir auf 4000M hilft.

Zu der Größe. Teilweise verbrauchen alle entstehenden Dateien mehr Platz als die Daten im OSM-Format.

Es rechnet lange. Bei mir braucht es für ein PBF-File von 140MB 17 Stunden. Ich habe fast die gleichen Daten wie Du, nur 4GB Arbeitsspeicher und der Rechner ist dann sehr,sehr träge bis nicht mehr nutzbar.

Eine SSD-Platte hilft.
Mit Festplatte konnte ich bei einem osmupdate/osmconvert Lauf auch nicht mehr anderweitig arbeiten, mit SSD kein Problem.

Chris

Das ist ja interessant. Wenn ich die OSM-Datei, von der ich gerade spreche update, habe ich keinen Ärger.

Meinst Du mit SD SSD Laufwerke oder SD-Karten? Letztendlich ist System, was solche Resourcen braucht fragwürdig. Tiles mit Maperativ zu berechnen haut bei weitem nicht so ins Kontor.

Meinte SSD.

hi,

hier ein Extrakt aus meiner Chain:


java   -Djava.util.logging.config.file=logging.properties \
       -Xms256M -Xmx4G \
       -cp "./OsmAndMapCreator.jar:./lib/OsmAnd-core.jar:./lib/*.jar" \
       net.osmand.data.index.IndexBatchCreator \
       batch.xml

und von batch.xml


<?xml version="1.0" encoding="utf-8"?>
<batch_process>
	<process_attributes mapZooms="" 
            renderingTypesFile="/opt/install/OsmAndMapCreator/rendering_types.xml" 
            zoomWaySmoothness="4" 
            osmDbDialect="sqlite_in_memory" 
            mapDbDialect="sqlite_in_memory"/>
	...
</batch_process>

Knackpunkt war für mich die Benutzung des Memories mittels “sqlite_in_memory”. Das hat mächtig was gebracht. Ob allerdings für “dein Gebiet” der reale Memory ausreicht, kann ich nicht sagen.

Gruß
walter

Was bewirkt konkret “Xms256M”. Gibt es nach oben hin Grenzwerte, wenn ja, wie findet man die raus?

Kümmert sich der MapCreator unter Windows um diese Batch-Datei oder ist die nur unter Linux relevant?

stellt der java-vm genug memory zur Verfügung. musst dich hat rantasten aber bei real 8GB im Rechner sollten schone einige GB drin sein, wenn java 64 bit verwendet wird.

batch.xml ist keine batch-datei sondern eine xml-datei. Somit ein Datenfile, das Mapcreator bestimmt auch unter Window gebrauchen kann.

Gruss
walter

Danke, die Seite hatte ich noch nicht gesehen.

Da interessiert mich doch, warum das so ist.

Spannend, bei mir lässt sich der Laptop problemlos nebenher nutzen. Mir scheint auch die Auslastung des Systems während des Vorgangs überaschend niedrig. Ist das so normal oder kann man da was optimieren?

-Xms ist die “anfägliche Heap-Grösse” (Quelle: $ java -X).

Gibt es zu dieser Datei irgendwo eine einigermassen brauchbare Dokumentation? Falls nicht: Was bewirkt das?
Soweit ich das verstanden habe, wird sie ja nur genutzt, wenn man OAMC ohne das GUI verwendet. Hat man dabei auch so “viele” Statusangaben oder gar noch weniger?

Kann zwar keine Lösungen für den Mapcreator bieten, aber dass der zum Erstellen der obf.Karten so lange braucht, “nervt” mich schon seit langem.

Würde es vielleicht mal was bringen, den Mapcreator mit einem Profiler wie Valgrind oder ähnlich mal zu untersuchen, wo er da am meisten Zeit für braucht?

Was Victor Shrerb als Hauptentwickler mal dazu schrieb, war glaub ich, dass die meiste Zeit für das Lesen und Schreiben in die Datenbank-Dateien draufgeht, welche der Mapcreator zwischendurch anlegt.

Welche Profiler für Java-Programme gibt es denn generell? Gibts da Infos bei z.B. stackoverflow.com mit der Suche nach “profiler”?

das bewirkt, dass die interne temporäre SQL-Datenbank in den Memory und nicht auf Platte gelegt wird. Ob das auch bei der GUI-Anwendung geschieht, ist mir nicht bekannt - allerdings halte ich das für möglich und durchaus sinnvoll. Müsstest nur das passende Eingabefeld dafür finden.

Ich bin übrigens nach 30 Minuten Einarbeitung in OAMC auf Batchbetrieb umgeschwenkt, da
a) das ständige Eingeben der selben Parameter mich nervte
b) klar war, dass ich am Ende die Sache regelmäßig alle paar Tage laufen lasse.

Würde ich dir auch raten.

Gruß
walter

Bei Oracle JDK mit dabei: Java VisualVM: http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/profiler.html

Danke für die Info. Bei den für diese Aufgabe in Frage kommenden Systemen ist Speicherplatz bis 128GiB kein Problem solange das ungefähr bekannt ist. Auch dadurch längere Verarbeitungszeit ist kein Problem, solange es unter ca. 4 Tagen bleibt und es vorher ungefähr bekannt ist :wink:

Das habe ich auch von Anfang an geplant (wegen b) ). Bisher habe ich an Parameterangaben nur die Dateiauswahl und entsprechend noch nicht die Motivation mich in ein XML-Format einzuarbeiten für etwas, was ich über Commandline-Parameter erwarten würde (Hab’ ich da evtl. etwas übersehen?).

Hallo rayquaza,

als Autor des zitierten Wiki-Artikels melde ich mich mal zu Wort.

Spannend, bei mir lässt sich der Laptop problemlos nebenher nutzen. Mir scheint auch die Auslastung des Systems während des Vorgangs überaschend niedrig. Ist das so normal oder kann man da was optimieren?

Auch ich kann mein Notebook während der Erzeugung der Karten nutzen, aber nicht die ganze Zeit. In gewissen Abschnitten, schreibt/liest OsmAndMapCreator viel auf der Festplatte, dann sinkt die Performance. Ansonsten kann man nebenher arbeiten, da OSMC nur einen Prozessorkern/Thread nutzt. Ich habe deshalb schon des Öfteren schon erfolgreich zwei Karten parallel erzeugt. Wenn man die beiden Prozesse nicht gleichzeitig startet, behindern sie sich in der ersten Phase (das Einlesen der OSM-Rohdaten) nicht gegenseitig beim Zugriff auf die Festplatte.

Auf das Warum kann ich dir keine Antwort geben, es handelt sich um eine Beobachtung meinerseits. Wenn ich Bayern mit Osmconvert in zwei Teile (Verhältnis der Dateigrößen ca. 1:2) aufteile, bin ich schneller fertig, als wenn ich ganz Bayern auf einmal berechne. Gefühlt ist die Berechnungszeit auf meinem Rechner keine lineare, sondern eine Potenz-* oder Exponentialfunktion.

Viele Grüße

Michael

*) Potenzfunktion: x², x³, x⁴ usw.

ja, nämlich, dass es ganz einfach ist. Hier mal mein kompletter batch.xml:

<?xml version="1.0" encoding="utf-8"?>
<batch_process>

<!-- zoomWaySmoothness - 1-4 
     typical mapZooms - 8-10;11-12;13-14;15   
     osmDbDialect="SQLITE_IN_MEMORY" oder "sqllite"
     mapDbDialect="SQLITE_IN_MEMORY" oder "sqllite"
-->
	<process_attributes mapZooms="" 
                            renderingTypesFile="/opt/install/OsmAndMapCreator/rendering_types.xml" 
                            zoomWaySmoothness="4" 
		            osmDbDialect="sqlite_in_memory" 
                            mapDbDialect="sqlite_in_memory"/>
	
	<process directory_for_osm_files="/home/walter/osm/osmand/osm" 
                 directory_for_index_files="/home/walter/osm/osmand/obf" 
                 directory_for_generation="/home/walter/osm/osmand/work"

                 indexPOI="true" 
                 indexRouting="true" 
                 indexMap="true"
                 indexTransport="true" 
                 indexAddress="true">					
	</process>
</batch_process>

wer sich nen 128GB-Rechner “leisten” kann, ein wenig HTML beherrscht (html ist auch nur ein xml-Dialekt!) und einen Leistungskurs “Notepad Internals” bestanden hat, kriegt das schon hin - ansonsten mal die Kids fragen :wink:

Gruß
Walter

Das heisst, es wäre theoretisch möglich, dauert aber unnötig lange? Dann sollte das auch so im Wiki-Artikel stehen (dann kommen auch weniger blöde Nachfragen :wink: ).

Mit “übersehen” meinte ich ein brauchbares CLI fürs Scripting. Kleinere HDDs als 320GB kriegt man (gefühlt) ja kaum noch – auf den betreffenden Systemen ist nicht viel mehr als das Bertriebssystem bzw. teilweise zur Zeit gar nichts (==0x00). Und um “die Kinder” zu fragen bin ich glaube ich noch etwas jung :stuck_out_tongue:

Wenn ich dafür ein Script schreibe ist es einfacher z.B. “OsmAndMapCreator.sh --infile=tempfile$SESSIONID.osm.pbf” zu schreiben statt eine XML-Datei mit dem entsprechenden zu füllen :wink:

ja dann halt als Command-Line. XML komplett zu generieren wäre hier wohl etwas übertrieben.

Oops, ich hatte 128 GB Memory verstanden - also 'nen richtig fetten Server!

Viel Erfolg
Walter

War ja auch geringfügig missverständlich, weshalb ich die Bezeichnung “Speicher” vermeide und bei entsprechenden Angaben nachfrage, aber wir werden OT.

Ich habe 4G eingetragen, habe aber nur 4G. Du 4G bei 6G. Bei dir bleiben 2G übrig.
Hast Du schon mal ausprobiert, die zwei Bayern-Obfs zusammenzufügen. Wenn ja, wie lange dauert das?