Un nouveau script d'import OCS a été développé.
Il permet de :
  • gérer les imports et synchronisations de machines via un seul script
  • d'accélerer les performances de l'import en lançant plusieurs threads en même temps
Ce script se compose de :
  • un script shell qui lance les threads
  • une page php qui réalise un import

Syntaxe

Le script s'appelle ocsng_fullsync.sh. Il prend les paramètres suivants :
  • server_id : l'ID du serveur OCS pour lequel le script va s'exécuter. Si ce paramètre est omis, le script synchronisera tous les serveurs OCS renseignés dans GLPI
  • thread_nbr : indique le nombre de threads qui seront lancés en simultanés

Exemple de synchronisation du serveur dont l'ID est 1 en utilisant 3 threads :


*Attention :* Le script utilisant le mécanisme de cache de GLPI, il doit avoir un accès en écriture sur les fichiers du cache (files/_cache). Il faut donc bien faire attention à l'utilisateur Unix qui va lancer le script !

h2. Fonctionnement du script

L'import et la synchro sont répartis sur n threads. Il est possible, bien sûr, de préciser un seul thread.
Le script utilise les modulos pour déterminer quelles seront les machines synchronisées par un thread.

Exemple : si l'on lance le script avec 3 threads, chaque thread va lancer une requête SQL avec comme clause AND :
** AND ID % 3 = 2
** AND ID % 3 = 1
** AND ID % 3 = 0

Grâce à ce mécanisme, on est sûr que 2 threads ne synchroniseront pas la même machine.

[[Image(ocs_import_script_fr.png)]]

h3. Mécanisme de lock

Le script gère un mécanisme de lock, suivant la cynématique suivante :
** un thread récupère un ID de machine OCS à importer
** le moteur de règle détermine à quelle entité la machine doit être affectée
** la machine doit être importée dans l'entité XX
** un lock est posé par le thread sous la forme d'un fichier lock_entity_XX qui se trouve dans le répertoire (files/_lock)
** GLPI importe la machine
** le lock est retiré

Si un autre thread veut, au même moment, importer une autre machine pour la même entité, celui-ci ne pourra pas acquérir le lock pour cette entité, et attendra jusqu'à ce que celui-ci soit enlevé.
Ce mécanisme permet de :
** gérer les imports simultanés
** ne pas avoir de doublons dans la base

h3. Evaluation du nombre de threads à lancer

Le choix du nombre de threads doit être pris en fonction de la puissance de votre machine. En effet, si vous exécutez le script avec un trop grand nombre de threads, vous pouvez facilement écrouler les performances générales de la machines (et donc de GLPI).

Il est bien sûr possible de lancer le script avec un seul thread, ce qui permet de reproduire le comportement de l'import à l'heure actuelle (avec les scripts ocs_mass_import.php et ocs_mass_sync.php).

Pour déterminer le nombre de thread acceptable, il est préférable de :
* réaliser des tests d'imports avec plusieurs valeurs de threads différents
* comparer les résultats (cela permet de voir le nombre de machines importées/secondes)
* comparer les performances des différents logiciels pendant l'import (php, mysql etc...) jusqu'à trouver des valeurs qui n'empêchent pas la bonne utilisation de l'application

h3. Performances

Les tests ont été effectués avec une version 0.70, comportant 18 entités et 20 règles d'affectation.

Voici quelques chiffres, fournis à titre indicatifs :

*Athlon XP, 1 processeur*:
* Athlon XP 2800+
* 1Go de RAM 
* OS: Debian
* import de 1013 machines

Résultats :
* 2 threads simultanés : 6m25 soit 2,7 machines par secondes 
* 3 threads simultanés : 8m27 soit 1,99 machines par secondes
La machine étant monoprocesseur, il vaut mieux limiter le nombre de threads.

*Octo Xeon 3Ghz*:
* 2 Xeons quadri-coeurs
* 4Go de RAM
* OS: Fedora Core 6
* import de 1013 machines

Résultats :
* 6 threads simultanés : 1m29sec
* 8 threads simultanés : 1m17sec
* 9 threads simultanés : 1m12sec
* 10 threads simultanés : 1m6sec
* 12 threads simultanés :  1m07sec
* 16 threads simultanés :  1m07sec
Le meilleur compromis est de lancer entre 8 et 10 threads, ce qui permet d'avoir un rendement maximum sans écrouler les performances de la machine.

ocs_import_script_fr.png - Schéma en français du script d'import OCS multi-threadé (66.3 KB) walid, 04/25/2007 04:06 PM