Changeset 210 in lab


Ignore:
Timestamp:
Apr 13, 2013 7:42:38 PM (11 years ago)
Author:
mitty
Message:
  • memo for 8th Kernel/VM expedition
  • add LT sessions
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Commentary/kernelvm/20130413.log

    r209 r210  
    486486        vt-d, vhost, 割り込み仮想化、など 
    487487 
     488@katsyoshi 
     489ZFSでNASやってはまったこと 
     490    FreeBSD+ZFSでファイルサーバ 
     491        ZFS root/ ZFS + Samba 
     492        ZFSの内部構造とかはしない 
     493    ZFSとは 
     494        Sunが開発した次世代ファイルシステム 
     495        128bitアドレッシング 
     496        RAID5, RAID6, Triple Parity 
     497        重複排除 
     498        暗号化 
     499    とりあえず動くOS 
     500        Solaris 
     501        FreeBSD 7.0- 
     502        Linux Native/FUSE 
     503    ZFS Root壊れたサーバ 
     504        Memory 512MB * 4 -> 足りない 
     505    運用中のサーバ 
     506        2GB * 4 -> 原因不明で停止したことがある 
     507    メモリ足りない場合は 
     508        loader.confに設定してメモリを節約する 
     509        それでも落ちる時は落ちる 
     510        16GB/32GBくらいは欲しい 
     511    wiki.freebsd.org/RootOnZFS 
     512        構成する全てのdiskにルートパーティションを入れておくと、後で楽 
     513    ディスクが壊れたら 
     514        zfs replace old-disk new-disk 
     515        後は寝て待つ 
     516 
     517@d_kami 
     518自作x86エミュレータの終焉 
     519    何が終わるのか 
     520        x86エミュレータ 
     521    何が学べたのか 
     522        x86の命令セット 
     523        世の中にはOSがたくさんある 
     524    命令セットを覚えると? 
     525        ソースコードを紛失した、仕方ないので続きはバイナリで作ろう 
     526        バイナリエディタならあるぞ 
     527        ソースコードは残したくない、バイナリで書くしかない 
     528    つまり 
     529        役に立たない 
     530    どこではまるのか 
     531        同じような命令を作っていて、ちょっとした違いにはまる 
     532            命令長 
     533        条件分岐に失敗して無限ループ 
     534        Intelのマニュアルに騙される 
     535    3年間で10000行くらい 
     536    バグが多すぎる 
     537        勘違い、Intelの罠 
     538    もうやめます 
     539        それじゃあいつやめるのか、今でしょ 
     540    いきなりx86はやめるべき 
     541    作る前に調べるべき 
     542 
     543@boronology 
     544CD/DVDのエラー計測 
     545    DVD -> プリンタブルの糊でメディア同士がくっついてしまう 
     546    今回扱う内容 
     547        読み込みエラーの計測 
     548        ハードウェア的なエラーはまた今度 
     549    SANYOチップのPlextorドライブがBEST 
     550    前提 
     551        ECCというブロックの連続 
     552        182*208の2次元配列 
     553    20万行くらいエラーが出るのは普通 
     554    NGだと1600万くらいになったりする 
     555        色素を新規開発したのに、Media IDを使い回したせいで、おかしなことになった 
     556    経年劣化 
     557        あまり変わらない(5年) 
     558    DVD焼く時に埃が付いていると、その部分だけエラーの山になるが、特に問題はない 
     559        規格的には許容される 
     560    多くのドライブは、書き込み中に速度を落として様子をみたりしている 
     561    DVDなら三菱化学メディアの8倍速 
     562    CDなら太陽誘電 
     563    そんなことよりバックアップ多重化したほうがいい 
     564    プレス版のDVD-ROMでも10万くらいエラーは出る 
     565    TDKの超硬は5年保存でも4万くらいだった 
     566 
     567@sirrow 
     568EMC Style 2013 の解説 
     569    EMCという会社 
     570    EMC Style 2013 
     571        EMCによるGangnam Styleのパロディ 
     572        2013/01に公開 
     573    で、何が言いたいの? 
     574        Now everybody scale out down the row! 
     575        2013 -> 来年は違う? 
     576        スケールアウトが大切だ、というのは今だけ? 
     577 
     578@Talos208 
     579フォントとカーネル/VMのあやしい関係 
     580    フォントって何? 
     581        文字をデバイスに表示する時に表示するデータ 
     582        文字コードとグリフの対応表 
     583        一対一対応とは限らない 
     584            縦書きと横書き 
     585            合字 
     586        グリフ 
     587            図形としての文字 
     588    本来アプリケーション層のもののはず 
     589    CFFのフォントに脆弱性があってJailbreakとか 
     590        CFFの「命令コード」 
     591    OpenTypeフォント 
     592        AdobeとMicrosoftが策定したフォント形式 
     593        基本的にはTrueType、内部テーブルの種類が追加されている 
     594    CFFテーブル 
     595        CFFフォントが丸ごと入っている 
     596        他のテーブルと情報が重複している 
     597        PDFにCFFグリフのOpenTypeを埋め込むと、CFFの部分だけ使われたりする 
     598    CFFフォントの構造 
     599    CharaStringINDEX 
     600        .notdefCharString, A CharString 
     601    CharString命令表 
     602        callsubr 
     603        return 
     604        escape 
     605        dup 
     606        each index rollといった命令 
     607        まっとうな2スタックのスタックマシン 
     608        もうVMだよね 
     609    VM相当とはいえかなり制限されている 
     610        メモリアクセス、IO操作などは出来ない 
     611    Windows OSごと落ちるフォントを作ろうとしたが、詳細を忘れてしまって、次の機会 
     612 
     613@hktechno 
     614自作コンピューターでなんかする(仮) 
     615    発表をFPGAボードで行います! 
     616    ハードウェア担当は@cpu_labs 
     617    自作コンピュータ != 自作PC 
     618        命令セット 
     619        MMU 
     620        IOコントローラ 
     621        全部作る 
     622    mist32アーキテクチャ 
     623        アウトオブオーダー実行 
     624        独自の命令セット 
     625        ハードウェアとソフトウェアの強調動作 
     626    MIST1032ISA / MIST1032SA 
     627    ソフトウェア 
     628        gccはやめた方が良い -> llvm 
     629        binutilsは仕方ない 
     630    mrubyを載せたい 
     631    UART(シリアル)ついてる 
     632    とりあえずコンパイル出来れば動くらしい 
     633    これから 
     634        Out of Orderコアを動かす 
     635        MMUや割り込み・IO周りのテスト 
     636        ベンチマークを取る 
     637        SDカード対応 
     638        DMA対応 
     639 
     640@mhiramat 
     641Intel SDMのopcode mapから作るディスアセンブラ in kernel 
     642    kprobes/ftrace/perftoolsとかのメンテナの一人 
     643    # cat debug/x86/disassembly 
     644        現在走っているカーネルのメモリを指定した関数名でダンプして、逆アセンブルする 
     645    背景 
     646        kprobesのデバッグ -> 自己書換コードの様子が知りたい 
     647        簡単にメモリ上のバイナリをデコードしたい 
     648        既存のものはどれもオレオレフォーマットで出力するものばかり 
     649    SDMのAppendix A 
     650        Opcode Map 
     651        Intel Officialなinstructionのエンコード表記 
     652        -> arch/x86/lib/x86-opcode-map.txt 
     653    実装したもの 
     654        x86命令デコーダ 
     655            x64, AVXにも対応 
     656            Intel形式と、AT&T形式の両対応 
     657            debugfs, kdb, toolsの三つの使い方が可能 
     658        Kconfig 
     659            CONFIG_X86_DISASSEMBLE 
     660    Oopsでcodeの欄が既にdisassemble済で出てくる 
     661 
     662@naota344 
     663野良ビルドからみたGentoo 
     664    build process 
     665        unpack 
     666        patch 
     667        ./configure 
     668        make 
     669        (make test) 
     670        make install 
     671    unpack 
     672        特に注目するようなところはない 
     673        Gentooにはunpackというコマンドが用意されている 
     674    ./configure 
     675        econfを打つだけで、様々なオプションをつけてconfigureしてくれる 
     676    --disable-dependency-tracking 
     677        automakeの機能であるコードの依存チェックを無効化する 
     678    --disable-silent-rules 
     679        CC fooとかLD fooとかに省略されてしまうのを無効化 
     680        デバッグに不便なので 
     681    patch 
     682        /etc/portage/patches で管理される 
     683        パッチの紛失を防げる 
     684    makeの落とし穴 
     685        Makefileがおかしい 
     686            "cd hoge; make"とか書いてある 
     687            CFLAGS, LDFLAGSが反映されない 
     688            gccを直接読んでいる 
     689            リンクがおかしい 
     690        こっそり出ているエラー 
     691            command not found 
     692            file does not exist 
     693    make対策 
     694        ビルドログの監視 
     695        frecord-gcc-switches 
     696            .GCC.command.line section 
     697            CFLAGSなどのチェック 
     698        --hash-style=gnu 
     699        ld.goldを使う 
     700    build log監視 
     701        command not found以外にも 
     702        gccの警告 
     703    strict aliasing 
     704        int X; float *Y; 
     705        X = 1; 
     706        *Y = 3.14; 
     707        printf("%ld\n", X); 
     708    underlinking 1/2 
     709        --as-neededをつけるとリンクが通らなくなる 
     710    underlinking 2/2 
     711    make installの落とし穴 
     712        rootで実行される 
     713            突然 rm -r /usrされたり 
     714        インストールしたバイナリがやばいかも 
     715            RUNPATH, TEXTREL, EXECSTACKが変な値になっている 
     716            DT_NEEDED 
     717            SONAMEが抜けてる 
     718            world writableにsetuid 
     719            debug情報が付いたまま 
     720    他にも 
     721        容量がとても必要があるもの 
     722        /usrとか/varとかがあふれる 
     723        メモリ不足 
     724        gccのバージョン・カーネルの設定チェック 
     725    ブラウザでGentoo体験 
     726        bit.ly/9VG7xz 
     727 
     728@iorivur 
     729DragonFly BSD's Hypervisor vkernel 
     730    What's DragonFly BSD 
     731        HAMMER file system 
     732        だけじゃない! 
     733    vkernelのはなし 
     734        カーネルをユーザランドで動かす機構 
     735        カーネルのデバッグが主眼 
     736    make pkg-create 
     737        git gc --agressiveが後ろで走って壊れる 
     738    vkernel専用のカーネルをmakeする必要がある 
     739    make worldなどなど 
     740    ホストからは一つのプロセスに見える 
     741        通常のプロセスと同じように、gdbでアタッチしてbreakpointとか設置出来る 
     742    valgrindが動くと嬉しい 
     743 
     744@syuu1228 
     745MMIO ON VT-X 
     746    エミュレーションの種類 
     747        ゲストOSの全命令をソフトウェアエミュレーション -> 遅い 
     748        vt-x以前: 実行されると困る命令だけを動的に置き換えて、ネイティブに実行 
     749            Binary Translation 
     750        vt-x後: CPUをゲストモードへ切り替え、ゲストOSのプログラムをネイティブに実行 
     751            置き換える必要がない 
     752    本来は、ハイパーバイザーはCPU命令の置き換えはしないはずなのに……? 
     753        命令エミュレーションをしている部分がある! 
     754    VT-xなハイパーバイザーのライフサイクル 
     755        ホストOSのカーネルからゲストモードへ (VMEntry) 
     756        ハードウェアへのアクセスなど、ハイパーバイザーの介入が必要になったら、ゲストモードを停止し、ホストOSへ戻る (VMExit) 
     757        終わったら再開する 
     758    IO命令によるVMExit 
     759        Exit Qualification 
     760        アクセスサイズ 
     761        In/Outの方向 
     762        String命令か? 
     763        REP prefix 
     764        etc... 
     765    Exit Qualificationの情報に用いてIO命令をエミュレーション出来る 
     766        Exit Qualificationを見ればどうすればいいか分かる 
     767    MMIOによるVMExit 
     768        MMIOは通常のメモリアクセスと同じ命令を用いる 
     769        IO命令と違って命令で判別してVMExit出来ない 
     770        アクセスしたアドレスで判別可能 
     771        MMIO領域に相当するページにアクセスした時にVMExit(EPT violation)が起きるようにEPTを設定 
     772            read/writeともに拒否 
     773    MMIOでのVMExit時に得られる情報 
     774        どの種類のアクセス権違反か 
     775        ページに設定された権限 
     776        ゲストOSがアクセスしたアドレス(論理・物理) 
     777        アクセスがread/writeどちらかは分かる 
     778        書き込み元・読み込み先の情報(アドレス・レジスタ)と、アクセス幅が分からない 
     779        どんな命令が実行されたのか分からない 
     780        メモリアクセスする命令はx86だとかなりある 
     781    情報が足りない状態でMMIOするには 
     782        ゲストEIPの指すアドレスの命令をデコードして、opcode/oprandを取得 
     783        オペコード通りの動作をエミュレーション 
     784    これって命令エミュレーション! 
     785    なんでこうなっているのか 
     786        x86にはメモリアクセスする命令がとても多い 
     787        そもそもEPT violationはページのアクセス権限エラーを知らせるVMExitであって、MMIOを知らせるものではない 
     788    頻繁にMMIOされるとパフォーマンス的に不利 
     789        Local APIC仮想化支援 
     790            Local APICは割り込み周りで頻繁にアクセスされるが、MMIOを使っており準仮想化にもなじみづらいデバイス 
     791        この領域のMMIOだけはVT-xが特別扱いされている 
     792        レジスタ・条件によってはVMExit自体省略 
     793    Coaleseed MMIO 
     794        MMIO領域には、読み書きによる副作用が無く、単純なメモリの読み書きに置き換えられる部分が存在 
     795        VGAボードのピクセルデータの領域とか 
     796        VMExitしたらカーネル内で命令エミュレーションを実行、メモリ読み書き 
     797        ユーザランドでのデバイスエミュレーションを省略 
     798        e1000のパフォーマンスが9.7%向上 
     799    まとめ 
     800        ハードウェア仮想化支援機構であっても、全部やってくれるわけではない 
     801        出来ない部分はソフトウェアでやらないといけない 
     802     
     803    Q/A 
     804        Exit Qualificationで得られるアドレスは実は正確ではない 
     805        例えば、ページフォルトの例では、境界をまたいでアクセスした際に、 
     806        実際にアクセスを開始したアドレスではなくて、禁止されているアドレスのみが 
     807        渡されるので、それを使ってエミュレーションするのは危険 
     808 
     809@yogata 
     810TELNETの話 
     811    telnet 
     812        ネットワークエンジニアの基本コマンド 
     813    「telnetも知らないんですかー?」 
     814    TELNETは暗号化出来る(結論) 
     815    TELNETとは? 
     816    RFC854 
     817        Network Virtual Terminalを作ること 
     818            コードセットは7bit USASCII, 標準制御機構 
     819        セッション確立時にオプション交換をする 
     820        ターミナルとプロセスで表示内容を同期させること 
     821    TELNETネゴシエーション 
     822    もしかしてネゴシエーションで暗号化出来るのでは? 
     823        RFC2946で定義されている 
     824        TELNETコマンドコード 38 
     825    TELNETのキャプチャを見る 
     826    結論 
     827        TELNETでも暗号化出来る 
     828    telnetはソースルーティングするパケットを作れる 
Note: See TracChangeset for help on using the changeset viewer.