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.

Achtung: Wenn Sie diese Methode verwenden, achten Sie besonders auf die ordnungsgemäße Handhabung und Größe der Puffer. Die Puffer werden gemeinsam von den Komponenten genutzt und jede Speicherüberschreibung aufgrund eines Programmierfehlers hat schwerwiegende Fehler zur Folge.

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.