Параллельная пауза и возобновление?

У меня довольно странная вещь, которую я вижу, когда я запускаю 8 заданий шифрования GPG с параллельной GNU:

Команда, которую я запускал, такова:

find . -type f -not -iname "*.gpg" | sort |parallel --gnu -j 8 --workdir "$PWD" ' echo "Encrypting {}..." ; gpg --encrypt --recipient "me@mail.com" "{}" ' 

Почему рабочие места запускаются и останавливаются, а также запускаются и останавливаются, а не просто занимают все процессорное время?

4 Solutions collect form web for “Параллельная пауза и возобновление?”

GPG нуждается в некоторых случайных байтах для шифрования. Если у вас закончится энтропия в пуле, это заставит GPG остановиться.

--quick-random будет использовать случайные числа низкого качества, делая шифрование незащищенным (и поэтому бесполезным, поэтому используйте его только для проверки, является ли это проблемой, а не в производстве), но не закончится. Если использование --quick-random не приостанавливается, то это причина вашей проблемы.

Как писал Оле Танге , gpg требует случайных данных из /dev/random , которые могут замедляться довольно быстро, если энтропии недостаточно.

Хорошее решение этой проблемы. При необходимости он предоставляет новую энтропию ядру (и, следовательно, / dev / random).

Утверждение Оле Танге о том, что Gpg блокирует чтение /dev/random является хорошим. Вы можете подтвердить это, посмотрев на один из процессов gpg, пока он заблокирован, и проверьте, на что он заблокирован:

 lsof -p1234 strace -s9999 -tt -p1234 

(где 1234 является PID процесса gpg). Если вы видите что-то вроде этого

 … gpg 1234 naftuli 4r CHR 1,8 0t0 0 /dev/random … read(4, … 

то это проблема.

Gpg не имеет возможности использовать /dev/urandom вместо /dev/random . Разница между этими двумя устройствами заключается в том, что /dev/urandom никогда не блокирует (даже в редких случаях, когда это необходимо), в то время как /dev/random часто блокирует (даже в обычных случаях, когда это не должно). Для длинного рассказа, прочитайте, является ли rand из / dev / urandom безопасным для ключа входа?

Быстрое обходное решение было бы сделать копию двоичного файла gpg, заменить /dev/random на /tmp/random (или что-нибудь еще с той же длиной, которое, к сожалению, исключает /dev/urandom ), и создать символическую ссылку /tmp/random -> /dev/urandom .

Обмен, ввод-вывод?

Как выглядит 1 из потоков? Мой первый инстинкт заключается в том, что система ждет, когда какой-то ресурс станет доступным, возможно, диски? замена?

Встроенная задержка?

Другая мысль состоит в том, что gpg может иметь некоторые задержки, встроенные не по какой-либо другой причине, кроме как добавить к расходам на создание ключей, и поэтому задержки заставляют ваше затишье использовать CPU.

Это будет форма NOOP, в которой алгоритм генерации ключей ожидает простоя в течение некоторого периода времени перед тем, как продолжить.

Также вы можете получить представление о том, что происходит, запустив 1 из процессов gpg с помощью strace чтобы узнать, какие системные вызовы выполняются.

пример

 $ strace gpg --encrypt --recipient "me@mail.com" "..." 

Буфер?

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

Вы можете использовать такой инструмент, как pv чтобы решить эту проблему, поставив его после вывода из find .

пример

 $ find .... | sort | pv | ... 

Я бы посмотрел на эти переключатели:

  -a, --average-rate Turn the average rate counter on. This will display the average rate of data transfer so far. -b, --bytes Turn the total byte counter on. This will display the total amount of data transferred so far. 
  • Как закрыть смарт-карту после знака rpm с GPG2?
  • GPG -edit-ключ терпит неудачу с «без секретного ключа», хотя -list-secret-keys и -sign работают как ожидалось
  • Как создать отпечатанную подпись GPG с отпечатками (в конечном итоге в базе 16)?
  • Что означает предупреждение: rpmts_HdrFromFdno при установке из rpmfusion?
  • как отключить диалоги gcr-prompter?
  • Как я могу получить информацию о том, следует ли помнить пароль?
  • Используя инструмент gpg-agent-connect, восстановите файл закрытого ключа ssh
  • Импорт ключа gpg замораживает терминал
  • Безопасный просмотр зашифрованного файла
  • Проблема настройки GPU pinentry
  • Зачем нужно добавлять GPG-ключ с ключом apt перед добавлением URL-адреса в sources.list и загрузку-установку приложения с помощью apt-get?
  • Linux и Unix - лучшая ОС в мире.