カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

久々にはてな本読んだけど、やっぱり勉強になった件(恣意的抜粋編)

色々ディスクのパフォーマンスを見たり、トラブルシューティングしてたりすると、ディスクやメモリの理解ってのが割と大事だったりします。久々にはてな本読みたいなーと思って、読んでいたらその辺のことについて色々タメになることが書いてあったので、ちょっと一部だけ「恣意的」に「恣意的」に抜粋して紹介したいと思います。

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)


ただ、絶対手元に置いておいたほうがよいですよ、はてな本!!

(はてな本っていう言い方深い意味はありません!言いやすかったんで使ってみただけです!気分害された方いたらすいません!!)

キャッシュ機構の働きとは

OSは、メモリを使ってディスクアクセスを減らします。<中略>そのしくみがOSのキャッシュシステムです。Linuxだとページキャッシュだとかファイルキャッシュ、バッファキャッシュと呼ばれるキャッシュ機構を持っています

ディスクは遅いですからね。10^5とか10^6ぐらい遅いらしいですよ。まぁ、物理的な動作を伴いますからね。最近はSSDとかFusion-ioがありますから、また状況は変わってきていますが、物理的な操作を伴うディスクアクセスは極力避けたいわけです。その遅さ解消のためにキャッシュ機構があるわけですね。

また、こういう仕組みもOSは持っているようです。

OSは「仮想メモリ機構」を持っています。仮想メモリ機構は、論理的なリニアアドレスを物理的な物理アドレスへと変換する、という働きをしている

とのことです。一旦、仮想的なアドレスから物理的なアドレスへと変換するんですね。
ディスクのアクセスを減らす「キャッシュ機構」と、アドレスの変換を行う「仮想メモリ機構」。こういう仕組みがあるわけですね。


もう少し細かく見てみましょう。

ポイントはOSというのはメモリを直接プロセスに渡すのではなく、いったんこのカーネルの中でメモリのしくみを抽象化してること。それが仮想メモリ機構です。<中略>適当な4KBくらいをブロックで確保してあげて、それをプロセス側に渡すということをします。その一個のブロックのことを「ページ」といいます。OSはプロセスにメモリを要求されたらページを一個以上、必要なページを確保してそれをプロセスに渡すということをやっています。

プロセス側から物理メモリのなかが見えないですから、仮想ですね。プロセス側から見えるのは抽象化された論理アドレスです。そして、その渡されるブロックが「ページ」なんですね。アドレスの変換を行いますが、必要な分だけ抽象化して行う。これが「仮想メモリ機構」の働きなわけです。

ただこれ渡すといっても直接じゃないんですね。一度「置く」ということをします。

一回メモリ上に置かなければなりません。なぜなら、プロセスは直接ディスクにアクセスできないからです。あくまでプロセスがアクセスできるのは(仮想)メモリだけ。そのため、OSは読みだしたブロックをメモリに書きます。そして、OSはそのメモリの番地をプロセスに(仮想アドレスとして)教えてあげる。

呼び出されたブロックがメモリに置かれるわけですね。そして、OSはその番地を教えるわけですが、置かれてるからこそ教えられるわけですね。この置かれてるというのが大事だったりします。

ただ、置かれているといっても、その領域を超えた分をその場所に置くことはできるのでしょうか?

2GBのうち、500MBくらいをOSがプロセスに割り当てたとします。そして、いま1.5GBくらい余裕がありますというときに、4GBのファイルをキャッシュできますか?という問題が浮かんできます。“ファイル”キャッシュと考えると、ファイル一個の単位でキャッシュしているようなイメージを与えてしまうので、4GBもキャッシュできないんじゃないだろうかと考えてしまいそうなのですが、実はそうではありません。OSは、読みだしたブロック単位だけでここだけとか、ここだけというようにキャッシュします。<中略>このディスクがキャッシュする単位がページです。

だから、「ファイルキャッシュ」とは言わず、「ページキャッシュ」と言うんですね。なので、答えは超えたとしてもすべて置くわけではなくて、パーツパーツに分けて置けるだけ置くというのが正解ですね。

終わりに

正直言って、上述した部分ってかなり一部であって、恣意的に抜粋してるので、この本の良さをほとんど伝えられていないかもしれません。しかも本来、データベースとかのアプリケーション層(上でいうプロセスの領域)も考えなければならず、ともにキャッシュ機構とかを持っていたりすると、ダイレクトI/Oとか、LRU(これについては本書で説明されてます)とか、Slabsとか色々考える部分は出てきますし、キャッシュだけ捉えても、まだまだ理解しなければならない部分はあるでしょう。

だけど、言葉が平易で図を使って一つ一つ丁寧に説明してくれています。
インターンのときの会話とか出てきて、講義みたいな感じで説明が入りますから、一方的ではないし、現場の試行錯誤が入ってるわけです。

ということで、かなり一部しか扱ってませんし(実際には14回あるうちの第3回のほんの一部)、僕の解釈で抜粋しましたが、現場で運用する人にとっても、非常に参考になると思うので、説明紹介した次第です。

P.S.
あと、はてな本ってまだ他にもありまして、現場で色々システムに携わる人はこちらも持って置いたほうがよいですよ。「止められないサービスのために今、何ができるのか」とか表紙に書かれるとやはり読まざるを得ないですからねぇ。

現場で使う技術も多く載っているので、本当にオススメであります。

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

  • 作者: 安井真伸,横川和哉,ひろせまさあき,伊藤直也,田中慎司,勝見祐己
  • 出版社/メーカー: 技術評論社
  • 発売日: 2008/08/07
  • メディア: 単行本(ソフトカバー)
  • 購入: 133人 クリック: 2,270回
  • この商品を含むブログ (289件) を見る