Auslagerung von Daten (Swapping)‌

Bei der Verarbeitung großer Datenmengen entsteht beim Profildurchlauf ein entsprechend großer Bedarf an Arbeitsspeicher. Ist nicht mehr genügend Arbeitsspeicher vorhanden, führt dies zu einer Verschlechterung der Gesamtperformance von Lobster_data oder im Extremfall zu Fehlern beim Profildurchlauf (OutOfMemoryException). Um dem entgegenzuwirken, kann Lobster_data während des Profildurchlaufs Daten auf die Festplatte auslagern (Swappen) und somit den Bedarf an Arbeitsspeicher reduzieren.

Bei der Auslagerung werden Datenblätter auf der Ein- und/oder Ausgangsseite eines Mappings ausgelagert. Falls beim Parsen (Phase 2) keine Datenblätter ausgelagert wurden, verbleiben diese im Speicher. Eine rückwirkende Auslagerung der Datenblätter der Quellstruktur ist nicht möglich.

Die Festlegung ob und wie ausgelagert werden soll, wird für jedes Profil einzeln getroffen. Die folgende Abbildung zeigt die Einstellungen in Phase 2/Erweitert für die Auslagerung von Daten im Profil.

images/download/attachments/51151624/743-version-1-modificationdate-1650443405634-api-v2.png


(1) Gibt an, ob Daten ausgelagert werden sollen.

(2) Gibt den Grenzwert für die Speicherbelegung der virtuellen Maschine an, bei dessen Überschreitung die Auslagerung angestoßen werden soll. Die Speicherbelegung berücksichtigt dabei nicht nur den Speicherverbrauch des aktuellen Profils, sondern die gesamte Speicherbelegung, also alle Profile plus die Programmressourcen. Hat der Grenzwert den Wert 0, wird sofort ausgelagert. Folgende Abbildung zeigt eine schematische Darstellung des Verlaufs der Speicherbelegung der virtuellen Maschine ohne Auslagerung.


images/download/attachments/51151624/Image_018-version-1-modificationdate-1584515767671-api-v2.jpg

Lazy Swapping


Folgend der Verlauf der Speicherbelegung bei aktivierter Auslagerung ("Lazy Swapping").


images/download/attachments/51151624/Image_019-version-1-modificationdate-1584515767673-api-v2.jpg


(1) Eingestellter Grenzwert für die Speicherbelegung, z. B. 40 %.

(2) Nach x Datenblättern wurde der Grenzwert überschritten. Lobster_data stellt dies nach dem Abschluss des Datenblatts fest und lagert 1/3 (aber maximal 100) der Datenblätter auf der Ausgangsseite aus. Ist danach die Speicherbelegung immer noch zu hoch, wird ein weiteres Drittel (aber wieder maximal 100) der Datenblätter ausgelagert. Dieser Vorgang wiederholt sich so lange, bis die Speichergrenze unterschritten, oder alle Datenblätter ausgelagert sind.

(3) Speicherbelegung nach n Wiederholungen von (2).

(4) Nach weiteren y Datenblättern wurde die Speichergrenze erneut überschritten. Der Ablauf in (2) wird wiederholt.

(5) Speicherbelegung nach erneuten m Wiederholungen von (2).

Da bei diesem Verfahren versucht wird, immer nur so viele Datenblätter wie nötig auszulagern, nennt man dieses Verfahren "Lazy Swapping". Dies ist das Standardverfahren für die Auslagerung von Daten in Lobster_data.

Werden sehr viele Profildurchläufe parallel gestartet, kann es passieren, dass das Lazy Swapping nicht mehr in der Lage ist, dafür zu sorgen, dass genügend Arbeitsspeicher zur Verfügung steht. Aus diesem Grund bietet Lobster_data zusätzlich die Möglichkeit des "Busy Swappings".

Busy Swapping


Beim "Busy Swapping" wird nach jedem Datenblatt geprüft, ob die prozentuale Speicherbelegung innerhalb der virtuellen Maschine größer ist als die eingestellte erlaubte Maximalbelegung. Ist dies der Fall, werden alle bereits erstellten Datenblätter auf die Festplatte ausgelagert. Folgende Abbildung zeigt die Speicherbelegung mit Auslagerung ("Busy Swapping").


images/download/attachments/51151624/Image_020-version-1-modificationdate-1584515767675-api-v2.jpg


(1) Eingestellter Grenzwert für die Speicherbelegung, z. B. 40 %.

(2) Nach dem x-ten Datenblatt wurde der Grenzwert überschritten. Lobster_data stellt dies nach dem Abschluss des Datenblatts fest und lagert alle erstellten Datenblätter aus.

(3) Speicherbelegung nach Auslagerung aller Datenblätter.

(4) Nach weiteren y Datenblättern wurde die Speichergrenze erneut überschritten. Erneut werden alle Datenblätter ausgelagert.

Der Nachteil des Busy Swappings gegenüber dem Lazy Swapping ist, dass Lobster_data gegebenenfalls mehr Datenblätter als notwendig auslagert. Dies kann bei der weiteren Verarbeitung zu Performance-Einbußen führen.

Konfiguration


Die Festlegung, ob und wie ausgelagert werden soll, wird für jedes Profil getrennt getroffen. Die Festlegung, welches Verfahren für die Auslagerung verwendet werden soll, wird dagegen global für alle Profile getroffen. Der folgende Ausschnitt zeigt den Eintrag in der Konfigurationsdatei ./etc/startup.xml mit dem das Lazy Swapping aktiviert wird. Zur Aktivierung des Busy Swapping wird der Wert lazySwapping von true auf false geändert.

Hinweis: Die Umstellung von Lazy Swapping auf Busy Swapping sollte nur in Ausnahmefällen und nur in Absprache mit dem Support erfolgen.


<!-- enable lazy swapping of temp. data -->‌
<Set name="lazySwapping">true</Set>