Changeset aa2cedc in lab.git for Commentary/kernelvm
- Timestamp:
- Apr 13, 2013 7:42:38 PM (12 years ago)
- Branches:
- master, trunk
- Children:
- b14ab8e
- Parents:
- de9540b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Commentary/kernelvm/20130413.log
rde9540b raa2cedc 486 486 vt-d, vhost, 割り込み仮想化、など 487 487 488 @katsyoshi 489 ZFSで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 544 CD/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 568 EMC 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 641 Intel 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 729 DragonFly 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 745 MMIO 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 810 TELNETの話 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.