Closed31
読書メモ: Linuxのしくみ

書籍
備考
疑問点と調べたことなどをメモしていく

6 章 デバイスアクセス
- プロセスがデバイスにアクセスする方法が解説されている
- デバイスファイルを介したアクセスを解説

ext4 ファイルシステムとは?
- Linuxのファイルシステム
- ジャーナリングファイルシステム
- ext3の後継
- エクステントがポイント
- 大きなファイルを扱うパフォーマンスがよい
- フラグメンテーション発生を減らす

lost+foundとは?
- ファイルシステム内の孤立、破損したファイルのビットが見つかると削除&lost+foundフォルダに配置
- データを失った時にここに配置されている可能性がある
- 破損していて使えない可能性もある

割り込みコントローラはどう割り込み処理をさせる?
- Linuxカーネルが処理
- 割り込みハンドラは優先的に実行される
- ソフト割り込みハンドラはすぐに実行する必要ないものを処理
- 割り込みハンドラはirq_descテーブルで管理

割り込みハンドラはACKの話も関係してくる?

- 以前は割り込みハンドラは割り込み発生時に実行に移すしていたプロセスのカーネルスタックを使って実行
- 現在はスケジュール管理対象となっている

7章ファイルシステム
- 各種デバイスにはデバイスファイルを介してアクセスするが、ストレージデバイスはファイルシステムを介してアクセスすることが多い

VFS とは?
- ファイルシステムを抽象化して扱うための仕組み
- Windows, Mac OS, UNIX など OS の違いも超えてファイルシステムを扱える
- もともとはUNIX系でローカルなUFSとリモートのNFSを透過的に扱うために開発された

メモリアマップトファイル(mmap)使わないでファイル操作する場合はどういう動作になる?
- mmap しない場合、writeするとカーネルメモリ上のページキャッシュ領域が書き換わる
- mmapするとページキャッシュが仮想アドレスにマップされる

- Linux ではwrite faultでファイルをmmapしたメモリ書き込みをファイルに反映している

LVM とは?
- 物理ボリュームを提供するデバイスに直接ファイルシステムをマップせず、論理ボリュームという仮想的なボリュームを束ねて利用するシステム
- 仮想ボリューム: 複数の物理ボリュームを束ねたボリュームグループ上に設定した仮想パーティション
- ファイルシステムからみると論理ボリュームがディスクパーティション

procfs とは?
- Process Filesystem の略
- Unix系システムにある擬似ファイルシステム(ディスクスペース消費しない&メモリもごくわずかしか消費しない)
- プロセスに関するカーネル情報にアクセスする手段を提供

sysfs が procfs から分離
- デバイスやドライバについての情報をカーネルモデルからユーザ空間へエクスポート & 設定のためにも使われる

8章記憶階層
- レジスタ、キャッシュメモリ、メモリ、ストレージデバイスのサイズや性能差を説明
- 上記の差を考慮した上で、ハードウェアやLinuxはどのようなことをしているかを説明

キャッシュメモリの補足
- 2.0 GHz で動作する Haswell CPU のシングルコアはピーク時に 128GB/s のデータアクセスを要求
- メインメモリは並列ロードをおこなっても高々 5GB/s
- 小容量で高速なスタティックRAMを用いて構成
- データ格納アドレスの一部(ライン単位アドレスの下位数ビット)により格納位置を限定して検索速度を高める
- 各ラインにはライン単位アドレスの上位ビット(フレームアドレス)を格納し、検索時に比較に用いる
- ライン入れ替え方式: ラウンドロビン、LRU、ランダム
- データ更新方式: ライトスルー方式(L1に実装される場合が多い)、ライトバック方式(L2に実装される場合が多い)
- キャッシュコヒーレンシ: マルチCPU構成におけるデータ一貫性
- スヌープ方式やディレクトリ方式、共有キャッシュがある

Simultaneous Multi Threading(SMT)
- 単一CPUで複数スレッドを同時実行することで、擬似的な対称型マルチプロセッシング(SMP)環境を提供
- SMTを有効にすると見かけのプロセッサ数が増加
- SMTで同時駆動されるスレッドはハードウェアスレッドと呼ばれる
- SMP環境を提供: SMTの結果であって目的ではない(?)

対称型マルチプロセッシング(SMP)とは
- 物理メモリを共有して管理する「メモリ共有型並列コンピューティング方式」
- 特定のCPUに非対称的に割り付けられた処理に依存せず、全CPUに対して均一的に割り付けられた並列処理方式
- ハードウェア割り込みや起動処理関連で完全な対称形とはならない

swap領域とは
- Btrfs はスワップ領域を サポートしない

- ダーティページがメモリから削除される時にスワップファイルに保存される
- ページアウトしてページをアンマップする際、ページアウト先の情報をPTEの空きフィールドに書き込む
- PTEにこの情報が格納されているかでページアウトされているかどうかを判断できる

Translation Lookaside Buffer
- メモリ管理ユニット内のある種のキャッシュ
- TLBは通常、連想メモリ (CAM) で実装
- ページウォーク: アドレス変換のためにページテーブルをたどる

9章 ブロック層
- ブロックデバイスの性能を引き出すための処理を切り出した層

NVMe SSD とは
- Non-Volatile Memory Express
- NVMeは通信プロトコルのこと
- SATA(AHCI)規格に比べて SSD についての最適化が図られている
- 4KBのデータを転送する際のメッセージが2->1
- コマンド処理のためのキューが1->65,536

10章 仮想化機能
- PCやサーバなどの物理的なマシン上で仮想マシンを動かすためのソフトウェア機能、およびハードウェア機能の組み合わせ

準仮想化とは?
- 仮想マシンへのソフトウェアインタフェースを提供する仮想化技術の一つ
- ゲストOSを修正し、ハイパーバイザとゲストOSの連携で性能改善を図るタイプの仮想化技術

ハイパーバイザとは
- 仮想マシンを作成および実行するソフトウェア
- ハイパーバイザのOSとリソースを仮想マシンから分離し、仮想マシンの作成と管理を可能にする
- 各仮想マシンに割り当てられたリソースを提供し、仮想マシンリソースのスケジューリングを管理
- Type1
- ネイティブ・ハイパーバイザ、またはベアメタル・ハイパーバイザと呼ばれる
- ホストのハードウェア上で直接稼働
- KVM, Microsoft Hyper-V, VMware vSphere
- Type2
- ホスト型はハイパーバイザと呼ばれる
- OS上でソフトウェアレイヤーとして実行
- VMware Workstation, Oracle VirtualBox

CPU Steal Time
- 仮想マシンが割り当てられる CPU リソース以上のパフォーマンスを発揮しようとしている分を計上したメトリクス
- involuntary wait time と呼ぶべき
- Xen の場合は VCPU のスナップショットをとって、runnable + offiline で算出
- KVM の場合はランキューの待ち時間の差分で算出

仮想化環境での時間管理入門
- 起動時にリアルタイムクロックデバイスから「世界時」の時刻情報を取得
- カウンターで経過時間を取得して現在時刻を計算
- VMではTSC、pvclock が実用

このスクラップは2023/09/02にクローズされました