Я пытаюсь сделать папку синхронизации p4 /...

Это не очень быстро и использует только 2% процессора. Я не доволен работой.

Я пытаюсь написать функцию в bash, учитывая параметр n, она формирует очередь из всех файлов и папок глубиной n уровней и разветвляется из процесса p4 sync -f $ thatDirectory/... или p4 sync -f $ thatFile ,

Как мне начать об этом? Есть ли какая-либо утилита, которая уже делает это?

Заранее спасибо.

3 ответа3

2

У меня нет опыта работы с Perforce, но эта синхронизация звучит как операция ввода-вывода. Распараллеливание его в нескольких процессах вряд ли поможет, потому что узким местом является диск или сеть.

Если диск является узким местом, распараллеливание может на самом деле сделать его медленнее, потому что у вас будет много процессов, обращающихся к разным файлам одновременно, что приведет к вращению головок дисков.

Прежде чем приступить к написанию сценариев, проведите некоторый анализ, чтобы выяснить, что делает его медленным. Используйте такие инструменты, как strace и Wireshark, например, для изучения вызовов на чтение / запись и сетевого трафика.

0

иногда процесс p4d (сервер) запускается с флагом '-f', который запускает его как однопоточный процесс.

пару замечаний

попробуйте использовать опцию -p для синхронизации - это означает, что меньше записей в БД, и это должно быть хорошо!

Вы можете попробовать что-то типа «пойти на глубину и синхронизировать», что-то вроде:

$ p4 dirs //<путь> /* | во время чтения пути; делать

                p4 dirs $ path / * | пока читал подпуть; do p4 dirs $ subpath / * | пока читай подподпуть; сделать p4 <cmd> $ subsubpath / ... ; сделанный; p4 <cmd> $ path / ... # чтобы поймать файлы на этом уровне готово; p4 <cmd> // <путь> / ... # чтобы поймать файлы на этом (верхнем) уровне, что сделано в вашем случае, у вас будет <cmd>, равный «sync» + любые другие аргументы.  

0

Я бы отошел от синхронизации по файлам ... особенно, если у вас есть несколько пользователей, пытающихся сделать это с помощью встроенного инструмента или чего-то подобного. Мы полностью убили наш сервер здесь несколько раз с такими трюками.

Perforce, тем не менее, предлагает возможность распараллелить вашу синхронизацию для вас - Parallel, она требует некоторых настроек на стороне сервера, но вы должны попробовать.

Вы можете осквернить несколько вызовов p4.exe, но я постараюсь, чтобы они были небольшими, по крайней мере, не выходя за пределы доступного количества ядер

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .