Linuxの備忘録とか・・・(目次へ)Linuxの備忘録とか・・・(目次へ)CPU変数のページフレームキャッシュ1ページの取得は、CPU変数のページフレームキャッシュから取得しているようです。1ページおよび複数ページの獲得は、alloc_pages関数で処理されます。(1ページの場合マクロでorder=0としてコール)alloc_pages関数はバディシステムからページを獲得します。オーダが0の時、CPU変数で管理されるページフレームから獲得されます。そこにフレームが無かったら、わざわざバディシステムからフレームをCPU変数に繋ぎ変えて取得します。このような事をするかと言う事ですが、私なりの理解では、CPU変数下で管理することは、一時期であるにしても、そのページに関しては他のCPUから使われることがない。なるとハードキャッシュの兼ね合いでパフォーマンスがあがるのだろうと。なんとなく理解しました。(なぜ?となると、ハード周りのことが無知で、今ひとつ分かりません。)で、この辺りの処理を見てみる事にしました。物理ページフレームが必要と思われる処理でfsl_diu_alloc関数は、ビデオ関係のメモリを獲得する処理のようです。獲得するバイト数(フレーム数でない。)で、alloc_pages_exact関数をコールします。virt;}alloc_pages_exact関数で獲得サイズを、get_order関数で2のオーダに変換しています。get_order関数ではsizeをページ数に変換しています。1)で、余った分も1ページとなるようにしていることです。1(2で割ること)しながら、sizeが0になるまでorder++でオーダを取得しています。そのorderを引数で__get_free_pages関数を、ここでばバディシステムからページフレームを獲得し、その仮想アドレスを返します。獲得した連続する先頭のページフレームのアドレスです。order)で獲得したページフレームの終端アドレスをセットします。PAGE_ALIGN(size)は実際必要とする終端アドレスです。alloc_endで、不必要なメモリーをページ単位でfree_page関数で戻しています。order;}free_page関数はオーダ0のfree_pages関数です。0の時free_hot_page関数で、CPU変数のフレームキャッシュの戻すことになります。}}free_hot_page関数は引数を0にしてfree_hot_cold_page関数をコールし、活性化フレームキャシュに戻します。非活性に戻す場合は1でfree_hot_cold_page関数をコールします。1);}で、ここからが本題となります。*pcpを取得し、それにリスト登録しているだけのようです。注目すべき点は活性/非活性とも同じリストに登録していることです。活性化の時は先頭に、非活性の時は末尾という具合です。以降はページフレームキャッシュに所定のフレームが無い場合、バヂィシステムから補充するためのものです。put_cpu();}活性化、非活性化とハードウエアーに密接している処理のようですが、ただリストの前から使用することで、キャッシュ上に載っている可能性が高いからそれを使ったほうがいいんじゃないの。いうレベルのようです。ノースAdsense広告情報が設定されていません。