Eliminazione copia buffer
La funzione di eliminazione della copia del buffer rimuove la copia dei buffer di dati tra un'applicazione e il server IBM® Storage Protect , il che si traduce in un migliore utilizzo del processore. Per ottenere il massimo effetto, utilizzare questo approccio in un ambiente senza LAN.
I buffer per lo spostamento dei dati vengono assegnati da IBM Storage Protect e un puntatore viene passato nuovamente all'applicazione. L'applicazione colloca i dati nel buffer fornito e tale buffer viene passato attraverso i livelli di comunicazione all'agent di archiviazione utilizzando la memoria condivisa. I dati vengono quindi spostati nell'unità nastro, che elimina le copie dei dati. Questa funzione può essere utilizzata con le operazioni di backup o di archiviazione.
La sequenza generale delle chiamate per il backup / archivio è la seguente:
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
La funzione dsmRequestBuffer può essere richiamata più volte, fino al valore specificato dall'opzione numTsmBuffers opzione. Un'applicazione può avere due thread: un thread producer che riempie i buffer con dati e un thread consumer che invia tali buffer a IBM Storage Protect con la chiamata dsmSendBufferData . Quando viene emessa una chiamata dsmRequestBuffer e si raggiunge numTsmBuffers , la chiamata dsmRequestBuffer si blocca fino a quando non viene rilasciato un buffer. Il rilascio del buffer può verificarsi richiamando dsmSendBufferData, che invia e rilascia un buffer o richiamando dsmReleaseBuffer. Per ulteriori informazioni, consultare callbuff.c nella directory di esempio dell'API.
Se in qualsiasi momento si verifica un errore nell'invio, l'applicazione deve rilasciare tutti i buffer congelati e terminare la sessione. Ad esempio:
If failure
for each data buffer held by application
call dsmReleaseBuffer
dsmTerminate
Se un'applicazione richiama dsmTerminate e un buffer è ancora in attesa, l'API non esce. Viene restituito il seguente codice: DSM_RC_CANNOT_EXIT_MUST_RELEASE_BUFFER. Se l'applicazione non può rilasciare il buffer, deve uscire dal processo per forzare una ripulitura.