Suppression de la copie de la mémoire tampon
La fonction d'élimination de la copie de la mémoire tampon supprime la copie des mémoires tampon de données entre une application et le serveur IBM® Storage Protect , ce qui améliore l'utilisation du processeur. Pour un effet optimal, utilisez cette approche dans un environnement hors réseau local.
Les mémoires tampon pour le transfert de données sont allouées par IBM Storage Protect et un pointeur est renvoyé à l'application. L'application place les données dans la mémoire tampon fournie et cette mémoire est transmise des niveaux de communication à l'agent de stockage à l'aide d'une mémoire partagée. Les données sont ensuite transférées vers l'unité de bande, qui supprime les copies de données. Cette fonction peut être utilisée lors des opérations de sauvegarde ou d'archivage.
La séquence globale des appels pour la sauvegarde-archivage est la suivante :
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 fonction dsmRequestBuffer peut être appelée plusieurs fois, selon la valeur spécifiée par l'option numTsmBuffers. Une application peut avoir deux unités d'exécution: une unité d'exécution de fournisseur qui remplit les mémoires tampon avec des données et une unité d'exécution de consommateur qui envoie ces mémoires tampon à IBM Storage Protect avec l'appel dsmSendBufferData . Lorsque la fonction dsmRequestBuffer est appelée et que la valeur de numTsmBuffers est atteinte, l'appel de fonction dsmRequestBuffer est bloqué tant qu'une mémoire tampon n'est pas libérée. Il est possible de libérer la mémoire tampon en appelant la fonction dsmSendBufferData, qui envoie et libère une mémoire tampon ou en appelant la fonction dsmReleaseBuffer. Pour plus d'informations, voir callbuff.c dans le répertoire des exemples d'API.
Si une erreur se produit au cours de l'envoi, l'application doit libérer toutes les mémoires tampon et fermer la session. Par exemple :
If failure
for each data buffer held by application
call dsmReleaseBuffer
dsmTerminate
Si une application appelle dsmTerminate et qu'elle détient
une mémoire tampon, l'API n'existe pas. Le code suivant est renvoyé : DSM_RC_CANNOT_EXIT_MUST_RELEASE_BUFFER. Si l'application
ne peut pas libérer la mémoire tampon, l'application doit arrêter le processus afin de
déclencher le nettoyage.