Что делает git rev-list медленным (er), и как сделать его go быстрее? - PullRequest
1 голос
/ 13 февраля 2020

Я получил некоторые журналы производительности с сервера Bitbucket и вижу, что большую часть времени тратится на выполнение 'git rev-list --format = ... --no-walk = unsorted ... ha sh ... '. Среднее время его запуска составляет 0,9 с, иногда дольше.

  1. Как масштабируется производительность git rev-list? O (ревизии)? O (файлы)?
  2. Что я могу с этим сделать? (Программное или аппаратное обеспечение)

1 Ответ

2 голосов
/ 13 февраля 2020

Ответ на вопрос 1 очень сложен, так как зависит от предоставленных опций. Тем не менее, ваша конкретная команда включает в себя:

--no-walk=unsorted

, что означает, что команда rev-list не * не только проходит по графику фиксации (именно там большинство времени тратится в основном на большинство *). 1006 * команд), он также даже не сортирует объекты, указанные в командной строке (что исключает вызов алгоритма сортировки; обычно сортировка - это O (n log n) по количеству сортируемых элементов - для большинства --no-walk git rev-list команд, в любом случае n здесь будет довольно маленьким).

В этом случае производительность git rev-list будет зависеть от поиска идентификаторов объектов ha sh, указанных на командной строки и путем форматирования этих объектов с помощью директивы --format. Вполне вероятно, что первое является медленной частью: объекты фиксации должны быть получены с диска (как свободные объекты или члены объекта пакета). Скорость этого будет зависеть от того, что находится в кеше вашей ОС, насколько эффективен этот кеш, количество свободных и упакованных объектов, количество пакетов и т. Д.

Недавно было исправлено быстродействие Git для использования в репозиториях с более чем 50 пакетными файлами. Если у вас> 50 файлов объектных пакетов и у вас нет этой версии Git, обновление вашего Git будет самым быстрым решением для этого. Вы также можете запустить git repack, чтобы уменьшить количество файлов пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...