SlideShare a Scribd company logo
BSD読書会


5.10.1 vnodeページャ



          2013/1/06
                @K5_sem
             BSD読書会
5.10.1(P.214~215)の流れ
●   vnodeページャについて概説
●   5.10.1の流れ
    ●
        vnodeページャの特徴
    ●   vnodeページャの処理の流れ
        –   vnodeの新規作成
        –   ページイン要求
        –   解放するページの保存
        –   ファイルがプライベートマップされている場合
●   従来のBSDカーネルとFreeBSDの違い
vnodeページャの特徴
●   vnodeページャ
    ●
        ファイルシステム上のファイルをマップするオブ
        ジェクトを管理する
    ●
        ファイルはopenによって明示的にオープン、あるい
        はexecによって暗黙的にオープン
    ●
        (↑のいずれの場合でも)システムはそのファイルに
        対応するvnodeを見つけるか、もし存在しなければ
        新しく作らなければならない。
    ※ページャ
     カーネルモジュールの1つで、ページにデータを充填したり、内容
    が更新されたページに対応するメモリを他の用途に割り当てなけれ
    ばならなくなった時に、それを保管する処理を行う(用語集 P.686)
vnodeページャの処理の流れ
●   vnodeの新規作成
    ●
        ページ内のファイル保持のためのオブジェクト確保
        し、そのオブジェクトにvnodeページャを割り当て
        る。そのページャハンドルはvnodeを指し、固有
        データにファイルのサイズを設定する。
        –   vnode_pager_alloc関数
            →sys/vm/vnode_pager.cの109~176行
    ●
        vnodeサイズが変更されたことが通知される
        –    vnode_pager_setsize関数
             →sys/vm/vnode_pager.cの292~374行
vnodeページャの処理の流れ
●   ページイン要求
    ●
        ページの読み込み
          –   必要なのは要求されたページのみ。しかしpgo_getpages
              関数は他のページも(同時読み込みが可能なら)読み込
              む。
          –   vnode_pager_getpages関数
              →vm/vnode_pager.cの609~626行
        609 vnode_pager_getpages(object, m, count, reqpage)
        610         vm_object_t object;
        611         vm_page_t *m;
        612         int count;
        613         int reqpage;
        614 {
        615         int rtval;
        616         struct vnode *vp;
        617         int bytes = count * PAGE_SIZE;
        618
        619         vp = object->handle;
        620         VM_OBJECT_UNLOCK(object);
        621         rtval = VOP_GETPAGES(vp, m, bytes, reqpage, 0);
        622         KASSERT(rtval != EOPNOTSUPP,
        623             ("vnode_pager: FS getpages not implementedn"));
        624         VM_OBJECT_LOCK(object);
        625         return rtval;
        626 }
vnodeページャの処理の流れ
●   入出力操作
    ●
        vnodeページャの入力
        –   ページャが対応するページにファイルの内容を読み込む
            ためにデバイスドライバのストラテジ関数を実行してい
            る間、そのページをカーネルアドレス空間にマップする
            (物理入出力バッファを使用)。ページ充填終了後にカー
            ネルマップを解除し、物理入出力バッファを解放して
            ページを返す。
        –   vnode_pager_input_smlfs関数
            →vm/vnode_pager.cの421~524行
        –   vnode_pager_input_old関数
            →vm/vnode_pager.cの527~594行
vnodeページャの処理の流れ
●   解放するページの保存
    ●
        要求しているページに対応する配列内のインデック
        スを渡す
        –   pgo_getpages関数→vm/vnode_pager.hの59行目
        –   vnode_pager_generic_getpages関数
            →vm/vnode_pager.cの633~917行
    ●   要求されたページを書き出す
        –   pgo_putpages関数→vm/vnode_pager.hの60行目
        –   vnode_pager_generic_putpages関数
            →vm/vnode_pager.cの982~1093行?
        –   同時に書き出し可能なページ(要求されたページと同じ
            ファイルシステムブロック内にあるすべてのページ)を書
            き出す
vnodeページャの処理の流れ
●   ファイルがプライベートマップされている場合
    ●
        シャドウオブジェクトで修正されたページの管理
        (ファイルシステムに書き出されないようにする)を
        する。
    ●
        そのため、プライベートマップされたオブジェクト
        がダーティページをファイルに保存要求しない。
 従来のBSDカーネルとFreeBSDの違
         い
●   従来のBSDカーネル
    ●
        ファイルシステムと仮想記憶で独立したキャッシュ
        を管理
●   FreeBSD
    ●
        ファイルシステムのキャッシャはなし。仮想記憶の
        キャッシュが両方を管理
    ●
        仕様変更のメリット
        –   カーネル内に確保できるアドレス空間の量がファイルシ
            ステムのキャッシュで制限されることがなくなった
        –   他にシステムメモリに対する要求がない場合は、すべて
            のメモリをファイルシステムのキャッシュに使用可能

More Related Content

What's hot

あたらしい伺かを動かしてみたはなし
あたらしい伺かを動かしてみたはなしあたらしい伺かを動かしてみたはなし
あたらしい伺かを動かしてみたはなし
kiki utagawa
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability mode
Yuichiro Naito
 
[Lt]windows ブートマネージャーのスクリーンショットをとる方法
[Lt]windows ブートマネージャーのスクリーンショットをとる方法[Lt]windows ブートマネージャーのスクリーンショットをとる方法
[Lt]windows ブートマネージャーのスクリーンショットをとる方法Masaya Sawada
 
Mongo db使ってみよう
Mongo db使ってみようMongo db使ってみよう
Mongo db使ってみよう
Oda Shinsuke
 
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
leverages_event
 
MySQLのリアルタイムモニタリングツールを作った話
MySQLのリアルタイムモニタリングツールを作った話MySQLのリアルタイムモニタリングツールを作った話
MySQLのリアルタイムモニタリングツールを作った話
Kentaro Kitagawa
 
pkgsrcに関する何か - 何かって何?
pkgsrcに関する何か - 何かって何?pkgsrcに関する何か - 何かって何?
pkgsrcに関する何か - 何かって何?
Akio OBATA
 
Mongodb
MongodbMongodb
Mongodb
Satoru Mikami
 
今から始めるDocument db
今から始めるDocument db今から始めるDocument db
今から始めるDocument db
Kazunori Hamamoto
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバーemasaka
 
MongoDBざっくり解説
MongoDBざっくり解説MongoDBざっくり解説
MongoDBざっくり解説
知教 本間
 
Jsonデモの概要
Jsonデモの概要Jsonデモの概要
Jsonデモの概要Hiroki Ito
 
コロナ禍の所蔵品検索システム
コロナ禍の所蔵品検索システムコロナ禍の所蔵品検索システム
コロナ禍の所蔵品検索システム
Naosuke Okamoto
 
Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlHideaki Ohno
 

What's hot (16)

あたらしい伺かを動かしてみたはなし
あたらしい伺かを動かしてみたはなしあたらしい伺かを動かしてみたはなし
あたらしい伺かを動かしてみたはなし
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability mode
 
[Lt]windows ブートマネージャーのスクリーンショットをとる方法
[Lt]windows ブートマネージャーのスクリーンショットをとる方法[Lt]windows ブートマネージャーのスクリーンショットをとる方法
[Lt]windows ブートマネージャーのスクリーンショットをとる方法
 
Mongo db使ってみよう
Mongo db使ってみようMongo db使ってみよう
Mongo db使ってみよう
 
Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話Node.js×mongo dbで3年間サービス運用してみた話
Node.js×mongo dbで3年間サービス運用してみた話
 
MySQLのリアルタイムモニタリングツールを作った話
MySQLのリアルタイムモニタリングツールを作った話MySQLのリアルタイムモニタリングツールを作った話
MySQLのリアルタイムモニタリングツールを作った話
 
pkgsrcに関する何か - 何かって何?
pkgsrcに関する何か - 何かって何?pkgsrcに関する何か - 何かって何?
pkgsrcに関する何か - 何かって何?
 
Cocos2dx tips
Cocos2dx tipsCocos2dx tips
Cocos2dx tips
 
Mongodb
MongodbMongodb
Mongodb
 
Sfstudy #2
Sfstudy #2Sfstudy #2
Sfstudy #2
 
今から始めるDocument db
今から始めるDocument db今から始めるDocument db
今から始めるDocument db
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバー
 
MongoDBざっくり解説
MongoDBざっくり解説MongoDBざっくり解説
MongoDBざっくり解説
 
Jsonデモの概要
Jsonデモの概要Jsonデモの概要
Jsonデモの概要
 
コロナ禍の所蔵品検索システム
コロナ禍の所蔵品検索システムコロナ禍の所蔵品検索システム
コロナ禍の所蔵品検索システム
 
Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for Perl
 

Viewers also liked

Tmp20130822
Tmp20130822Tmp20130822
Tmp20130822
K5_sem
 
Prml3 4
Prml3 4Prml3 4
Prml3 4
K5_sem
 
Bsd5.12.3
Bsd5.12.3Bsd5.12.3
Bsd5.12.3K5_sem
 
マジックとITの可能性
マジックとITの可能性マジックとITの可能性
マジックとITの可能性
K5_sem
 
Oss magic
Oss magicOss magic
Oss magic
K5_sem
 
Prml5 6
Prml5 6Prml5 6
Prml5 6
K5_sem
 
Prml3 4
Prml3 4Prml3 4
Prml3 4
K5_sem
 
Tmp20130824
Tmp20130824Tmp20130824
Tmp20130824
K5_sem
 
Prml7 2
Prml7 2Prml7 2
Prml7 2
K5_sem
 

Viewers also liked (9)

Tmp20130822
Tmp20130822Tmp20130822
Tmp20130822
 
Prml3 4
Prml3 4Prml3 4
Prml3 4
 
Bsd5.12.3
Bsd5.12.3Bsd5.12.3
Bsd5.12.3
 
マジックとITの可能性
マジックとITの可能性マジックとITの可能性
マジックとITの可能性
 
Oss magic
Oss magicOss magic
Oss magic
 
Prml5 6
Prml5 6Prml5 6
Prml5 6
 
Prml3 4
Prml3 4Prml3 4
Prml3 4
 
Tmp20130824
Tmp20130824Tmp20130824
Tmp20130824
 
Prml7 2
Prml7 2Prml7 2
Prml7 2
 

Similar to Bsd5.10.1

EWD 3トレーニングコース#2 EWD 3の概要
EWD 3トレーニングコース#2 EWD 3の概要EWD 3トレーニングコース#2 EWD 3の概要
EWD 3トレーニングコース#2 EWD 3の概要
Kiyoshi Sawada
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
Toshimichi Suekane
 
インフラエンジニアなら知っておきたいストレージのはなし@OSC 2012 Nagoya
インフラエンジニアなら知っておきたいストレージのはなし@OSC 2012 Nagoyaインフラエンジニアなら知っておきたいストレージのはなし@OSC 2012 Nagoya
インフラエンジニアなら知っておきたいストレージのはなし@OSC 2012 Nagoya
Satoshi Shimazaki
 
[Japan Tech summit 2017] CLD 009
[Japan Tech summit 2017]  CLD 009[Japan Tech summit 2017]  CLD 009
[Japan Tech summit 2017] CLD 009
Microsoft Tech Summit 2017
 
〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携
〜Apache Geode 入門 Multi-site(WAN)構成によるクラスター連携〜Apache Geode 入門 Multi-site(WAN)構成によるクラスター連携
〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携
Akihiro Kitada
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
Satoshi Shimazaki
 
WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法
Takashi Hoshino
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解くKazuhide Maruyama
 
Bsd daemon read
Bsd daemon read Bsd daemon read
Bsd daemon read geek_alice
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
Yohei Sasaki
 
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編Satoshi Shimazaki
 
Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Hideki Hashizume
 

Similar to Bsd5.10.1 (12)

EWD 3トレーニングコース#2 EWD 3の概要
EWD 3トレーニングコース#2 EWD 3の概要EWD 3トレーニングコース#2 EWD 3の概要
EWD 3トレーニングコース#2 EWD 3の概要
 
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
gulp + sass で目指せ倍速コーディング(第2回 gulpfile.jsの分割管理と画像作成の効率化)
 
インフラエンジニアなら知っておきたいストレージのはなし@OSC 2012 Nagoya
インフラエンジニアなら知っておきたいストレージのはなし@OSC 2012 Nagoyaインフラエンジニアなら知っておきたいストレージのはなし@OSC 2012 Nagoya
インフラエンジニアなら知っておきたいストレージのはなし@OSC 2012 Nagoya
 
[Japan Tech summit 2017] CLD 009
[Japan Tech summit 2017]  CLD 009[Japan Tech summit 2017]  CLD 009
[Japan Tech summit 2017] CLD 009
 
〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携
〜Apache Geode 入門 Multi-site(WAN)構成によるクラスター連携〜Apache Geode 入門 Multi-site(WAN)構成によるクラスター連携
〜Apache Geode 入門 Multi-site(WAN)構成による クラスター連携
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
 
WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法WALをバックアップとレプリケーションに使う方法
WALをバックアップとレプリケーションに使う方法
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解く
 
Bsd daemon read
Bsd daemon read Bsd daemon read
Bsd daemon read
 
Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22Couch Db勉強会0623 by yssk22
Couch Db勉強会0623 by yssk22
 
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
インフラエンジニアなら知っておきたいストレージのはなし2012/Spring ストレージの基礎おさらい編
 
Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23Pro aspnetmvc3framework chap23
Pro aspnetmvc3framework chap23
 

Bsd5.10.1

  • 1. BSD読書会 5.10.1 vnodeページャ 2013/1/06 @K5_sem BSD読書会
  • 2. 5.10.1(P.214~215)の流れ ● vnodeページャについて概説 ● 5.10.1の流れ ● vnodeページャの特徴 ● vnodeページャの処理の流れ – vnodeの新規作成 – ページイン要求 – 解放するページの保存 – ファイルがプライベートマップされている場合 ● 従来のBSDカーネルとFreeBSDの違い
  • 3. vnodeページャの特徴 ● vnodeページャ ● ファイルシステム上のファイルをマップするオブ ジェクトを管理する ● ファイルはopenによって明示的にオープン、あるい はexecによって暗黙的にオープン ● (↑のいずれの場合でも)システムはそのファイルに 対応するvnodeを見つけるか、もし存在しなければ 新しく作らなければならない。 ※ページャ  カーネルモジュールの1つで、ページにデータを充填したり、内容 が更新されたページに対応するメモリを他の用途に割り当てなけれ ばならなくなった時に、それを保管する処理を行う(用語集 P.686)
  • 4. vnodeページャの処理の流れ ● vnodeの新規作成 ● ページ内のファイル保持のためのオブジェクト確保 し、そのオブジェクトにvnodeページャを割り当て る。そのページャハンドルはvnodeを指し、固有 データにファイルのサイズを設定する。 – vnode_pager_alloc関数 →sys/vm/vnode_pager.cの109~176行 ● vnodeサイズが変更されたことが通知される –  vnode_pager_setsize関数  →sys/vm/vnode_pager.cの292~374行
  • 5. vnodeページャの処理の流れ ● ページイン要求 ● ページの読み込み – 必要なのは要求されたページのみ。しかしpgo_getpages 関数は他のページも(同時読み込みが可能なら)読み込 む。 – vnode_pager_getpages関数 →vm/vnode_pager.cの609~626行 609 vnode_pager_getpages(object, m, count, reqpage) 610 vm_object_t object; 611 vm_page_t *m; 612 int count; 613 int reqpage; 614 { 615 int rtval; 616 struct vnode *vp; 617 int bytes = count * PAGE_SIZE; 618 619 vp = object->handle; 620 VM_OBJECT_UNLOCK(object); 621 rtval = VOP_GETPAGES(vp, m, bytes, reqpage, 0); 622 KASSERT(rtval != EOPNOTSUPP, 623 ("vnode_pager: FS getpages not implementedn")); 624 VM_OBJECT_LOCK(object); 625 return rtval; 626 }
  • 6. vnodeページャの処理の流れ ● 入出力操作 ● vnodeページャの入力 – ページャが対応するページにファイルの内容を読み込む ためにデバイスドライバのストラテジ関数を実行してい る間、そのページをカーネルアドレス空間にマップする (物理入出力バッファを使用)。ページ充填終了後にカー ネルマップを解除し、物理入出力バッファを解放して ページを返す。 – vnode_pager_input_smlfs関数 →vm/vnode_pager.cの421~524行 – vnode_pager_input_old関数 →vm/vnode_pager.cの527~594行
  • 7. vnodeページャの処理の流れ ● 解放するページの保存 ● 要求しているページに対応する配列内のインデック スを渡す – pgo_getpages関数→vm/vnode_pager.hの59行目 – vnode_pager_generic_getpages関数 →vm/vnode_pager.cの633~917行 ● 要求されたページを書き出す – pgo_putpages関数→vm/vnode_pager.hの60行目 – vnode_pager_generic_putpages関数 →vm/vnode_pager.cの982~1093行? – 同時に書き出し可能なページ(要求されたページと同じ ファイルシステムブロック内にあるすべてのページ)を書 き出す
  • 8. vnodeページャの処理の流れ ● ファイルがプライベートマップされている場合 ● シャドウオブジェクトで修正されたページの管理 (ファイルシステムに書き出されないようにする)を する。 ● そのため、プライベートマップされたオブジェクト がダーティページをファイルに保存要求しない。
  • 9.  従来のBSDカーネルとFreeBSDの違 い ● 従来のBSDカーネル ● ファイルシステムと仮想記憶で独立したキャッシュ を管理 ● FreeBSD ● ファイルシステムのキャッシャはなし。仮想記憶の キャッシュが両方を管理 ● 仕様変更のメリット – カーネル内に確保できるアドレス空間の量がファイルシ ステムのキャッシュで制限されることがなくなった – 他にシステムメモリに対する要求がない場合は、すべて のメモリをファイルシステムのキャッシュに使用可能