FreeBSD

GSoC 2012 week2:擬似BIOSの雛形を作る

PC起動時のCPUの開始アドレスはいくつかな、と思ったのだがthe processor to always begin executing code at address "FFFF:0000"とか書いてあるので、リニアアドレスで言うと0xFFFF0からスタートするようだ。擬似BIOSを作るには、まずここにリアルモードで…

BHyVe対応CPUかどうか調べる

$ dmesg|grep CPU: CPU: Intel(R) Pentium(R) CPU G6950 @ 2.80GHz (2793.04-MHz K8-class CPU) CPU: Intel(R) Pentium(R) CPU G6950 @ 2.80GHz (2793.05-MHz K8-class CPU) CPU: Intel(R) Pentium(R) CPU G6950 @ 2.80GHz (2793.04-MHz K8-class CPU) Intel…

GSoC 2012 week1:VMCALL命令をtrapする

まぁVM床抜きについては以前にもその手の専門家なgo_vmが詳しく解説されているので、私が色々説明するまでも無いと思う(←説明放棄)。ってな訳でまぁコード書いてみましょう。 ゲストカーネル --- /usr/src-bhyve/sys/amd64/amd64/locore.S 2012-01-03 12:2…

今年もGoogle Summer of Codeに採択されました

今のところ百発百中だし楽勝ですねえー、一応説明すると、BHyVeにBIOS Emulationを実装するというproposalを書いてGoogle Summer of Codeに採択されたので、まぁぼちぼちやります。アイディア的にはこんな感じで。何でx86のそんなレガシーコードを今更?と言…

カーネル/VM勉強会@関西 其の参でBHyVeの話をしてきました

なんか関西方面のとても怖い勉強会に参加して、勇気を振り絞ってハイパーバイザーのゆるい話をさせて頂きました><;スライドはこちら(Intel VT, KVMの説明の一部で@oza_x86の資料を使わせて頂いています。oza_kvm先生有り難うございました): BHyVeって…

BHyVeのソースコードってどれくらいの量なの?

ユーザランド側 $ wc -l lib/libvmmapi/*.[ch] usr.sbin/bhyve*/*.[ch] usr.sbin/vmmctl/vmmctl.c 338 lib/libvmmapi/mptable.c 171 lib/libvmmapi/mptable.h 645 lib/libvmmapi/vmmapi.c 98 lib/libvmmapi/vmmapi.h 187 lib/libvmmapi/vmmapi_freebsd.c 68 …

82599(Intel 10G Ethernet)の割り込み頻度

前回の記事で、iperfを回している時の割り込み回数が25000 - 30000 intr/10secというような数字が出ていたので、Linuxではどうだろうか?と思って/proc/interruptsの値をシェルスクリプトで10秒毎に取るやり方で計測してみたら、回数じゃなくて違う所が気になり…

続々・CPU毎のシステムコール回数、割り込み回数、etcの取得

続・CPU毎のシステムコール回数、割り込み回数、etcの取得 - かーねる・う゛いえむにっきで書いたプログラムを、出力をcsvにしてじーっと眺めていたら、v_intrの値がvmstat -iの各割り込み要因の増え方と比較して低すぎるように思えたので、vmstat -iの結果もn秒…

続・CPU毎のシステムコール回数、割り込み回数、etcの取得

n秒間に何回イベントが発生したかを取得するプログラムに改造してみた。 vmtest.c · GitHub $ clang -o vmtest vmtest.c -l kvm $ sudo ./vmtest 10 cpu0: v_swtch:1339 v_trap:4 v_syscall:101 v_intr:0 v_soft:520 v_vm_faults:3 v_cow_faults:0 v_cow_opti…

CPU毎のシステムコール回数、割り込み回数、etcの取得

vmstatから取れそうだけど、読みにくいし意味がよく分からなかったから、ソースコードを分解してたらこんなん出来た。 vmtest.c · GitHubman kvm_getpcpuを読む限り、カーネル内のper-cpu storageの中身をユーザランドへコピーしてきているように読める。 それっ…

新しいディスクにZFS RootなFreeBSDを引っ越す

RootOnZFS/GPTZFSBoot/Mirror - FreeBSD Wikiこのへんを参考にada0へzrootを(ミラーは無しで)作っている前提。 gpart create -s gpt ada1 gpart add -b 34 -s 64k -t freebsd-boot ada1 gpart add -s 4G -t freebsd-swap -l swap1 ada1 gpart add -t freeb…

igb(4)を理解する為にデータシートを読む(RSSハッシュテーブルの初期化と書き換え)

前の記事と同じくigb_initialize_receive_unitsをみると、RETAというところへ書き込んでいる: union igb_reta { u32 dword; u8 bytes[4]; } reta; /* Warning FM follows */ for (int i = 0; i < 128; i++) { reta.bytes[i & 3] = (i % adapter->num_queues…

igb(4)を理解する為にデータシートを読む(RSSハッシュ関数用のシード設定)

igb_initialize_receive_unitsをみると arc4rand(&random, sizeof(random), 0); でランダムな値を取得してきて for (int i = 0; i < 10; i++) E1000_WRITE_REG_ARRAY(hw, E1000_RSSRK(0), i, random[i]); で書き込んでいる。 データシートを読むとRSSRKはRSS…

igb(4)を理解する為にデータシートを読む(RSSハッシュキーの取り出し)

まずはこのフローを見てもらうと分かりやすいのだけれど、FreeBSDのイーサーネットドライバでは割り込みハンドラ(em_irq_fast)からtaskqueue_enqueueを呼んでカーネルスレッドを起こして、このスレッドが実際にパケットを取り出しに行く(em_irq_fast)。フロ…

Google Summer of Code 2011

FreeBSDプロジェクトでGSoCにApplyしたら採択してもらえました。 Proposalはこちら: http://www.google-melange.com/gsoc/proposal/review/google/gsoc2011/syuu1228/1内容としては、最近調べて回ってるネットワークIO周りの延長線上で、tcpdumpやらwiresha…

FreeBSDのパケットディスパッチについて

探検隊での発表や、FreeBSD/i386のパケット受信フロー - かーねる・う゛いえむにっきの補足。まず、話の前提のおさらいから。 マルチコア環境でネットワーク受信処理をスケールさせるには、NICに届く沢山のパケットを複数のコアへばらまいて並列に処理させる…

FreeBSD/i386のパケット受信フロー

TCPとフォワーディングをサクっと省略しちゃった簡易バージョン。 LinuxみたいにRCUとかは使ってなくて粒度の細かいロックがそれぞれのデータに対して存在してて、ハードウェア割り込みもソフト割り込みもそれぞれスレッドで処理してるという事のよう。

FreeBSD Ethernet device pollingに関する記事まとめ

2年くらい前にFreeBSDのEthernet device pollingについての記事を書いていたので、ここに再度まとめておこう。 Ethernet device polling(1) Ethernet device polling(2) Ethernet device polling(3) Ethernet device polling(4) Ethernet device polling(5)…

FreeBSD/mipsが某ルータで起動した

http://svn.freebsd.org/base/user/jmallett/octeonをcheckoutしてきて、ブートローダの違いで動かん部分をゴニョゴニョした。 まぁ、殆どコメントアウトしただけなんだが。 Cache info: picache_stride = 4096 picache_loopcount = 4 pdcache_stride = 128 …

Ustream recorded movies of AsiaBSDCon 2010

Soon refined movies will uploaded to Youtube, until it, you can see movies here: Day 3 Room A http://www.ustream.tv/recorded/5395983 http://www.ustream.tv/recorded/5396256 http://www.ustream.tv/recorded/5397759 http://www.ustream.tv/record…

だめVMが実行したインストラクションをトレースするとこうなる

---------------- IN: 0x00000000c0af8a00: mov %ebx,%eax 0x00000000c0af8a02: push %ebx 0x00000000c0af8a03: push %ecx 0x00000000c0af8a04: push %edx 0x00000000c0af8a05: push %esi 0x00000000c0af8a06: push %edi 0x00000000c0af8a07: push %ebp 0x00…

FreeBSDで動くAMD SVM専用仮想マシン「DVM(だめVM)」を実装してみた

…タイトルは釣りなんだ。すまない。(´・ω・`) 筑波大 Softlab Hackathlonに参加してきました - かーねる・う゛いえむにっき で「VM作る!」と宣言してみたはいいものの時間が足りず、結局作れたのはKVMのコードからAMD SVMのGuestモードを開始するのに最低…

FreeBSDでは、「TCP/IPスタック」からBKLが排除

http://d.hatena.ne.jp/yutakapontan/20090507#p1 素晴らしい。 これでどの程度SMP時のネットワーク性能が上がっているのだろうか? どこかで測ってないのかな〜。

FreeBSD-current/mipsのSMP実装#仮想メモリ編の補足

pmapのSMP対応の所をもう少し詳しく見てみた。 static void pmap_invalidate_all(pmap_t pmap) { #ifdef SMP smp_rendezvous(0, pmap_invalidate_all_action, 0, (void *)pmap); } static void pmap_invalidate_all_action(void *arg) { pmap_t pmap = (pmap…

pmap SMP化でのIPI使用について

FreeBSD-current/mipsではpmap.cの特定処理についてsmp_rendezvous()を使って全CPUで整合が取れるような書き方がされていた。 が、NetBSD-currentをみる限り、powerpcにもi386にもそういう実装はされていない。 これはハードウェアアーキテクチャによる違い…

FreeBSD-current/mipsのSMP実装#初期化編

AsiaBSDConのニュース記事などを読んでいて気がついたが、どうもFreeBSD-current/mipsにはSMP対応コードが既に入っているらしい。 が、MP対応なチップ向けのコードが入っておらず、しかもgenericなコードの中にしばしば#if defined(TARGET_OCTEON)という文字…

dbusがエラーして動かないアプリケーションが有る

$ pidgin process 26155: D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to open "/var/db/dbus/machine-id": No such file or directory See the manual page for dbus-uuidgen to correct this issue. D-Bus not …

FreeBSD 6.4のLinuxエミュレーションが動かんくなた

仕事のマシンでFreeBSD 6系を使ってるが、6.4に上げたらなんかLinuxエミュレーションがまともに動かなくなった気がする。 $ /compat/linux/bin/bash bash-3.00$ bash bash: fork: 無効な引数ですこんなんでますけどなにこれ。 Xのドライバにnvidiaのモジュー…

FreeBSD-current/mipsが動いた

初めてマトモに起動してるところをみた。 以下、作業記録:cvsupでcurrentをダウンロードしてくる。 supfileはこんな感じ: *default host=cvsup.jp.FreeBSD.org *default base=/home/syuu/FreeBSD *default prefix=/home/syuu/FreeBSD/cvsroot *default rel…

Ethernet device pollingのドキュメント類

Device Polling support for FreeBSD jpman search error