Вероятно, для начала мы можем исключить conv=sync
. Он делает что-то совсем другое, что, как я полагаю, вам не нужно :-).
pad every input block with NULs to ibs-size; when used with block or unblock, pad with spaces rather than NULs
oflag=direct
не синхронизируется автоматически сама по себе.[ *]
conv=fsync
отличается от oflag=sync
. oflag=sync
эффективно синхронизируется после каждого выходного блока. conv=fsync
выполняет одну синхронизацию в конце.
Конечный результат тот же, но производительность на этом пути отличается :-).
oflag=sync
может быть значительно медленнее. Вы можете смягчить это, увеличив размер блока.
Если кэши, специфичные для устройства -, велики[1], это повлияет на отображаемый прогресс, например. опцией status=progress
.
Если вы , а не используете oflag=direct
, то в кэше системных страниц может накапливаться большое количество записей. Это наращивание -повлияет на прогресс, который вы видите[2]. Но также Linux иногда плохо реагирует на сборку -и снижает производительность для всех устройств[3].
[1] «Очевидно, ваше оборудование имеет сотни мегабайт кеша... В моем случае это связано с тем, что ядро [фактически работает внутри виртуальной машины]».https://unix.stackexchange.com/a/420300/29483
[2] Почему конвейер gunzip в dd замедляется в конце?
[3] Система тормозит при выполнении больших операций чтения/записи на внешних дисках
[ *] Когда вы записываете напрямую в узел блочного устройства , Linux синхронизирует блочное устройство, когда оно закрыто (и не открыто какой-либо другой программой ). См.:Кэш блочного устройства и кэш-память. файловая система . Иногда я вижу людей, которые не используют явную синхронизацию при записи на блочное устройство. Часто будет казаться, что он работает нормально... пока не перестанет. Поэтому я рекомендую хотя бы использовать conv=fsync
.
Учитывая порядок сообщений, что-то в вашем .zshrc
приводит к выполнению /etc/zshenv
. Это может быть либо обращение к источнику /etc/zshenv
, либо вызов другого экземпляра zsh. Ищите такие вещи, как
. /etc/zshenv
source /etc/zshenv
zsh -c …
zsh /path/to/file
/path/to/file # which starts with #!/usr/bin/env zsh
или их варианты.
Обратите внимание, что оскорбительная строка может находиться либо в самом файле .zshrc
, либо в другом файле, источником которого она является.
Вы можете запустить zsh -x
или zsh -f -x ~/.zshrc
и найти вызывающую ошибку команду в трассировке. Это может быть проще, чем найти его в исходном коде.
Сложнее всего обнаружить случай выполнения другой программы, которая оказывается zsh-скриптом. Для этого может быть проще отслеживать доступ к /etc/zshenv
. С другой стороны, если так и происходит, то это совершенно нормально и с этим ничего не поделаешь.