天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

【今更聞けない】Linuxのしくみ - Forkwell Library #16に参加してきた

forkwell.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

以下、イベントページから引用です。

これまで Forkwell のイベントで登壇されたエキスパートの方々は、先達が記した書籍から「気づき」を得て実践し、振り返り、再現性のある「学び」として身に付けていく中で、実績を築いてこられました。

しかし、日々限られた時間の中で知識や情報をアップデートし続けるのはそう簡単ではありません。 Forkwell Library では、著者・訳者・実践者らを登壇者として招き、そんな思いを抱えた開発者の皆さまが「学びのきっかけ」を得られる勉強会を目指します。

今回の第16回目では2022年10月17日に増補改訂版が発売された『[試して理解]Linuxのしくみ』を取り上げます。 近年、ITシステムやソフトウェアの基盤OSとしてLinuxは幅広く使われています。しかし、中にはLinuxに興味はあるが、Linuxを学ぶ敷居を高く感じてしまうという方もいるのではないでしょうか。 今回は本書の著者である武内 覚氏をお招きして、本書を書こうとした背景、本書が誰を対象にしたどのような本なのか、これまでにどういう反応があったのか、などについてお話しいただきます。

会の様子

Linuxカーネル学習の敷居を下げたいという思いを実現した本、「Linuxのしくみ」

最初に基調講演として、「Linuxのしくみ」を出版した武内さんからのお話がありました。

本書を書いた経緯

18年前にLinuxカーネルの開発をしていた時、OS屋ではない人だと理論と実装の結びつきが弱い人が多いことを感じており、OS屋ではない人もOSにもっと強くなればいいのになーという気持ちを持っていたそうです。

また、そういう話をすると、「OS屋出ない人がOSに詳しくなることにメリットがあるのか?」という点を聞かれそうですが、

  • データ量が増えたら性能が劣化するなどといった予期せぬシステムの挙動を詳しく理解できるようになる
  • 監視システムが指しているメトリクスの意味がわかるようになる
  • OSの特性を踏まえた上でシステムの運営ができるようになる

といったように、多くのメリットがあると武内さんは考えているそうです。

こういった背景からOSをもっと理解してほしいと考えていたものの、直接触る機会が少なかったり分厚く高い本しかなかったりといった学習環境が理解の障壁になっていると考えて、本書を出版したそうです。

 

本書の特徴

本書の特徴として挙げられていた点を、以下に箇条書きで記載していきます。

  • 本書全体を通して、図解による概要理解→実験→データ採取→可視化されたデータに基づく深い理解のループが回っている
  • ユーザプログラム作者やシステム管理者を対象にしている
  • 網羅性は目指さずに対象読者にとって役立つことを中心に説明している。(システムコールの実行、実行ファイルの構造、プロセスのディスパッチ、freeコマンドの意味、キャッシュメモリによるメモリアクセスの高速化、ディスクI/Oの測定、仮想マシン..)ただし、網羅性はないとはいえかなりの範囲を紹介はしている。
反響

ポジティブな反応としては、

  • 聞いたことがある→理解した、という状態になった
  • OSの単位がとれた
  • 高専や大学の副読本になっている
  • 輪読会を開きやすかった
  • OS屋さんとコミュニケーションが円滑にとれるようになった

があったそうです。一方で、ネガティブな反響ももちろんあったそうで、

  • 難しすぎる
  • 簡単すぎる
  • 物理マシン上でサンプルコードを動かしてほしいというメッセージのハードルが高い

といったコメントもあったそうです。

おすすめ書籍

ネガティブな反応であった「難しすぎる」というコメントへの回答として、事前に読んでおくとよい書籍を紹介してくれました。この本が難しすぎると感じた人は、まず

新しいLinuxの教科書

本気で学ぶ Linux実践入門

の2冊を事前に読んでおくといいということでした。また、簡単すぎると感じる人は、本書を読み終えた後に、

詳解 システム・パフォーマンス 第2版

スーパーユーザーなら知っておくべきLinuxシステムの仕組み

筆者のYoutube

を読んでみるとよいということです。また、開発者であるならば、

ふつうのLinuxプログラミング

Goならわかるシステムプログラミング

Linuxプログラミングインタフェース

がおすすめということでした。最後に、カーネル開発者であれば、

はじめて読む486

Linux Kernel Development

Linux Kernel Programming

Linux Kernel Newbies

を読むとよいということでした。

自由研究には向かないウェブオペレーション - サイト運用管理を取り巻く環境の変化

続いて事例講演として、nwiizoさんから本書を現場に活用した事例を運用者のコンテキストで話してくれました。

事例講演では、サイト運用管理を取り巻く環境の変遷をお話してくれました。

まず、2010年代は、「ウェブオペレーションは技芸であり科学ではない」という言葉がウェブオペレーションで出てくるように、経験を積んだ決断力や穏やかな気質が保てる人が重要だという話しか出ていなかったということでした。
また、具体的なスキルセットとしては、基本的なLinuxの知識や各種ミドルウェアを活用する知識やシェルスクリプトを中心とした自動化技術が求められていたのでは?という話がありました。

2020年頃からはCloud Nativeなシステムが標準になり、疎結合なシステム構築などが求められてきたという話がありました。
具体的なスキルセットとしては、マイクロサービス時代のデバッグ力や堅牢な自動化、アプリ/クラウド/Linuxすべてに渡る知識が必要になってきたということです。

パネルトーク

講演の後はパネルトークがありました。以下、常体で質問と回答を記載していきます。

カーネルに踏み込もうとするとハードウェアの知識も必要だと思うが、これはどのように情報収集をすら必要があるか?
  • /sys配下のディレクトリを確認する。PCIバイスの情報も必要だと思うのだが、lspciコマンドでここは確認する
  • 現場レベルだと、専門家レベルの知識は求められない場合もある
数万ほどのTCPポートを確立後に新規ポートを確保しようとしたときに非常に遅く感じた。linux kernel sourceを読むとTCPポート番号を獲得する際には乱数的にTCPポートを獲得しようとするロジックが用意されていた。これについてはどう思うか?
  • 乱数でも上から順でもそれぞれ良し悪しがあるので、NWのプロフェッショナルが決めている限りその人の判断を尊重したい
Linuxを学ぶ際のロードマップや肝となるポイントを知りたい
  • 自分ごとになって勉強するとよいのかな?と思う。ロードマップ的に考えて勉強というよりも、実際に必要になった部分を触るというのを繰り返した
  • 基調講演で紹介した本を読むとよいのではないかと思う。また、Linuxを勉強した人に自分のやりたいこととセットで聞いてみるとよいと思う
Dockerのような機能はどのような機能を組み合わせて作っているのか?
  • kernelとユーザー空間の組み合わせが基本になるが、コアとなるのはLinux Kernelのネームスペース。いろんなプロセスの塊を一括にして、自分以外のグループがあたかも存在しないかのように見せている
  • コンテナを動かしていると他のユーザーコンテナの影響を受けたくないとか特定のユーザにリソースを使いすぎないようにする際にはCグループを用いている。ここは書籍で詳しく解説している
Linux開発を仕事にする方法は?
  • Linux KernelのCommit treeを見てどういう人やどういう会社が貢献しているかを確認する
  • 相当難しいと思うが、野生のKernelエンジニアとして活動をしてみて、海外企業に実績を掲げて入社する
topでiowaitが高いのだが原因を簡単に調査するためには?
  • そのCPU自身はなんにもCPUを使ってないのにIO待ちの人がいるときにiowaitが高くなる。なので、デバイスの問題といえる。iostatなどを見て、どのデバイスにどれだけのioが出ているのかを確認するのがいいと思う
カーネルパラメータが多すぎるのだがどこから手をつけるのか?
  • カーネルソースをダウンロードして、ドキュメント下にあるアドミンガイド的なものをひとまず読んでみるとよいと思う。ただそれだけで理解するのは難しいので、Linuxのしくみをまずはなんとなく理解したり、動かしてみて動きの勘所を掴むとかからスタートするのがいいと思う
  • 総当りはやめたほうがいい。自分の興味からスタートするのがいい
straceの使い方がわかる資料は?
  • まさに「Linuxのしくみ」がいいのでは?と思う
  • helpとかで毎回探している
  • manが一番いいのでは?と思う。このあたりのオプションは使ってみないとわからない
LinuxカーネルにCommitするベストプラクティスはあるか?
  • Linux Kernel Newbiesをまずは見てみる
  • メンタル的には思い切りをよくするといいと思う
WindowsLinuxの比較をしてほしい
  • LinuxOSSなので中身を読めるのが一番いいと思う
  • コマンドで色々操作できるのがLinuxのいいところ(スクリプト組めば自動化できる)
  • 運用特化のソフトウェアが多数入っているのがいい
サーバサイドエンジニア→SRE→低レイヤーのキャリアパスを実現するには?
  • SREになるためには、クラウドに関する知識とかを資格試験でまずつけてもらうのが一番いいのでは?と思う
  • 興味がある場合はソースを読んだり自分で動かしてみたりすると、もともとは他分野でも応募できると思う

会全体を通した感想

普段の会と比べても具体的な質問が多く、質問欄やチャット欄のコメントからも学びがある会でした。

低レイヤーの部分はまだまだ弱いので、勉強を重ねていきたいです。