В lib/bee2/src/core/rng/rng_timer.c источник энтропии "jitter" запускает внутренний timer-counter thread через tmCtrStart() / tmCtrCreate().
На Unix поток выполняет бесконечный активный цикл:
static void* tmCtrLoop(void* args)
{
while (_tm_ctr_loop)
_tm_ctr_ticks++;
return 0;
}
После первого вызова rngJitterRead() этот поток остается жить до завершения процесса через utilOnExit(tmCtrClose). В долгоживущем приложении это приводит к постоянной загрузке одного CPU-ядра на 100% даже в полном простое.
Наблюдаемое поведение
- В процессе появляется один дополнительный поток.
- Поток постоянно потребляет 100% одного CPU-ядра.
- Нагрузка сохраняется после завершения чтения энтропии и продолжается весь runtime процесса.
Ожидаемое поведение
Timer-counter thread должен быть активен только во время фактического чтения jitter-энтропии либо должен иметь режим ожидания, не занимающий CPU постоянно.
Для долгоживущих приложений важно, чтобы после rngJitterRead() не оставался служебный поток, выполняющий busy-loop без полезной работы.
В
lib/bee2/src/core/rng/rng_timer.cисточник энтропии"jitter"запускает внутренний timer-counter thread черезtmCtrStart()/tmCtrCreate().На Unix поток выполняет бесконечный активный цикл:
После первого вызова
rngJitterRead()этот поток остается жить до завершения процесса черезutilOnExit(tmCtrClose). В долгоживущем приложении это приводит к постоянной загрузке одного CPU-ядра на 100% даже в полном простое.Наблюдаемое поведение
Ожидаемое поведение
Timer-counter thread должен быть активен только во время фактического чтения jitter-энтропии либо должен иметь режим ожидания, не занимающий CPU постоянно.
Для долгоживущих приложений важно, чтобы после
rngJitterRead()не оставался служебный поток, выполняющий busy-loop без полезной работы.