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.

Attention: Lorsque vous utilisez cette méthode, accordez une attention particulière à la gestion et à la taille appropriées des tampons. Les mémoires tampon sont partagées entre les composants et tout remplacement de la mémoire suite à une erreur de programmation génère des erreurs fatales.

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.