Haute performance forcée sync

0

J'essaie de faire un dossier de synchronisation p4 / ...

Ce n'est pas très rapide et n'utilise que 2% du processeur. Je ne suis pas content de la performance.

J'essaie d'écrire une fonction dans bash, étant donné le paramètre n, il forme une file d'attente de tous les fichiers et dossiers n niveaux profonds et forks d'un processus de p4 sync -f $ thatDirectory / ... ou de p4 sync -f $ thatFile .

Comment puis-je commencer à ce sujet? Y at-il un utilitaire qui fait déjà cela?

Merci d'avance.

SurenNihalani
la source

Réponses:

2

Je n'ai aucune expérience de Perforce, mais cette synchronisation ressemble à une opération liée aux entrées-sorties . La parallélisation dans plusieurs processus ne sera probablement pas utile, car le goulot d'étranglement est le disque ou le réseau.

Si le disque constitue le goulot d'étranglement, la parallélisation peut en réalité le ralentir , car de nombreux processus accèdent simultanément à différents fichiers, ce qui provoque la chute des têtes de disque.

Avant de vous lancer dans les scripts, effectuez une analyse pour déterminer ce qui le ralentit. Utilisez des outils tels que straceet Wireshark pour étudier les appels en lecture / écriture et le trafic réseau, par exemple.

Wyzard
la source
0

parfois, le processus p4d (le serveur) a été démarré avec un indicateur '-f' qui l'exécutera en tant que processus à thread unique.

quelques points à noter

essayez plutôt d’utiliser l’option -p pour synchroniser - cela signifie moins d’écritures de base de données et c’est une bonne chose!

vous pouvez essayer un type de chose "allez au-delà des niveaux et synchronisez à partir de là-bas", par exemple:

$ p4 dirs // <chemin> / * | tout en lecture chemin; faire

                p4 dirs $ path / * |

                pendant la lecture du sous-chemin;

                faire

                                p4 dirs $ subpath / * |

                                en lisant subsubpath;

                                faire

                                                p4 <cmd> $ subsubpath / ...;

                                terminé;

                                p4 <cmd> $ path / ... # pour récupérer les fichiers à ce niveau

                terminé;

                p4 <cmd> // <chemin> / ... # pour attraper les fichiers à ce niveau (haut) terminé

 

dans votre cas, vous auriez <cmd> égal à "sync" + tous les autres arguments.

 

UNE...
la source
0

Je m'éloignerais de la synchronisation par fichiers ... surtout si plusieurs utilisateurs essaient de le faire à partir d'un outil intégré ou de quelque chose de similaire. Nous avons complètement tué notre serveur ici à plusieurs reprises avec des cascades comme celles-ci.

Perforce offre cependant une option pour paralléliser votre synchronisation pour vous - parallèlement, cela nécessite quelques ajustements côté serveur, mais vous devriez l'essayer.

vous pouvez partager plusieurs invocations de p4.exe, mais je voudrais essayer de les garder petites, du moins pas au-delà du nombre de vos noyaux disponibles.

Newtopien
la source