FreeBSD
初期化以外はあまり違いが無いっぽい。FreeBSDでのmutexの開放: void mtx_destroy(struct mtx *mutex); NetBSDでのmutexの開放: void mutex_destroy(kmutex_t *mtx); FreeBSDでのmutexロック・アンロック: void mtx_lock(struct mtx *mutex); void mtx_un…
FreeBSDでのmutexの初期化: jpman search errorを参照。 void mtx_init(struct mtx *mutex, const char *name, const char *type, int opts); mutexはmutex変数、nameは名前、typeは「ロックの順序をチェックするとき、ミューテックスを区別するために、証…
SYSINIT()について見ていく。 init_device_poll()を登録している所を読んでみる: SYSINIT(device_poll, SI_SUB_CLOCKS, SI_ORDER_MIDDLE, init_device_poll, NULL); 5.3. Using SYSINITによると、引数はidentify the particular function dispatch data, th…
内容が難しいのでコメントをでたらめに翻訳する事くらいしか出来なかった。 要するに、プロセススケジューリング全体にも、通信パフォーマンス的にも最適な間隔・長さでpollingを行う為に必要な計算を行っているらしい。前回も書いたが、netisr_poll()は単に…
FreeBSDでは、イーサネット高速化の為にdevice pollingという機構を実装している。 ギガビットイーサや10ギガビットイーサでは割り込み処理が重すぎる為、割り込みなど使わずにどんどんOS側からデータを取りに行った方が速いから、というのが理由らしい。 …
FreeBSDもNetBSDも元を辿れば同じものから派生してるんだから、コードもさぞかし似ているんだろう。 とか思って、初期化シーケンスを見ていたら、見た目がかなり違っていてビビッた。NetBSDでは先ほど書いた通り、kern/init_main.cのmain()から機種非依存な…
どんな風になってるかちょっと読んでみた。 ふつーの割り込みのばやい apic_vector.sで定義されてる、ISR_VEC()が各割り込み処理の開始ポイントになってるはず。 まず、PUSH_FRAMEで #define PUSH_FRAME \ pushl $0 ; /* dummy error code */ \ pushl $0 ; /…
http://www.tancsa.com/blast.htmlFreeBSDやNetBSDでの色々な条件下でのスループットベンチマークが行われていて、fastfwd時の結果も載っている。 見た限り、つかっててもつかってなくてもそんなに差はない。
大雑把な流れは以下の通り:デバイスドライバからether_input()が呼ばれる。 条件毎に必要な処理を行い、ether_demux()を呼ぶ。 ether_demux()でプロトコル毎の処理を行う。 IPの場合はip_fastforward()を呼び、返り値が0ならnetisr_dispatch()を実行する。 …
IPパケットフォワーディングの高速化手法として、ファストパスというものがあるらしい。 どこで始まったのか知らないが、少なくともYAMAHAのルータの機能として日本語での資料が存在している: http://www.rtpro.yamaha.co.jp/RT/docs/fastpath/要するに、パ…
roundrobin()の仕組み、tick値やrrticks値の設定はNetBSD 1.6と「BSDカーネルの設計と実装」の段階でのFreeBSDとは特に違いがないように見える。 4BSD由来のコードがそのまま生きているという事だろう。BSDカーネルの設計と実装―FreeBSD詳解作者: マーシャル…