動機
低レイヤの知識が不足しているな〜と日頃思っていたところ、絵で見てわかるOS/ストレージ/ネットワークという本を見つけたので読んでみました。
正直難しいことを言われてもわからないので「絵で見てわかる」というコピーがとても魅力的に感じました。
感想
内容はOSがアプリケーション(RDBMS)とどのようにやり取りをしているのか、から始まり次にRDBMSがストレージとどうやり取りしているか、最後にサーバ間のネットワーク通信について解説するというものでした。 CPU、メモリやキャッシュ等の解説も多く、そのあたりの知識が不足していると感じる方にはおすすめです。
初学者でも読み進められように絵でわかりやすく、親切に解説してあったのが良いなと思ったのと、実際にトラブルが起こったときにどうやって問題を切り分けるのかという実践的な内容もあって読んでて面白いなと思いました。
個人的に勉強になった点
- OSでもI/Oのデータをキャッシュしていて、これをファイルキャッシュと呼ぶ。
- DBMSにキャッシュがなかった場合、OSのファイルキャッシュを見に行く。
- ファイルキャッシュはOSが自動で調整してくれる
- メモリの使用量が多くなると自動的にファイルキャッシュを減らす
- 通常の書き込みI/Oはファイルキャッシュにデータが置かれたらすぐに終了となる
- でそのファイルキャッシュに置いてあるデータをディスクに書き込むのがsyscd等のデーモン
- DBMSの多くの書き込みI/O命令は実際にディスクに書き込んで終了となる
- 異常終了の際にもデータを失うわけにはいかないから
- これを同期書き込みと呼ぶ
ダイレクトI/Oの場合はファイルキャッシュをスルーして直接ディスクに書き込み、読み込みを行う
- ファイルキャッシュを圧迫することが少ない点やデータを二重に持たなくて済む反面、キャッシュによる高速な応答ができなくなる
以前はコンピュータ側のCPUがメモリとHBA(Host Bus Adapter)間のデータのやり取りを取り持っていたが、現在ではDMA(ダイレクトメモリアクセス)と呼ばれる技術により、HBA上のCPU(コントローラと呼ばれたりする)が取り持つことになった
- これによりI/O中にコンピュータのCPUが他の仕事をできるようになった
同期I/Oでも同期書き込み(書き込みが保証されている書き込みのこと)にしないと、各込が終わる前に次の処理を行ってしまうことがある
- DBMSがコミットしたデータを失なわないために存在するが同期書き込み
- この書き込みであれば書き込みが終わっていることが保証されるがその分遅くなる
- 同期書き込みはアプリケーションやDBMSがOSに対するシステムコールで指定する
- 同期書き込みの遅さを軽減するためにライトキャッシュが存在する
- 不揮発メモリだったり、バッテリーでバックアップしてあったりするため、ライトキャッシュに書き込んだらすぐに書き込み終了にする
- ライトキャッシュはバッチ処理などで有効