2010-01-29 4 views
9

Mi piacerebbe sapere come accelerare la risoluzione automatica di perforce quando si esegue l'integrazione (unire il proprio e il loro se non vi sono conflitti).Come velocizzare la perforforazione automatica?

Attualmente sta prendendo ore per ~ 5000 file quando si esegue utilizzando un server proxy, anche se il server proxy ha i file pre-memorizzati nella cache.

anche un'interfaccia P4V non ti dà alcun suggerimento per quanto riguarda lo stato di avanzamento del compito, non si sa se finirà in un secondo o l'anno prossimo.

+0

"Risoluzione automatica (nessuna unione)" - l'algoritmo più semplice possibile, quindi perché è così lento ?! Penso che il problema sia che Perforce fa tutto sulla rete, quindi sta facendo 5000 richieste in sequenza o qualcosa di stupido. –

risposta

1

Credo che si potrebbe fare la volontà dalla riga di comando, che potrebbe dare qualche idea che è ancora progredendo, e non si sarebbe bloccare da altri lavori in P4V.

0

Se sai in anticipo che sarà di sicuro essere una risoluzione unidirezionale, forse potresti provare a forzare l'accettazione della versione "loro" o "tua". Vedi "p4 help resolve" dalla riga di comando, in particolare le opzioni "-at" e "-ay".

non so con certezza se sarà effettivamente produrrà alcun beneficio di prestazioni o no, ma è abbastanza facile da provare (e fare un po 'di benchmarking).

2

5000 file non sono molti da risolvere, per un server moderatamente potente.

I file sono di dimensioni significative? se i tuoi 5000 file sono binari, autoresolve eseguirà il checksum sul tuo hdd locale per confrontarli con il checksum sul server (non con il proxy, che sta semplicemente trasmettendo le informazioni oi file), e questo può rallentare.

Se si sa in anticipo che si sta tentando una risoluzione unidirezionale (mangiare i propri sul proprio hdd o mangiarli dal server), è possibile use the 'accept yours' or 'accept theirs' options to autoresolve e saltare l'operazione di checksum. Dalla riga di comando, sarebbe "p4 risolvere" rispettivamente con l'opzione "-ay" o "-at".

È inoltre possibile contattare il proprio amministratore di perforce db e fare in modo che registrino le azioni del server. Forse ci sono azioni che vengono eseguite quando si esegue l'integrazione e si risolvono i blocchi di file, causando la rotazione e l'attesa fino al rilascio dei blocchi. Vedere il riferimento per "p4 monitor show -a".

Per esempio, nel nostro ufficio, è comune su un Lunedi mattina per tutti in ufficio per integrare fino a loro rami privati ​​e determinazione.

+0

Alla checksum pochi gigabyte di dati ogni volta non è comunque veloce. C'è un modo per rendere utilizzabile solo il tempo di modifica dei file? Nel 99,999% dei casi i file non vengono modificati senza modificare la loro data/ora. – sorin

+0

Perforce non ha un modo semplice per farlo. Se non si desidera rilevare le modifiche e utilizzare solo la mod mode del file per determinare se autorizzarle, è necessario eseguire lo script o programmare qualcosa per ottenere la nozione del database perforfor di quando è stato inviato un file rispetto al tempo di modifica di il file sul tuo disco rigido. Il valore modtime del tuo spazio di lavoro del client può anche cambiare il tempo di modifica dei file sincronizzati, quindi fai attenzione se segui questa strada. – Epu

2

Ho anche un problema simile che funziona con un proxy dall'altra parte del mondo. Ho eseguito alcuni esperimenti e il problema non sembra essere influenzato dalla dimensione del file o dal metodo di risoluzione (accept-theirs, ecc.) Almeno per i file di dimensioni ridotte.

Suppongo che ci siano dei costi di andata e ritorno per file poiché il tempo di risoluzione totale è abbastanza costante indipendentemente dal fatto che interrompo il comando in singoli comandi di risoluzione per file, li batch per gruppi di file o risolvi intera lista di modifiche. Nel mio caso, il sovraccarico è di circa 1 secondo per file per> 10k file.

Attualmente sto lavorando intorno al problema accedendo in un VM co-location con il server remoto ed eseguire la volontà da lì. È quindi possibile inviare dalla VM e quindi sincronizzare normalmente. Poiché ho bisogno di eseguire prima i test localmente prima dell'invio, accantonare i file sulla VM e quindi eliminarli sul mio computer locale. Anche questo non è terribilmente veloce ma sembra migliore.

Quindi, non una soluzione per il problema ma una soluzione valida nel mio caso che consente di risparmiare ore.