Pufferkopieneliminierung
Die Pufferkopieneliminierungsfunktion entfernt die Kopie von Datenpuffern zwischen einer Anwendung und dem IBM® Storage Protect -Server, was zu einer besseren Prozessorauslastung führt. Den größten Effekt hat dieses Konzept in einer LAN-unabhängigen Umgebung.
Die Puffer für die Datenversetzung werden von IBM Storage Protect zugeordnet und ein Zeiger wird an die Anwendung zurückgegeben. Die Anwendung stellt die Daten in den bereitgestellten Puffer und dieser Puffer wird über die Übertragungsschichten unter Verwendung gemeinsam genutzten Speichers an den Speicheragenten übergeben. Die Daten werden dann auf die Bandeinheit versetzt, wodurch Datenkopien eliminiert werden. Diese Funktion kann mit Sicherungs- oder Archivierungsoperationen verwendet werden.
Die gesamte Aufruffolge für die Sicherung/Archivierung ist wie folgt:
dsmInitEx (UseTsmBuffers = True, numTsmBuffers = [how many IBM Storage Protect
-allocated buffers the application needs to allocate])
dsmBeginTxn
for each object in the txn
dsmBindMC
dsmSendObject
dsmRequestBuffer
dsmSendBufferData (sends and release the buffer used)
dsmEndSendObjEx
dsmEndTxn
for each buffer still held
dsmReleaseBuffer
dsmTerminate
Die Funktion dsmRequestBuffer kann mehrfach aufgerufen werden bis zu der Höhe des Wertes, der durch die Option numTsmBuffers angegeben wird. Eine Anwendung kann über zwei Threads verfügen: einen Erzeugerthread, der Puffer mit Daten füllt, und einen Konsumententhread, der diese Puffer mit dem Aufruf dsmSendBufferData an IBM Storage Protect sendet. Wenn ein Aufruf dsmRequestBuffer ausgegeben und dadurch der in numTsmBuffers angegebene Wert erreicht wird, wird der Aufruf dsmRequestBuffer so lange blockiert, bis ein Puffer freigegeben wird. Die Freigabe des Puffers kann erfolgen durch Aufrufen von dsmSendBufferData, wodurch ein Puffer gesendet und freigegeben wird, oder durch Aufrufen von dsmReleaseBuffer. Weitere Informationen finden Sie unter callbuff.c im API-Musterverzeichnis.
Tritt an irgendeinem Punkt beim Senden ein Fehler auf, muss die Anwendung alle angehaltenen Puffer freigeben und die Sitzung beenden. Beispiel:
If failure
for each data buffer held by application
call dsmReleaseBuffer
dsmTerminate
Wenn dsmTerminate von einer Anwendung aufgerufen
wird und noch ein Puffer angehalten ist, wird die API nicht verlassen. Der folgende Code wird zurückgegeben: DSM_RC_CANNOT_EXIT_MUST_RELEASE_BUFFER. Wenn die Anwendung den Puffer nicht freigeben kann, muss sie den Prozess
verlassen, um eine Bereinigung zu erzwingen.