GNU/Linux >> Linux の 問題 >  >> Linux

Linuxカーネル:イノベーショントップ5

イノベーションという言葉 テクノロジー業界では、革命とほぼ同じくらいの勢いで動き回っています。 そのため、誇張と実際に刺激的なものを区別するのは難しい場合があります。 Linuxカーネルは革新的と呼ばれてきましたが、それはまた、現代のコンピューティングにおける最大のハック、ミクロの世界におけるモノリスとも呼ばれています。

マーケティングとモデリングは別として、Linuxは間違いなくオープンソースの世界で最も人気のあるカーネルであり、30年近くの寿命にわたって実際のゲームチェンジャーを紹介しました。

Cgroups(2.6.24)

2007年に、PaulMenageとRohitSethは難解なコントロールグループを取得しました。 (cgroups)カーネルに追加された機能(cgroupsの現在の実装はTejun Heoによる書き直しです。)この新しいテクノロジーは、基本的に、特定の一連のタスクのサービス品質を保証する方法として最初に使用されました。

たとえば、Webサーバーに関連付けられているすべてのタスク用のコントロールグループ定義(cgroup)、定期的なバックアップ用の別のcgroup、および一般的なオペレーティングシステム要件用の別のcgroupを作成できます。次に、各cgroupのリソースの割合を制御して、OSとWebサーバーがシステムリソースの大部分を取得し、バックアッププロセスが残っているものにアクセスできるようにすることができます。

ただし、cgroupが最も有名になったのは、今日のクラウドを推進するテクノロジーとしての役割、つまりコンテナーです。実際、cgroupは元々プロセスコンテナと呼ばれていました。 LXC、CoreOS、Dockerなどのプロジェクトに採用されたときはそれほど驚くことではありませんでした。

水門が開かれ、コンテナという用語 Linuxの代名詞になり、マイクロサービススタイルのクラウドベースの「アプリ」の概念がすぐに標準になりました。最近、cgroupから逃れるのは難しく、非常に普及しています。すべての大規模インフラストラクチャ(およびLinuxを実行している場合はラップトップ)は、cgroupsを有意義な方法で利用し、コンピューティングエクスペリエンスをこれまで以上に管理しやすく柔軟にします。

たとえば、コンピューターにFlathubまたはFlatpakを既にインストールしている場合や、職場でKubernetesやOpenShiftの使用を開始している場合があります。とにかく、「コンテナー」という用語がまだ曖昧な場合は、Linuxコンテナーの舞台裏からコンテナーを実際に理解することができます。

LKMM(4.17)

2018年、Jade Alglave、Alan Stern、Andrea Parri、Luc Maranget、Paul McKenney、およびその他のいくつかのハードワークがメインラインのLinuxカーネルに統合され、正式なメモリモデルが提供されました。 Linuxカーネルメモリ[整合性]モデル(LKMM)サブシステムは、Linuxメモリコヒーレンシモデルを記述し、リトマス試験を生成するツールのセットです。 (クリトマス 、具体的には)テスト用。

システムの物理設計が複雑になると(CPUコアの追加、キャッシュとRAMの増加など)、どのCPUがどのアドレス空間をいつ必要とするかを知るのが難しくなります。たとえば、CPU0がメモリ内の共有変数にデータを書き込む必要があり、CPU1がその値を読み取る必要がある場合、CPU1が読み取ろうとする前にCPU0が書き込む必要があります。同様に、値が1つの順序でメモリに書き込まれる場合、どのCPUが読み取りを行っているかに関係なく、それらも同じ順序で読み取られることが期待されます。

単一のCPUでも、メモリ管理には特定のタスク順序が必要です。 x =yなどの単純なアクション yの値をロードするにはCPUが必要です メモリから、その値を xに保存します 。 yに保存されている値を配置する xに 変数はに発生することはできません CPUがメモリから値を読み取りました。アドレスの依存関係もあります: x [n] =6 nが必要です CPUが6の値を格納する前にロードされます。

LKMMは、コード内のこれらのメモリパターンを識別および追跡するのに役立ちます。これは、群れと呼ばれるツールを使用して部分的に行われます。 、メモリモデルによって課せられる制約を(論理公理の形式で)定義し、これらの制約と一致するすべての可能な結果を​​列挙します。

低遅延パッチ(2.6.38)

はるか昔、2011年以前は、Linuxで「深刻な」マルチメディア作業を行いたい場合は、低レイテンシのカーネルを入手する必要がありました。これは主に、多くのリアルタイムエフェクト(マイクに向かって歌ったり、リバーブを追加したり、ヘッドセットで目立った遅延なしに声を聞いたりするなど)を追加しながらオーディオ録音に適用されます。このようなカーネルを確実に提供するUbuntuStudioなどのディストリビューションがあったため、実際にはそれほどハードルではなく、アーティストとしてディストリビューションを選択する際の重要な注意点にすぎませんでした。

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

ただし、Ubuntu Studioを使用していない場合、またはディストリビューションが入手する前にカーネルを更新する必要がある場合は、rt-patches Webページにアクセスし、カーネルパッチをダウンロードして、カーネルに適用する必要がありました。ソースコード、コンパイル、および手動でのインストール。

そして、カーネルバージョン2.6.38のリリースにより、このプロセスはすべて終了しました。 Linuxカーネルには、まるで魔法のように、デフォルトで低レイテンシーのコード(ベンチマークによると、レイテンシーは少なくとも10分の1に減少)が組み込まれていました。パッチをダウンロードしたり、コンパイルしたりする必要はありません。すべてがうまくいきました。すべては、MikeGalbraithによって実装された小さな200行のパッチのおかげです。

世界中のオープンソースマルチメディアアーティストにとって、それはゲームチェンジャーでした。 2011年から2016年にかけて状況は非常に良くなり、Raspberry Pi v1(モデルB)でデジタルオーディオワークステーション(DAW)を構築することに挑戦しましたが、驚くほどうまく機能することがわかりました。

RCU(2.5)

RCU(Read-Copy-Update)は、コンピューターサイエンスで定義されたシステムであり、複数のプロセッサスレッドが共有メモリから読み取ることができます。これは、更新を延期するだけでなく、更新済みとしてマークを付けて、データのコンシューマーが最新バージョンを確実に読み取れるようにすることで実現します。事実上、これは読み取りが更新と同時に行われることを意味します。

典型的なRCUサイクルは次のようになります:

  1. データへのポインタを削除して、他の読者がデータを参照できないようにします。
  2. 読者が重要なプロセスを完了するのを待ちます。
  3. メモリスペースを再利用します。

更新段階を削除フェーズと再生フェーズに分割するということは、すべてのアクティブなリーダーが完了するまで(ブロックするか、完了時に呼び出されるコールバックを登録することによって)再生を延期しながら、アップデーターがすぐに削除を実行することを意味します。

リードコピーアップデートの概念はLinuxカーネル用に考案されたものではありませんが、Linuxでの実装はテクノロジーの明確な例です。

コラボレーション(0.01)

Linuxカーネルが何を革新したかという質問に対する最終的な答えは、何よりも常にコラボレーションです。良いタイミング、技術的優位性、ハッキング可能性、または単にオープンソースと呼んでください。しかし、Linuxカーネルとそれが可能にした多くのプロジェクトは、コラボレーションと協力の輝かしい例です。

そして、それはカーネルだけをはるかに超えています。あらゆる分野の人々がオープンソースに貢献してきました。おそらく Linuxカーネルの。 Linuxは、今もなお、自由ソフトウェアの主要な力であり、ユーザーが自分のコード、アート、アイデア、または自分自身だけを、グローバルで生産的で多様な人間のコミュニティに持ち込むように促しました。

お気に入りのイノベーションは何ですか?

このリストは、コンテナー、Non-Uniform Memory Access(NUMA)、マルチメディアなど、私自身の興味に偏っています。私は確かにあなたのお気に入りのカーネルイノベーションをリストから外しました。コメントで教えてください!


Linux
  1. Linuxカーネル:イノベーショントップ5

  2. Linuxカーネルテストのライフサイクル

  3. Linuxカーネルの継続的インテグレーションテスト

  1. Linuxカーネルをftraceで分析する

  2. Linuxのシステム負荷を確認してください

  3. Linux カーネルからメモリのブロックを予約するにはどうすればよいですか?

  1. Linux –カーネルメーリングリストに参加していますか?

  2. Linux – Dmesgの仮想カーネルメモリレイアウトは何を意味しますか?

  3. Linux –カーネルがInitを実行できないのはなぜですか?