2014-01-01から1年間の記事一覧

Linuxカーネルハックに興味があるけど特にネタが無いんだよな〜って人向けの小ネタ

Linuxカーネルに興味があるんだけど特に作りたいものってないんだよなーなんて割とあると思う訳です。俺とか。。。 まあ、kernelnewbiesのメーリングリストでもよく見る話題かと思います。この辺なんかもそうですね。 で、そんな時にオススメできるのがkmeml…

kpatchはhot patchをどうやって作っているのか調べてみる

Red HatがLinuxカーネルにライブパッチするツールとしてkpatchを公開したのでそれはどうやってhot patchを作るのかを調べてみる。 kpatchのソースコードはgithubに置かれている。 kpatchはパッチの作成を行うモジュール群、パッチを当てるモジュール、両者を…

Adaptive replacement cache(ARC)とはどんなものか調べてみる

パフォーマンスに関するスライド「What Linux can learn from Solaris performance and vice-versa」を見ててARCって単語が出てきて参照カウンタ?と思ったんだけど調べてみたらAdaptive replacement cache(ARC)のことだったので調べてみた。英語版のwikip…

linux:x86_64のpageing_init()での最後の処理、zone_sizes_init()を読む。

paging_init()の続きで残りの2行を。。 node_clear_state()は特に見るほどではないのでzone_sizes_init()を見る。 650 void __init paging_init(void) 651 { 652 sparse_memory_present_with_active_regions(MAX_NUMNODES); 653 sparse_init(); 654 655 /* 6…

linux:sparse_init()で細かいメモリ領域の断片達を管理できるように

paging_init()の2行目、sparse_init()のところを読む。 sparse_init()の関数にあるコメントを見るとやろうとしていることはなんとなくわかる。 ここで言っているaccumulated non-linear sectionsというのは前回までの記事で見てきた部分で、e820のメモリマッ…

linux:sparse_init()の前にalloc_usemap_and_memmap()を見ておく

paging_init()の2行目で実行するsparse_init()を見る前にここで使っている関数を先に軽く見ておく。 alloc_usemap_and_memmap()はこのようなI/Fの関数。 引数の最後のdataはalloc_func()の一番目の引数として使う。 469 static void __init alloc_usemap_and…

linux:x86_64のpaging_init()を読み進める。

今日はx86_64のpaging_init()から呼ばれるsparse_memory_present_with_active_regions()とそこで使われるmemory_present()のあたりを読む。 ディレクトリ的にはarch/x86/以下ではなくてmm/になる。 まずはsparse_memory_present_with_active_regions()を。 …

linux:x86_64のメモリ管理のうちe820のメモリマップを扱っている部分読む

x86_64のページングを設定している部分を読もうと思って読み始めて前回の続きになるsparse_memory_present_with_active_regions()を読もうと思ったんだけど、この関数で使う変数(struct memblockのメンバ変数のmemory(型はstruct memblock_type))を調べた…

linux:x86_64のページング初期化処理周りを読んでみる

Linuxカーネルの解説本は何種類か出版されているけど大概はx86_32が対象なんですよね。ということでx86_32を基本として大まかな内容は解説本を参考にしつつ、実際のx86_64の処理はコードを読む必要があるのです。。。 ということでx86_64の場合のページング…

OSがどんなハイパーバイザー/コンテナ上で動いているか確認するツールのコードを読んだ

githubのTrendingと見ていてOSがどんなハイパーバイバー上で動いているか確認できるツールslabbed-or-notがあったので見てみた。 README.mdによると現状対応しているハイパーバイザーはXen、VMware、Hyper-V、KVM、bhyveに対応している。コンテナ型のOpenVZ…

ext4:ディスクレイアウトのめも3 エクステント

基本的には今まで通りExt4_Disk_Layoutを見つつ。 エクステントが有効化かどうかはスーパーブロックのs_feature_incompatのbit0x40(INCOMPAT_EXTENTS)が立っているかどうかでわかる。他にもinodeのi_flagsのビット0x80000(EXT4_EXTENTS_FL)が立っていた…

ext4:ディスクレイアウトのめも2

Ext4_Disk_Layoutの「Finding an Inode」を見ていて気づいたところのめも。前回の日記でも同じようにやってたはず。。。 ブロックグループは以下の式で。 bg = (inode_num - 1) / sb->s_inodes_per_group. test.txtの場合は。 (0xC - 1) / 0x2000 だから mas…

ext4:ディスクレイアウト調査中めも1

何周遅れだよ!って気もするけどext4のディスク上のレイアウトを調べる。現状調べたのはファイルのinodeにたどり着くとこまでで、ファイルのデータにアクセスするところまではできてない。。。 基本的にはext4のwikiにあるExt4_Disk_Layoutのページを参考に…

linuxカーネルパッチ:Known exploit detectionで遊んでみる

2013年12月中頃のLWNの記事で Known-exploit detection for the kernel というのがちょっと気になったので試してみた。 今の時点(2014/01/21)だとlinux-nextのtreeにも入っていないので今後どうなるかはわかりませんが。。。 記事の時点で投稿されたパッチ…

Java 7 Update 51でmissing required permissions manifest attribute

Java 7 Update 51にアップデートして、じゃあTopCoderの過去問でもと思ったら以下のようなエラーが。 ググってみたらJava 7 Update 51 blocks older Network Connect Java appletsという記事が見つかって「The root cause is that Java 7 Update 51 now requ…

Raspberry Piのブートプロセスメモ

Raspberry PiのLinuxの起動プロセスをぐぐったらStack Exchangeでトピック「How does Raspberry Pi boot?」があったのでメモ 「how-the-raspberry-pi-boots-up」と「Raspberry PI bare metal Part 1: The Boot Process」も参考に。これによるとカーネルが起…

ext4_file_open()を調べるついでにinitramfsのinit(Arch Linux)を読んでみた

ext4_file_open()の226行目のif文内を実行するのはどんな時なんだろう?と思って調べてみたらinit処理に関係している部分だったのでinitramfsのinitを読んでみた。 218 static int ext4_file_open(struct inode * inode, struct file * filp) 219 { 220 stru…