IT Info
より良いパフォーマンスのために vDSO に getrandom() を追加する Linux の提案
Linux の「ランダムな」カーネル コードの改善に最近多くの作業を費やしている WireGuard の名声は、ユーザー空間の開発者のニーズによりよく対応するために、パフォーマンスを向上させるために vDSO に getrandom() サポートを追加する提案を送信しました。 Phoronix を読んでいるうちに、Jason Donenfeld は GNU C ライブラリに arc4random 関数が追加されていることを知りました。一方、Donenfeld は Glibc メーリング リストで議論を開始し、いくつかの異なる見解を示しました。そしてその目的についての質問。 これは良いアイデアなのか、glibc が望んでいるものなのか、長期的にコミットする価値のあるデザインなのか、本当に疑問に思っています。 まず、これが実際に役立つのはどのようなユースケースですか?最近の Linux カーネルの変更により、4.9 に完全にバックポートされました!–getrandom() と/dev/urandom は非常に高速で、CPU ごとの状態でロックなしで動作します。ユーザー空間でそれを行うことでシステムコールを回避することは確かですが、それは本当に重要ですか?誰がこれから正確に利益を得ますか? そのように見ると、何の役にも立たないほど複雑で、最終的にバグやさまざまな見落としにつながる複雑さのように思えます。 たとえば、仮想マシンが ACPI 経由でカーネルに渡された識別子を使用して fork すると、カーネルはそれ自体を再シードします。また、システムの再開時に、通常の S3 スリープからだけでなく、さらに重要なことに休止状態からも再シードします。そして一般的に、カーネルはエントロピーの調停者であるため、いつ再シードするのが理にかなっているかを判断する態勢が整っています。 一方、Glibc はいくつかのヒューリスティックを採用し、いくつかの決定を下すことができます (フォーク、16 MiB の後など)。カーネルが持っている情報。 arc4random ではこれを見逃しており、将来その情報が何らかの形でユーザー空間にエクスポートされるとしたら、カーネル インターフェイスと一緒にユーザー空間インターフェイスを設計するのは非常に良いことです。 そのため、ユーザー空間 libcs で乱数を生成するというこれまでの議論は、何らかの方法で Read more…