|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 3 ![]() |
J'ai mis en place un module d’accès aux données d’un référentiel (DB2) sous Z/OS 3.1
Le succès de ce module, utilisé par l’ensemble des programmes du SI par appel en call, nécessite des optimisations importantes. Piste étudiée : Optimiser la consommation CPU et les i/o de ce module en conservant en mémoire des données lues, pour éviter des accès à la base de données Problématique : 1) Utilisation du buffer : à chaque appel TP en CICS, il est réinitialisé 2) Utilisation TS (tempory storage) : impossible de utiliser ce type de mémoire en batch Je ne connais pas très bien ce type de Système. J’avais envisagé les solutions suivantes : 1) Utiliser une mémoire permanente (mémoire système ?) accessible en TP et batch et non ré-initialisée à chaque appel. 2) Développer un programme résident et permanent contenant les données lues et accessible par ce module et toujours avec une mémoire non réinitialisée. Pouvez-vous me dire, si ces solutions sont possibles dans ce type d’environnement, comment les mettre en œuvre (par un exemple quel language ?) et les risques potentiels des solutions ? Merci. Avez-vous d’autres solutions ? |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : janvier 2008 Messages : 124 ![]() |
bonjour,
tu pourrais biensur utiliser la mémoire en Extend CSA (developpement assembleur) ou les techniques de Dataspaces (assembleur aussi). Cela dit c'est peut etre un peu "sport" pour ton besoin. personnellement j'utiliserais la methode suivante : détermination si je suis en CICS ou autre (Batch..) : pour ça un petit assembleur chainant les blocs RB et CDE pour tester si un module DFH... est présent suffit (si oui, nous sommes sous CICS). si tu veux un exemple je peux te donner ça. - Si en CICS : utilisation d'une TS - Si en Batch : simple utilisation de la working; c'est CICS qui réinitialise ta working; en Batch pure, si aucun des appelants ne CANCEL ton programme il restera en mémoire et ta working ne sera pas initialisé.. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 3 ![]() |
Merci xfanx,
Je vais étudier l'utilisation de la mémoire en Extend CSA et les techniques de Dataspaces. Par contre, je ne peux pas déterminer si je suis en batch ou en CICS, car je ne peux pas maitriser les programmes appelants (trop nombreux) qui appelle se module en call uniquement. Aussi, l'utilisation d'une TS ou d'un working n'est pas possible... A moins de de pourvoir déterminer si le mode est CICS ou Batch dans ce contexte ? |
|
|
00
|
|
|
#4 | |
|
Membre éclairé
![]() Inscription : octobre 2007 Messages : 362 ![]() |
Citation:
|
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juillet 2008 Messages : 3 ![]() |
|
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() Inscription : octobre 2007 Messages : 449 ![]() |
Vérifier si on est batch ou CICS n'est pas un problème bloquant. Le plus simple est effectivement de demander l'info à l'appelant. En cas d'impossibilité fonctionnelle il suffit de vérifier et il y a de multiples moyens à commencer par vérifier les blocs de contrôles les MVS. Pointeurs CDE des programmes chargés comme déjà évoqué, vérif JOB ou STC, nom du JOB ou autre en s'appuyant sur les normes 'maison'. Peu importe, même en Cobol c'est directement faisable à condition de bien isoler la fonction pour se prémunir des risques liés à des montées de niveau z/OS.
Pour le reste, une remarque et une piste possible : 1 - L'utilisation hiperspace / dataspace est réservée à de l'Assembleur et loin d'être usuelle. C'est normalement les couches logicielles qui exploitent ça (DB2, CATALOG/VLF ...) Il me semble que c'est plus avec les DBA qu'il faut s'attacher aux perf. de DB2 qui est construit pour ça. Ajouter une couche gestion de cet ordre semble risquée, plus peut être en maintenance évolutive qu'en développement 2 - Pour une gestion optimisée des données fonctionnelles récurrentes (usuellement les contextes), on peut parfaitement émuler un fonctionnement CICS TS MAIN dans du COBOL BATCH. Ca m'a tenté à une époque mais je n'ai pas fait par manque d'opportunité/temps. L'idée est de s'appuyer sur Language Environnement, ce qui a le mérite de mutualiser les languages appelants pratiqués sous z/OS. Je pense évidemment à COBOL en premier lieu qui peut appeler simplement les routines de services L.E. A commencer pour des acquisitions et libérations mémoires haute, à l'instar du fonctionnement TS. Ca permet aussi et surtout de s'affranchir de la responsabilité d'un des cas de gestion les plus difficiles à gérer en multi-tâches : le 'cleanup' de tout ce qui est en mémoire en cas d'abend. L.E prendra simplement en compte. Il restera après ça à être vigilent sur l'optimisation du code. Par exemple pour CICS en gérant les RESP au niveau des EXEC CICS fonctions plutôt que dans des Handle Condition pour gagner deux appels au sous-système sur trois. L'optimisation au niveau du langage aussi. Cobol est peut être même un choix plus judicieux que de l'Assembleur. Plus portable et facile à maintenir, il a par ailleurs l'avantage de savoir dialoguer 'nativement' avec L.E. |
|
|
00
|
|
|
#7 | ||
|
Membre habitué
![]() Inscription : janvier 2008 Messages : 124 ![]() |
Si ton seul probleme est de savoir dans quel environnement tu t'exécutes, voici un exemple de programme assembleur de chainage des blocs MVS RB et CDE te permettant de déterminer si tu es en CICS ou dans un autre environnement; il fonctionne sur nos Lpar depuis plusieurs années ;
celui ci te dit si tu es sous IMS ou CICS ou en Batch; conforme LE et réentrant tu n'auras donc aucun souci à l'exécuter sous CICS. format d'appel : 01 ENVIRONNEMENT PIC X(3). CALL PGTOTO USING ENVIRONNEMENT Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : janvier 2008 Messages : 124 ![]() |
en conclusion pour ma part et pour rebondir sur les remarques d'homer-ac, je dirais qu'il est dommage que tu ne sois qu'en Z/OS 1.3;, d'une part parcequ'à partir du 1.8 si je me souviens bien, tu disposes des fonctions C du Z/OS necessaires à la programmation des dataspaces et tu as encore une autre possibilité qui à mon sens est nettement meilleur que les dataspaces c'est la programmation en Amode64 , en mémoire shared multi espace adresse .
personnellement dans mon entreprise nous avons utilisé le systeme de dataspace shared il y a quelques années pour stocker un référentiel des valeurs extrement accedé et ainsi gagner un maximum en performance, écrit en assembleur à l'époque; aujourdhui nous réécrivons cet outil en C , avec justement la technique Amode64 mémoire shared; le gros avantage est la place mémoire pratiquement illimité (en théorie), et surtout le language C d'une maintenance plus aisée. disons qu'il est plus facile de trouver un programmeur C qu'un programmeur Assembleur. Si tu veux te lancer dans cette technique, sur le site IBM tu trouves de la tres bonne documentation sur le sujet. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com