Почему производительность lstat на APFS (OSX) низкая по сравнению с Ext4 (Linux) - PullRequest
2 голосов
/ 17 апреля 2020

При профилировании Git в большом репозитории я обнаружил, что состояние git значительно (в 10 раз) медленнее для ма c по сравнению с linux. git status запускается lstat для каждого файла в хранилище, отсюда и медлительность.

Есть ли конкретная причина, по которой этот системный вызов намного медленнее на Mac по сравнению с linux?

1 Ответ

1 голос
/ 17 апреля 2020

Сначала проверьте свою версию Git, так как в последней версии Git произошли улучшения (например, git add в 2.20 , git sta sh в 2.22 и даже предстоящих 2,27 с подмодулями ).

Четные git status улучшены с Git 2,24

The * Параметр 1016 * подходит для репозиториев со многими файлами в рабочем каталоге.
При установке index.version=4 и core.untrackedCache=true такие команды, как 'git status', должны улучшиться.


Один анализ различия lstats в APFS по сравнению с Ext4 был выполнен в « Глобальные блокировки ядра в APFS » Грегори Сзор c:

Очевидно, что macOS 10.14 Mojave получил производительность по сравнению с macOS 10.13!
Несмотря на эти улучшения, APFS все еще тратит много времени процессора в ядре. И время ЦП ядра все еще сравнительно очень велико по сравнению с Linux / EXT4, даже для одной операции процесса.

Хотя исходный код для APFS мне не доступен для подтверждения, результаты профилирования показывают чрезмерное время, затрачиваемое на lck_mtx_lock_grab_mutex() в сочетании с тем фактом, что время выполнения уменьшается при уменьшении числа параллельных процессов, приводит меня к выводу, что APFS получает глобальную блокировку ядра во время операций только для чтения, таких как readdir ().

Другими словами, APFS замедляется при попытке выполнить параллельный ввод-вывод только для чтения.

...