2014-12-01から1ヶ月間の記事一覧

slub: freelist用にpage確保してからstruct kmem_cache_cpuを設定する辺りのメモ

new_slab_objects()がfreelistを確保するためにnew_slab()を呼んで、それが戻ってきたらという辺りのメモです。 大まかにはslub:slab objectの作成処理を見ていく - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモで書いたりしているんだけど流れが見えてきた…

Linux Kernel Hack入門編

この記事はLinux Advent Calendar 2014の25日目ですヽ(=´▽`=)ノ 今回はLinux Kernel Hack入門編ということで入門的なことを書いてみたいと思います。 まず使用する環境ですけど最近出たばっかのFedora 21のWorkstationにしました。まあ、今回の内容的にはディ…

slub: kmem_cache構造体とslab object作成時のめも

slabを作る時とallocするときで似たようなパスを通ってちょっと混乱してしまったのでその辺のメモです。 slabを作るときはkmem_cache_create()が呼ばれて、そこから呼ばれるdo_kmem_cache_create()がメイン処理。 まずslabキャッシュの作り方の復習。slabキ…

slub: objectのsize設定

slubでオブジェクト管理する上で使うサイズ等の管理のメモ。見ているカーネルはv3.17です。今回はcalculate_sizes()を見るのがメインかな。 struct kmem_cacheの中でサイズに関連するのはこの辺り。 62 struct kmem_cache { 〜略〜 67 int size; /* The size…

virt-managerで仮想環境作成時に選択するOS Typeは何に使っているのか

この記事はLinux Advent Calendar 2014の17日目です。 virt-managerのGUIを使って仮想環境を作るときにOS Typeというのを選択していると思いますが、これの設定はどのように使われているのか見てようと思います。 特に最近のvirt-managerはやたら選択可能なO…

Linuxカーネルで見る最適化の技

この記事はLinux Advent Calendar 2014の13日目です。 LWNのACCESS_ONCE() and compiler bugsを読んでなるほどねーと思ったのでその辺について書いてみたいと思います。 最適化の技と言いつつ実際は最適化させすぎない技なんですが\(^o^)/ まずACCESS_ONCE…

systemd: gemのsystemd-journalでrubyからjournalログを読んでみる

この記事はLinux Advent Calendar 2014の11日目です。 systemdはAPIが公開されていてプログラムからジャーナルを読んだりできるのですが、公式サイトを見ていたらrubyのgem(systemd-journal)があったので遊んでみます。 requireするのはsystemd/journalで…

slub: allocate_slabでslab object用のページ確保

この記事はLinux Advent Calendar 2014の10日目の記事です。 今回は前回の「slub:slab objectの作成処理を見ていく」で詳細を見なかったnew_slab()でpageを確保するところを見ていきます。 new_slab()では下記のようにallocate_slab()にてページの確保を行…

ipコマンドとnetnsでお手軽なテストクライアント作成

この記事はLinux Advent Calendar 2014の9日目の記事です。 ネットワークを使う機能でなにかしらテストしたいときに複数のクライアントが欲しい時がありますよね。大量アクセスをしたい場合はjmeterとかありますが、クライアントのIPアドレスも複数あったほ…

systemdでshutdown時にプロ生ちゃんに挨拶してもらう

この記事はLinux Advent Calendar 2014の8日目の記事です。 systemdでシステムshutdown時に何かさせる場合の.serviceファイルについて書いてみたいと思います。 systemdで何かを実行する場合、どこにインストールするか(Installセクションをどうするか)が…

slub:slab objectの作成処理を見ていく

この記事はLinux Advent Calendar 2014の6日目の記事です。 今回は前回の続きではなくて(といっても流れ的には続きになるんですが)slab objectの作成部分です。 slab objectの作成はnew_slab_objects()にて行います。この関数の呼び出し元は__slab_alloc()…

Linuxカーネルでsystem callのhook

この記事はLinux Advent Calendar 2014の5日目の記事です。 Linuxカーネルのシステムコールをhookしたい場合にどうやるかという話です。試したカーネルは3.18.0-rc6です。 まずシステムコールですが、これはテーブルで管理されていて、各要素はNR_システムコ…

slubのコードを読む:__memcg_kmem_get_cacheの処理を読む

この記事はLinux Advent Calendar 2014の3日目の記事です。 kmem_cache_zalloc()、名前だけ見ると単純そうな気がするけど割とそうでもないのでした。この関数は最初のほうは別の関数へのラッパー程度になっていますが、memcg_kmem_get_cache()、__memcg_kmem…

sysinfo(2)でシステム情報の取得

この記事はLinux Advent Calendar 2014の2日目の記事です。 プログラムの中でロードアベレージとかメモリの空き容量を見るのにどうしようかなーと思っていて見つけたのがsysinfo(2)です。 使い方は至って単純でsysinfo構造体のアドレスをsysinfo(2)に渡せば…

Linuxのプロセス切り替え処理

この記事はLinux Advent Calendar 2014 1日目の記事です。 switch_toはプロセス切り替え時の処理ですね。ここを読んでみます。基本的にはアセンブラで__switch_toがcの関数となってます。 まずはプロトタイプから。引数は3個でprev,、next、 lastの3個。型は…