shimada-kの日記

ソフトウェア・エンジニアのブログです

Linuxカーネル

MySQLでインデックスが効いてないとつまりどうなるのか

MySQLでインデックスを使用しないクエリを投げると実際遅いことは分かるんですけど、マジックワード感があるのでなぜ遅くなるのか考えてみました。 すごく大きなテーブルを作ってインデックスを使用したSELECTとそうでないSELECTを投げてperfで調査しました…

FUSEで遊んでみました

これは「カーネル/VM Advent Calendar2012」17日目の記事です。今回はFUSEを使って画像の中にデータを記録していくファイルシステムを作ってみました。基本的にファイルシステムを作るときはシステムコールの実装になります(これはOS直書きのファイルシステ…

clistを使ってカーネル側とユーザ側で通信させてみました

以前の記事で作成したカーネル側の循環リストライブラリ(clist)を使って、実際にカーネル空間とユーザ空間でデータ通信をしてみました。LinuxカーネルではftraceやSystemTapなどのトレーサが使えます。両者とも非常にすばらしいツールなのですが、リングバ…

ページキャッシュのミスはどこで起きているのか

あけましておめでとうございます。これは「カーネル/VM Advent Calendar2011」35日目の記事です。そして2012年一発目の記事になります。この記事ではページキャッシュミスについて書きます。ページキャッシュとDB(主にtmpfsと絡めたお話)についてはid:naoy…

clistのカーネル版を作りました

前回このブログに書いた循環リストのライブラリのカーネル版の実装を作りました。本体はここ(github)にあるので、ヘッダファイルをさらしておきます。clist.h #include <linux/spinlock_types.h> /* spinlock_t */ #define CLIST_STATE_COLD 0 #define CLIST_STATE_HOT 1 #define C</linux/spinlock_types.h>…

マイナー番号で複数のデバイスファイルを管理するコードのメモ

今までデバイスドライバを書く時はマイナー番号は0にしていました。なので「マイナー番号はメジャー番号の1つ下の階層の番号」ぐらいの理解でした。 #複数のデバイスファイルを扱う要件がなかったのでしかし、1つのドライバコードで複数のデバイスファイル…

container_ofでsysfsのコールバック関数を一元化

私が普段使っているシステムではカーネルのパラメータを出力するのにsysfsを使っています(このことは以前このブログに書きました)。しかし、出力するファイルが多くなると同じような処理をするルーチンが多数存在することになり、無駄にソースの行数が多く…

仮想FSはsysfsを使おう

カーネルhackで使っていたシステムをprocfsからsysfsに切り替えました。仮想ファイルはget_seconds()関数を使ってepoch時間を表示させるものを用意しました。それを行うのが以下のカーネルモジュールです。epoch_sysfs.c #include <linux/kobject.h> #include <linux/string.h> #include <linux/sysfs.h> #inc</linux/sysfs.h></linux/string.h></linux/kobject.h>…

Initial APIC IDとランキュー番号の対応を調べる

Initial APIC IDとLinuxカーネルにおけるランキューの番号との対応を調べました。Intelのマニュアルによると2C/4TのCPUが2つ載っているマシンの各CPUのInitial APIC IDは下の表の様になると書いてあります。 Initial APCI ID Package ID Core ID SMT ID 0H 0…

Linuxの組み込みカーネルモジュールを作成する方法

OSの研究をする上で、カーネルのパラメータの値を知りたい時や独自の機能を追加したい時などにカーネルモジュールとして実装することが多々あります。そして往々にして知りたいパラメータはファイルの外にEXPORTされていないので、LKM(ローダブル・カーネル…