📖
最近、Linux には 2 つの小さなパッチ (1 つは 1 行の拡張子、もう 1 つはさらに 20 行の拡張子) が組み込まれており、この優れた無料オペレーティング システムのカーネルのパフォーマンスに、疑いの余地なく大きな影響を与えることが証明されました。
「mmap」パッチ
Intel が管理する Linux カーネル自動テスト ボットは、たった 1 行のコードによって Linux カーネルのパフォーマンスが 3888.9% (はい、ほぼ 4000%) 向上したことを確認しました。
具体的には、THP (管理オーバーヘッドを削減することでパフォーマンスを向上させるために設計されたメモリの大きな塊) と呼ばれるメモリの特定のブロックの配置方法を全面的に見直すパッチ (「mmap」と呼ばれる) の 1 行です。
基本的に、カーネルは、特定の方法で調整するための厳密なルールに従って、より大きなメモリ割り当てを行いました。これは善意ではありましたが、そのルールに適合しない一部のプログラムで問題を引き起こし、結果的に大幅な速度低下を引き起こしていました。
このパッチは何を解決しますか?
1 年以上前にカーネルが変更された後、「cactusBSSN」ベンチマークの実行速度が大幅に遅くなりました (一部の PC では最大 600%)。この問題は、このプログラムが「異常な」サイズ (4632 kB など) のメモリを使用しているために発生しました。
変更前は、これらのサイズを大きなブロックにまとめることができ、システムはそれを簡単に処理できました。しかし、変更後、これらのブロックはより小さな部分に分割され、それらの間に「空きスペース」が残されました。
これにより、システムはメモリを効率的に見つけて使用することがより困難になりました。同じ問題が、人気の写真編集プログラムである Darktable にも影響を与えることになりました。
Linus Torvalds によるパッチ
Linux カーネルの作成者である Linus Torvalds は、なぜ彼がその開発を主導し続けるのか (そして、なぜ彼がこの分野で最も偉大な専門家の一人とみなされているのか) を、カーネル コードへの最新のパッチの 1 つで、わずか 21 行で再び実証しました。 Torvalds は、Linuxカーネルのマルチスレッド パフォーマンスの 2.6% 向上を達成しました。
このパッチは、1 か月以内にリリースされたバージョン 6.12 以降、Linux カーネルの安定バージョンに統合されています。
効果的な (ただし効率的ではない) セキュリティ対策を削除する
この変更は、Linux カーネルの「copy_from_user()」機能に焦点を当てており、その目新しさの 1 つは、 メルトダウンおよびスペクターとして知られる脆弱性を軽減するために当時導入されたセキュリティ対策である「barrier_nospec()」の使用を廃止したことです。 。
2018 年に発見されたこれらの脆弱性は、投機的実行を悪用しました。投機的実行とは、命令が必要になる前に予測してロードし、パフォーマンスを最適化するように設計された最新のプロセッサのメカニズムです。
問題は、前述のセキュリティ対策の実装は非常に効果的ではあるものの、非常に時間がかかり、プロキシ サーバーやデータベースなど、呼び出し頻度の高いマルチスレッド システムやアプリケーションのパフォーマンスに大きな影響を与えることが判明していることです。
Torvalds のソリューション: シンプルさの中の効率性
Linux カーネルの進化において、パフォーマンスを犠牲にすることなくシステムを保護するというジレンマは常にありました。 Torvalds 氏は、速度に不当に影響を与える対策に反対することで知られており、両方の問題を軽減する解決策を考え出しました。
したがって、セキュリティとパフォーマンスのバランスという哲学に忠実に、ポインタ マスキングの使用に基づく最適化を導入しました。つまり、ユーザーが提供したアドレスが異なる状況では、すべて 1 のアドレス (‘111…111’) を割り当てます。無効
この変更により、必要なセキュリティが維持されるだけでなく、冗長な操作が排除され、システム効率が向上します。
このソリューションの効果は、マルチスレッド環境で実行された自動テストによって確認され、パフォーマンスが 2.6% 向上したことがわかりました。これはささやかな進歩のように思えるかもしれませんが、サーバーやクラウド サービスからオンプレミス デバイスに至るまで、 Linux の使用が世界規模で行われていることを考慮すると、その効果はさらに大きくなります。