git-grep не использует несколько потоков
Я пытаюсь использовать git grep
искать все ревизии очень большого хранилища. Я использую команду:
$ git rev-list --all | xargs git grep -I --threads 10 --line-number \
--only-matching "SomeString"
Я использую последнюю официальную версию Git на Mac:
$ git --version
git version 2.19.1
Это занимает очень много времени, глядя на монитор активности, используя только один поток. Однако в документах говорится, что по умолчанию следует использовать 8. Используется только один поток с или без --threads <num>
вариант. У меня нет другого набора настроек, который бы переопределил этот параметр:
$ git config --list
credential.helper=osxkeychain
user.name=****
user.email=****
Есть идеи, что мне не хватает? Может ли кто-нибудь еще использовать git-grep
и подтвердить, что они видят несколько потоков?
Спасибо за любую помощь
1 ответ
Интересно, если это потому, что вы используете | xargs
, который ждет ввода на stdin
, Поскольку выход из git rev-list
это единственный поток, xargs, по умолчанию будет использоваться только один процесс:
-P max-procs, --max-procs=max-procs
Run up to max-procs processes at a time; **the default is 1**. If
max-procs is 0, xargs will run as many processes as possible
at a time.
Поэтому попробуйте увеличить его, используя флаг выше:
git rev-list --all | xargs -P 10 git grep -I --threads 1 --line-number \
--only-matching "SomeString"
Это породит несколько git grep
Скорее, что позволяют git grep
использовать несколько потоков, так что это своего рода функциональный ответ.
Количество потоков, которые нужно выделить xargs
будет зависеть от количества потоков, используемых git grep
.
Раньше по умолчанию было 8 для git grep
.
Но:
В Git 2.26 (первый квартал 2020 г.) это количество ядер.
См. Фиксацию f1928f0, фиксацию 70a9fef, фиксацию 1184a95, фиксацию 6c30762, фиксацию c441ea4, фиксацию d799242, фиксацию 1d1729c, фиксацию 31877c9, фиксацию b1fc9da, фиксацию d5b0bac, фиксацию faf123c, фиксацию c3a5bb3 (16 января 2020 г.) ( Матеус Тауресmatheustavares
).
(Слияние Junio C Hamano -gitster
- в коммите 56ceb64, 14 февраля 2020 г.)
grep
: использовать нет. ядер по умолчанию нет. потоковПодписано: Матеус Таварес
когда
--threads
не указано,git grep
по умолчанию будет использовать 8 потоков.Это фиксированное число может быть слишком большим для машин с меньшим количеством ядер и слишком маленьким для машин с большим количеством ядер.
Поэтому вместо этого используйте количество логических ядер, доступных в машине, что, по всей видимости, дает наилучшую общую производительность.Следующие измерения соответствуют среднему истекшему времени для 30
git grep
выполнений в репозитории хрома с 95% доверительным интервалом (каждый набор из 30 выполнялся после 2 прогонов).
Regex 1 - это 'abcd[02]
'и Regex 2 -'(static|extern) (int|double) \*
'.(репо хрома при фиксации 03ae96f ("Добавить тестирование фильтров при DSF=2", 04.06.2019), после '
git gc
'исполнение.)| Working tree | Object Store ------|-------------------------------|-------------------------------- #ths | Regex 1 | Regex 2 | Regex 1 | Regex 2 ------|---------------|---------------|----------------|--------------- 32 | 2.92s ± 0.01 | 3.72s ± 0.21 | 5.36s ± 0.01 | 6.07s ± 0.01 16 | 2.84s ± 0.01 | 3.57s ± 0.21 | 5.05s ± 0.01 | 5.71s ± 0.01 8 | 2.53s ± 0.00 | 3.24s ± 0.21 | 4.86s ± 0.01 | 5.48s ± 0.01 4 | 2.43s ± 0.02 | 3.22s ± 0.20 | 5.22s ± 0.02 | 6.03s ± 0.02 2 | 3.06s ± 0.20 | 4.52s ± 0.01 | 7.52s ± 0.01 | 9.06s ± 0.01 1 | 6.16s ± 0.01 | 9.25s ± 0.02 | 14.10s ± 0.01 | 17.22s ± 0.01
Вышеупомянутые тесты были выполнены на настольном компьютере под управлением Debian 10.0 с процессором Intel(R) Xeon(R) E3-1230 V2 (4 ядра с гиперпоточностью), 32 ГБ ОЗУ и жестким диском SATA 3.1 7200 об / мин.
Ниже, тесты были повторены для машины с SSD: ноутбука Manjaro с Intel(R) i7-7700HQ (4 ядра с гиперпоточностью) и 16 ГБ оперативной памяти:
| Working tree | Object Store ------|--------------------------------|-------------------------------- #ths | Regex 1 | Regex 2 | Regex 1 | Regex 2 ------|---------------|----------------|----------------|--------------- 32 | 3.29s ± 0.21 | 4.30s ± 0.01 | 6.30s ± 0.01 | 7.30s ± 0.02 16 | 3.19s ± 0.20 | 4.14s ± 0.02 | 5.91s ± 0.01 | 6.83s ± 0.01 8 | 2.90s ± 0.04 | 3.82s ± 0.20 | 5.70s ± 0.02 | 6.53s ± 0.01 4 | 2.84s ± 0.02 | 3.77s ± 0.20 | 6.19s ± 0.02 | 7.18s ± 0.02 2 | 3.73s ± 0.21 | 5.57s ± 0.02 | 9.28s ± 0.01 | 11.22s ± 0.01 1 | 7.48s ± 0.02 | 11.36s ± 0.03 | 17.75s ± 0.01 | 21.87s ± 0.08