Linux

カーネルタイマは何故リストで管理されているのか

カーネルタイマは何故リストで管理されているのか、という理由がわかった気がするのでメモ. カーネルタイマは expires (点火する時間)で5段階に場合わけされて管理されているが、ロックはこの5段階ごとに保持されている. 何故タイマ毎にロックをしないのだろ…

dyn-ticks ってどうなってるの

目標 いまいち dyn-ticks(Tickless kernel) についてよくわかっていなかったので、コードを読みながらまとめる. カーネルのバージョンは 2.6.27.8(古くてごめんなさい) で、CPU は i686(SMP環境)としておく. 話が行ったり来たりしますが、ご了承を. ハードウ…

container_of という大変便利なマクロ関数の存在を知った

今更ながら、include/linux/kernel.h container_of が相当使えるマクロ関数だと気づきました. 一見わかりにくいのですが、なんと「変数が入っている構造体へのポインタ」をコンパイル時に計算してくれるのです.container_of を用いることで、API に縛られず…

clockevents

Linux カーネルには clockevents というフレームワークがあるのだけど、LWN.netの記事を見る限り、どうもハードウェアタイマのドライバを書くためのフレームワークという認識が正しいみたいです. もっとレイヤの高いものだと思っていたんだけど. 話が変わり…

高精度カーネルタイマ hrtimer のコールバックの仕組み(途中)

hrtimer は、 tick ベースの timer_list を用いた従来のカーネルタイマよりも、よりきめ細やかにタイマ管理を行いたい、というニーズに合わせて実装されました*1. カーネルタイマはタイマ割り込みのカウンタ jiffies が指定した値になると起動しますが、hrti…

カーネルタイマー add_timer のコールバックの仕組み(途中)

現状のLinuxには、2種類のカーネルタイマがあります. timer_list構造体を使用するカーネルタイマ. hrtimer構造体を使用する高精度カーネルタイマ(hrtimer). 今回は、前者について調べてみました. 呼び出しの仕組み カーネルタイマの基本的な呼び出しフローは…

PCが突然落ちる!

PCが突然落ちるという状態になってしまったので、原因究明のために lm-sensors というパッケージを導入. sudo aptitude install lm-sensors sudo sensors-detect # 基本全部デフォルトでOK(ひたすらEnter!) #----cut here---- it87 coretemp #----cut here-…

Linus の git tree

Linus の管理している git tree は、このURLに掲載されている.git で落とすには、 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.gitとすれば OK.

カーネルのコンパイルなしにカーネルモジュールをコンパイルする環境を作る

Linuxカーネル用のモジュールをコンパイルする際には、通常 /lib/modules/`uname -r`/build をカーネルのソースディレクトリとして指定し、それを make コマンドに引数として渡す必要があります. カーネルモジュールは、カーネル側の保持しているシンボルテ…

Writing kernel modules in Haskell

LWN.netで、大変頭のおかしいプロジェクトが紹介されていました(いい意味で). Writing kernel modules in Haskellというもので、カーネルモジュールのインターフェースとGHCを合わせることで、Haskellを用いてカーネルモジュールを書くことができるんだとか.…

distccを用いた分散コンパイル環境の構築

カーネルを触っていると、コンパイル時間が開発のボトルネックになってしまうことがあります. この問題を解決するために、distccを用いた分散コンパイル環境を構築してみました. なお、ファイルパスなどはすべてubuntuのものとなっており、分散先のマシンのg…

パッチの返信が返ってきた!

先日投げたパッチですが、なんと 開発者の Avi さんから返信がありました! 日本語版のユーザドキュメントしか見てなかったので知りませんでしたが、 -drive オプションなんてできていたのですねー(日本語版のユーザドキュメントを見ると、-driveオプションは…

gdbstub: packet reply is too long

qemu に -s オプションをつけると、qemu の gdbstub が localhost:1234 で立ち上がり、gdb 上で target remote localhost:1234 などとすると接続できますよね. しかし、kvm-88の時点で、現在の qemu では、これを利用することができません. 具体的には、以下…

KVMを用いて、カーネルイメージから直接起動したい...!(解決編) + パッチ投げた

先日の記事で、KVMからの直ブートに失敗していましたが、無事に動作しました! /usr/local/kvm/88/bin/qemu-system-x86 -kernel /boot/vmliuz-2.6.28-15-generic -initrd /boot/initrd.img-2.6.28-15-generic -hda ~/disks/ubuntu.img -append "root=/dev/sd…

KVMを用いて、カーネルイメージから直接起動したい...!(未解決)

というのは、需要としてはかなりありますよね. というわけで、以下のオプションを用いることでブートできる...はずなのですが! /usr/local/kvm/88/bin/qemu-system-x86 -kernel /boot/vmliuz-2.6.28-15-generic -initrd /boot/initrd.img-2.6.28-15-generic…

Linux カーネル 2.6.30.5 で kvm-88 のインストールが通らない

タイトルの通りです. make installしてみると、 $ make install WARNING: Loop detected: /lib/modules/2.6.30.1/extra/kvm.ko which needs kvm.ko again! WARNING: Module /lib/modules/2.6.30.1/extra/kvm.ko ignored, due to loop WARNING: Module /lib/m…

カーネルコンパイルについて

Debian系のディストリビューションにおいて、マシン間で動作するカーネルをコンパイルしようと思ったら、通常は"make-kpkg"コマンドを利用しますよね. ちょっとしたオプションを付け加えるだけで deb パッケージを作成できるため、大変便利なのですが、2つ欠…

第2回KVM読書会の資料

8/28に第2回KVM読書会を開催し、その資料をこちらにアップロードしました. 今回の内容は、Intel-VT、KVMのさわり(後半)となっています. KVMのさわり(後半)はカーネル/VM探検隊用にあげた資料から流用していますので、そちらを見たことがある方は見る必要がな…

Linux カーネルに欲しいモノ

最近のPCのマザーボードにシリアルポートが搭載されていないことに起因するものばっかですがw USB2Serial で Grub のOS選択画面を表示したい. Linux カーネルを一旦ブートさせて、ドライバだけ拝借できないか(Bitvisor的な感じで). もしこのアプローチがうま…

vhost: a kernel-level virtio server

KVMのMLで、vhost: a kernel-level virtio serverが話題になっています.これまで準仮想化の標準インターフェースとされてきた virtio は、専用のPCIデバイスをVMに認識させ、そのデバイスを経由してホストにIOを要求していました. この際、KVMがQemuのコード…

A Visual Expedition Inside the Linux File Systems

OS News経由で知ったのですが、Linuxカーネルのファイルシステムを追っていくという、貴重な資料がアップロードされたみたいです。A Visual Expedition Inside the Linux File Systems詳解LinuxカーネルやLinuxデバイスドライバといった本はオライリーから幾…

x86用Linuxで最も必要動作環境が低い2.6カーネルDistributionは?

デフォルト(CDROMからインストールできる構成)で、最も必要動作環境が低いLinux Distributionを探してみる。ぱっと探してみた感じ、以下のような結果になった。 Distribution名 必要メモリ Puppy 128MB*1 Debian*2 32MB Ubuntu*3 32MB 一瞬DSLというDistribu…

From FreeBSD To Ubuntu

FreeBSD上で使用したい Linux アプリがクラッシュするので、最近リリースされたUbuntu TLS 8.04 に移行。インストールが非常に楽だった。Compiz も難なく動作した。emeraldを使えばテーマ変更もらくちん。アプリケーションの量も豊富である。しばらく Ubuntu…