у "легкого веса" только есть значение при сравнении его с чем-то еще. Поток является более легким весом, чем процесс. Xfce является более легким весом, чем Gnome. Щенок Linux является более легким весом, чем Ubuntu.
Но нет никаких жестких правил для того, что делает что-то "легким". В целом что-то, что легко, использует меньше из чего-то, что это не так легко, но "что-то" могло быть многими вещами - могли быть ресурсы ЦП, память, дисковое пространство, и т.д.
GPG нужны некоторые случайные байты для шифрования. Если у Вас заканчивается энтропия в пуле, который заставит GPG приостанавливаться.
--quick-random
будет использовать низкокачественные случайные числа, делая шифрование небезопасным (и поэтому бесполезный, так используйте его только, чтобы протестировать, является ли это проблемой, не в производстве), но не закончится. При использовании --quick-random
не приостановится, затем это - причина Вашей проблемы.
Как Ole Tange записал, gpg нужны случайные данные из /dev/random
, который может замедлиться вполне быстро, если существует недостаточно энтропии.
Хорошее решение этой проблемы является haveged. При необходимости это предоставляет новую энтропию ядру (и поэтому/dev/random).
Гипотеза Ole Tange, что 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
часто блоки (даже в общих падежах, где это не было должно). Для длинной истории читайте, рэнд от/dev/urandom, безопасного для ключа входа в систему?
Быстрое обходное решение должно было бы сделать копию gpg двоичного файла, замены /dev/random
/tmp/random
(или что-либо еще с той же длиной, которая, к сожалению, исключает /dev/urandom
), и создайте символьную ссылку /tmp/random -> /dev/urandom
.
clrngd
или rng-tools
. Еще лучше должен был бы использовать аппаратный фидер энтропии.
– Elias Probst
14.12.2013, 02:35
/dev/urandom
совершенно безопасно.
– Gilles 'SO- stop being evil'
14.12.2013, 02:40
/dev/urandom
должно быть достаточно безопасным для нормального использования.
– Naftuli Kay
15.12.2013, 21:23
На что похож 1 из потоков? Мой первый инстинкт - то, что система ожидает некоторого ресурса для становления доступной, возможно, диски? подкачка?
Другая мысль - это gpg
может иметь некоторые задержки, встроенные ни по какой другой причине, чем добавить к расходу создания ключей, и таким образом, задержки вызывают Ваше затишье в использовании ЦП.
Они были бы формой 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.
--quick-random
: это для тестирования только, это не безопасно. (Я не делаю то, в зависимости от чего алгоритм gpg использует по умолчанию точно, что он делает плохой RNG, мог означать, что шифрованный текст тривиален для дешифрования.) Правильное решение состояло бы в том, чтобы использовать/dev/urandom
вместо/dev/random
(это безопасно за исключением недавно установленной системы). К сожалению, gpg не имеет опции использовать/dev/urandom
. – Gilles 'SO- stop being evil' 14.12.2013, 02:16--quick-random
использовал бы/dev/urandom
. Угадайте, что я не использую его, затем :) – Naftuli Kay 15.12.2013, 21:13