Génération des OF en mode parallèle
La parallélisation ne s’applique que pour les programmes qui génèrent des OF en mode fichier GtfPlan
et que dans le cas ou le nombre de ligne d’OF est supérieur à 8.
Les programmes concernés sont :
Génération des OF à l’affaire
Génération des OF à la commande
Instance de pilotage et instances de génération des OF
Le programme de génération des OF ggppfab100
est appelé en mode tunnel OF_Creation_Reel_Fichier
. Cette instance sert à lancer et piloter les instances qui vont générer les OF - C’est l’instance de pilotage
L’instance de pilotage va lire le contenu du fichier GtfPlan
et transférer son contenu dans la table temporaire TmpBl
en indiquant pour chaque ligne OF le numéro de l’instance qui devra générer l'OF.
Les instances qui génèrent les OF sont appelées en mode tunnel OF_Creation_Reel_TmpBL_Par
- Ce sont les instances de génération d’OF.
Chaque instance de génération d’OF traite les OF qui lui sont affectés dans la table temporaire TmpBl
et renseigne le numéro d’OF qui est généré.
Lorsque la dernière instance de génération des OF se termine, l’instance de pilotage reprend la main et traite le contenu de TmpBl
pour alimenter le fichier GtfTmp
L’instance de pilotage se termine pour rendre la main au programme appelant.
Nombre d’instances de générations d’OF lancés
Le nombre d’instance est calculé par la fonction OF_Moteur_X12_Caluler_NoInstanceMax
à partir du nombre de ligne d’OF à généré.
La limite est fixée à 5 instances
Au delà on constate une dégradation des performance.
Nb OF | Nombre d’instances du programme ggppfab100 |
---|---|
>= 20 | 5 |
>= 16 et < 20 | 4 |
>=12 et < 16 | 3 |
>=8 et < 12 | 2 |
< 8 | 1 |
Equilibrage de charge des instances de programme
L’instance de pilotage doit attendre que toutes les instances de génération des OF se terminent.
La durée totale du traitement correspond donc à la durée de l'instance de génération des OF la plus longue.
Instance du programme | Nombre de ligne d’OF | Durée |
---|---|---|
#1 | 6 | 62 secondes |
#2 | 6 | 45 secondes |
#3 | 6 | 183 secondes |
#4 | 6 | 52 secondes |
#5 | 5 | 33 secondes |
Dans ce cas la durée totale de génération des OF du fichier GtfPlan
correspond à l’instance #3 soit 183 secondes
On ne peut donc pas faire un équilibrage en se basant sur le nombre de ligne d’OF.
Chaque OF est plus ou moins complexe en fonction de ses données techniques. Un OF qui produit plusieurs sous-OF et qui possède de nombreux composants ou séquences nécessitera une durée de génération plus importante.
On va donc utiliser une mécanique de métriques OF pour répartir la charge sur chaque instance de génération d’OF en se basant sur les données techniques de l’OF.
Métriques OF
On a vu précédemment que la composition des données techniques influençait la durée de génération d’un OF.
La métrique OF est calculée par la fonction
gttmchknommetric.dhsp / Compute_NomMetric_Field_MetricCoutTraitement
MetricCoutTraitement =
MetricNbOFEnt * C_Poids_MetricNbOFEnt (1,5) +
MetricNbOFComp * C_Poids_MetricNbOFComp (1) +
MetricNbOFSequ * C_Poids_MetricNbOFSequ (0,5) +
MetricNbOFRess * C_Poids_MetricNbOFRess (0) +
MetricNbOFOutil * C_Poids_MetricNbOFOutil (0)
Les poids sont liés au type de traitement qui doit être réalisé :
une entête d’OF produit une commande interne + une ligne sur la commande interne
un composant produit une ligne sur la commande interne
une séquence produit des données de jalonnement
les ressources et outillages sont négligeables sur le durée du traitement
Pour chaque données techniques un programme va permettre de calculer et stocker une métrique MetricCoutTraitement
dans la table NOMMETRIC
Le programme “Calculer les métriques OF” sert à générer les métriques OF
Exemple de métrique sur une données techniques
D’après la formule on a bien Métrique OF = 3 x 1,5 + 8 x 1 + 12 x 0.5 = 19
Equilibrage de charge des instances de génération d’OF à partir des métriques OF
Pilotage_OF_Creation_par_GtfPlan
est la fonction qui transfère le contenu du fichier GtfPlan
dans la table temporaire TmpBl
Elle calcule le nombre d’instances nécessaires (voir https://divalto.atlassian.net/wiki/spaces/RDI/pages/edit-v2/11576803336#Nombre-d%E2%80%99instances-de-g%C3%A9n%C3%A9rations-d%E2%80%99OF-lanc%C3%A9s) et affecte chaque ligne d’OF à 1 des 5 instances en fonction de la valeur de sa métrique OF.
La fonction affecte l’OF a l’instance qui est toujours la moins chargée.
Etude de cas
La fonction a déjà traité les 8 premières lignes d’OF et la situation est la suivante :
Instance du programme | Métriques OF totale |
---|---|
#1 | 18 |
#2 | 22 |
#3 | 16 |
#4 | 21 |
#5 | 17 |
Le 9ème OF a une métrique OF = 19 → la fonction l’affectera à l’instance #3 (16) qui est la moins chargée
L’instance #3 passera à 35 (16 + 19)
Le 10ème OF sera affecté à l’instance #5 (17) …
Lorsque la fonction a traité toutes les lignes d’OF chaque instance du programme est équilibrée.
Le mode d'équilibrage est assez basique mais d’après les tests réalisés il s’avère suffisant.
Désactiver la parallélisation sur un programme
Il est possible d’utiliser le nouveau moteur 10.12 sans avoir recourt au lancement simultané de plusieurs instances du programme de génération des OF.
Pour désactiver le génération des OF en mode parallèle il faut modifier le retour de la fonction Of_moteur_x12_parallele
- la désactivation se fait pour chaque programme
Génération des OF à l’affaire
gattgpa120.dhsp / Of_moteur_x12_parallele
Génération des OF à la commande
ggtt105_sql.dhsp / Of_moteur_x12_parallele