random: crng init doneでアプリケーションの起動が遅くなる問題
2022-03-01 20:03:31
現象です。
起動後、アプリの起動が30秒間ブロックされ、random: crng init doneの後まで続かない。
原因
トレースした結果、getrandomの後にSYSC_getrandomの以下のシステムコールがあることが原因であることがわかりました。
SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count,
unsigned int, flags)
{
if (flags & ~(GRND_NONBLOCK|GRND_RANDOM))
return -EINVAL;
if (count > INT_MAX)
count = INT_MAX;
if (flags & GRND_RANDOM)
return _random_read(flags & GRND_NONBLOCK, buf, count);
if (!crng_ready()) {
if (flags & GRND_NONBLOCK)
return -EAGAIN;
crng_wait_ready(); //******************* is blocking *************** at this point because the entropy pool is not full
if (signal_pending(current))
return -ERESTARTSYS;
}
return urandom_read(NULL, buf, count, NULL);
}
理論的には urandom_read は crng_wait_ready を待つ必要はありません。解決策は crng_ready の条件を crng_init > 0 に変更することです。
#if CRNG_READY_0
#define crng_ready() (likely(crng_init > 0))
#else
#define crng_ready() (likely(crng_init > 1))
#endif
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例