x86

Baytrail-M NUC(DN2820FYKH)でFreeBSDが起動しなかった話・その後

http://www.slideshare.net/syuu1228/intel-nuc の続きの話です。CURRENTにマージされたbug fixはMFCって言って、stableへマージされて次のRELEASEに含まれる仕組みになってるっぽいんですが、このパッチも無事取り込まれたようで、次のRELEASE(10.1, 9.3か…

FreeBSD-10 install image for Baytrail-M NUC(DN2820FYKH)

Intel Baytrail-M NUC(DN2820FYKH) causes kernel panic due to its broken ACPI table: http://www.freebsd.org/cgi/query-pr.cgi?pr=187966This install image includes patched kernel for the machine, you are able to install FreeBSD-10 on the machi…

Baytrail-M NUC(DN2820FYKH)でFreeBSDが起動しなかった話・解決編

これの続き。Linuxでは僕の書いたpatchと同じ感じでreservedが来たらtriggerならlevel、polarityならlowを返すようにしています。 http://lxr.linux.no/linux+v3.13.5/arch/x86/kernel/acpi/boot.c#L1094ですので、このパッチをマージして貰うという事で良い…

Baytrail-M NUC(DN2820FYKH)でFreeBSDが起動しなかった話

bhyve用にこれ買ってみたんですよ、これ。まぁ新しいハードだし地雷だろうなと思ってたんだけど、面白そうにおもっちゃってつい人柱っちゃったんですよ。はい。したらもういきなりドハマリして。 FreeBSDが入っている2.5インチHDDを繋いでもレガシーブートモ…

ゲストOSのブートローダをホストOS上で動作するプログラムに翻訳する

このブログエントリはカーネル/VM Advent Calendar 2013 8日目の記事、および第九回カーネル/VM探検隊の発表の補足記事です。 発表資料と動画 このエントリだけでも理解できるように書いたつもりですが、はじめにこちらをみて頂いた方が分かりやすいかもし…

これからX64向けのUEFIバイナリをビルドしようとしている人々へ

EDK2向けに記事を書くけど、他のSDKを使う場合でも同じ問題が生じると思うので、gnu-efiな人達も読んでおいて下さい。 なお、この問題はIA32では確認できないのですが、どうしてそうなるのか僕はx86のABIにあまり詳しくないので良く分かりません。IA32だと吐…

USB 3.0 HDD benchmark on FreeBSD-CURRENT

なんかASUS U24Eを買ったらUSB 3.0ポートが付いてきて、FreeBSD-CURRENTで認識出来たのでUSB 3.0対応ケースを買って2.5 inch SATA HDDを突っ込んで軽く試してみた。 USB 2.0のポート root@u24e:~ # usbconfig list ugen0.1: <EHCI root HUB Intel> at usbus0, cfg=0 md=HOST spd=H</ehci>…

Instruction level tracer作った

VT-xなVMMはエミュレータと違って1命令毎にソフトウェアエミュレーションしている訳では無いので、単純に命令エミュレーションごとにデコード結果をprintfすればいいとかいう簡単な解は無いし、1命令実行ごとにVMExitする為の設定とかいうものも存在していな…

今年も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 …

/proc/irq//smp_affinityの書き換えでPCIコンフィグレーション空間はどのように書き換わるか

※追記:実際にはカーネルにprintkを突っ込みまくるという、ずっと泥臭い方法で調査をしてました。多分役にたたないと思うけど、一応その時のdiffも併せて公開しておきます。Linux 3.2.0+用なので、他のバージョンだと当たらないかもしれません。 Debug print…

Kernel/VM Advent Calendar 25日目 最近のPCアーキテクチャにおける割り込みルーティングの仕組み

※追記:MSIはPCI 3.0からじゃなくてPCI 2.3からだとの指摘を受けて書き換え。※追記:hisakさんから詳しくコメントが入っているので、併せて読んで下さい。 とてつもなく遅れたKernel/VM Advent Calendarの25日目の記事です。 Linuxにおける/proc/irq//smp_af…

raid456とasync_*

気づいたらなんかこんなドライバがロードされてた。 $ lsmod|grep raid456 raid456 62545 0 async_pq 13187 1 raid456 async_xor 12879 2 raid456,async_pq async_memcpy 12529 1 raid456 async_raid6_recov 12776 1 raid456 async_tx 13349 5 raid456,async…

virsh consoleでVMのコンソールひらいたら

virsh consoleでUbuntuのVMのコンソールひらいて、ログインしてシェルにコマンド打とうと思ったら、いきなりこんなの出てきてビビるなど。 Unhandled exception in thread started by <bound method MetaReleaseCore.download of <UpdateManager.Core.MetaRelease.MetaReleaseCore object at 0x7f58ff88fb50>> Traceback (most recent call last): File "/usr/lib/python2.7/dist-p…</bound>

VT-dでpassthroughしたデバイスの実機上での割り込みスレッドがpsで見えてる

syuu@ubuntu:~$ ps ax|grep kvm|grep irq 1024 ? S< 0:00 [kvm-irqfd-clean] 6353 ? S 0:00 [irq/81-kvm:0000] 6354 ? S 0:02 [irq/82-kvm:0000] 6355 ? S 0:00 [irq/83-kvm:0000] 6359 ? S 0:01 [irq/84-kvm:0000] 6360 ? S 0:02 [irq/85-kvm:0000] 6361 ? …

Direct Cache Accessについて理解を深める為、CPUのデータシートも読んでみる

CPUについては、Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide, Part 2に書いてある。 Table B-2. IA-32 Architectural MSRsにDCA関連のレジスタがあった: 1F8H IA32_PLATFORM_DCA_CAP DCA Capabili…

Direct Cache Accessについて理解を深める為、MCHのデータシートを読んでみる

Intel I/O Acceleration Technologyの構成要素で一番「!?」となったDirect Cache Accessについて、第一回 カーネル/VM探検隊@関西では調査不足で十分に説明出来てなかったので調べてみた。元となる論文はこれなのだが: Direct Cache Access for High Ba…

Direct Cache Accessについて理解を深める為、NICのデータシートも読んでみる

DCA対応NICはいくつかあるようだが、例えばIntel® 82598 10 GbE Controller Datasheetの3.5.6 DCAに書いてある。これによると、初期化時にドライバは送り先CPU ID・CPU Bus IDを設定してDCAを初期化する必要があり、DCAが有効化されるとPCIe TLBヘッダのTAG …

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

まぁ予想通りというか、依然としてOpenBSDとかなりの部分が共通してますね。 ロック粒度と並列性ですが…割り込み以外でBig kernel lockは使わないのでOpenBSDのようにシステムコールでブロックしてしまってプロセスの並行実行を阻害したりはしないものの、サ…

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

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

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

同じものを何度も書いてはいるのだが、OpenBSDの図のように共有データとロックの関係についてはあまり調べて無かったと思ったのでこちらも作ってみた。正直、RCUがどうなっているのか未だ理解出来ていない。 恐らくロック区間でロックした時点でのバージョン…

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

共有データとジャイアントロックの位置に注意しながら関数レベルで追ってみた(実際にはかなり簡略化しているが)。 SMP対応が全く進んでいないという事が容易に見て取れる。

3GB以上のメモリサポート on OpenBSD/amd64

OpenBSD-current/amd64を4GBのメモリを搭載しているマシンに入れてみたら何故かメモリが3GBとちょっとしか認識されていない事に気づいた。どうやら、こういう事らしい: http://kerneltrap.org/mailarchive/openbsd-misc/2008/12/15/4424704取り合えずこれで…

Software Design 2009/12月号でLinuxカーネルに関する記事を書いたよ

という訳で、買え(ちょ ええと、普段はx86?Linux?何それ食えるの美味しいの?と公言して憚らない私ですが(嘘、色々あって何故かSoftware Design 2009/12月号のLinuxカーネル特集で記事を書くハメに陥ってしまいまして、プロセス管理とプロセススケジュー…

第二回 KVM読書会で「AMD SVMってなあに」って題名でお話してきました

今回はGuestモード/Hostモードの切り替えに絞ってお話をしてきました。 プレゼンシートはここにあがってます: http://www.slideshare.net/syuu1228/amd-svm-1915831 あとこのサイトでもSVMについて幾つか言及してる記事を書いてます: http://d.hatena.ne.…

だめ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…

第二回KVM読書会でAMD SVMについてお話してきます

しかし主催のid:big-eyed-hamster君の方がよっぽど詳しい件。 まぁいいや。折角先日のHackathlonで勉強してきたので少し話してみますよ。 あまり良く分かってないので深くは突っ込まないでほしい(>

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

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

AMD SVM(AMD-V)についてちょっと勉強してみた 再まとめ

SVMの概要 SVMはIntel VTと同じく仮想化をハードウェアレベルで実装したもので、CPUにGuest環境を動作させる専用モードとモード切り替えの拡張命令を持つ。SVM拡張命令はCPL = 0で実行される必要がある。Guest環境で実行されるインストラクションのうち、直…