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

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?

Ich fasse nochmal die noch offenen Fragen zusammen und füge unten noch Hinzugekommene an:

  • Gibt es eine brauchbare Dokumentation zur batch.xml?

  • Gibt es ein brauchbares CLI (=Parameterangabe via Commandlineparamter)?

  • Wenn man die batch.xml nutzen lässt, erhält man dabei mehr oder weniger Statusinformationen?

  • Wenn man z.B. Deutschland in Gebiete aufteilt, sollten die Gebiete sich die Grenzen teilen oder überlappen? [list=*]

  • Bei gemeinsamen Grenzen: Mit welchen Parametern sollte man das extrahieren? Passt osmconvert --complexWays bzw. osmosis --completeRelations dafür? (Ich brauche länder-/gebietsübergreifende Navigation)

[/*] [*]Wie gross sollten die Gebiete optimalerweise sein? (optimalerweise==für kürzeste *Gesamt*laufzeit)[/*] [*]Wie kann man die .poly-Dateien automatisiert aus Relationen erstellen? (download.geofabrik.de hilft nicht, da ich teilweise andere Grenzen nutzen würde und z.B. Trasadingen nicht in "Deutschland" landen soll)[/*] [/list]

Hallo,

Ich verarbeite immer die Geofabrik-Bundesländer-Extrakte. Den Bayern-Extrakt splitte ich dann immer noch einmal auf. Dabei überlappt nichts, das grenzüberschreitende Routing funktioniert trotzdem.

Nordhälfte Bayern

  • Südwestecke: 8.37187,48.92583

  • Nordostecke: 14.22758,50.922701

Südhälfte Bayern

  • Südwestecke: 8.37187,47.11845

  • Nordostecke: 14.22758,48.92583

Die Aufteilung Bayerns hat nur einen Nachteil. Wenn du nach einem Ort suchst, musst du wissen, ob er in der Nord- oder Südhälfte liegt. Das ist auch der Fall, wenn du die beiden .obf-Dateien mit inspector.sh bzw. inspector.bat zu einer zusammenfügst.

Ich arbeite mit osmconvert, weil es schneller ist und ich nicht filtere. Ich verwende die Optionen --complex-ways --complete-ways, damit grenzüberschreitende Wege und grenzüberschreitenden Multipolygonen (v.a. Wälder) ganz erhalten bleiben.

Meine Gebiete sind nicht größer (Dateigröße) als Baden-Württemberg.

Viele Grüße

Michael

Als wir über das Tempo hier diskutiert haben, habe ich Version 1.1 verwendet.Jetzt habe ich Version 1.8 auf sehr kleine Dateien angewendet und bilde mir ein einen Tempozuwachs festzustellen.
Kann jemand bitte den Zeitgewinn für eine der obengenannten Dateiboldiden nennen.