Kernel/VM探検隊@関西

あのKernel/VM探検隊が関西で開催されるので参加してきた.
非常に楽しかった!ローカルアレンジメントの@naota344さん,@syuu1228さん,そして学生のみなさん,参加者の皆さんのおかげですね!

参加前の意気込みは:

  • @syuu1228さんの「イマドキなネットワークIO」で,SMP対応の話とか聞けると良いな
  • いっぱい質問したい
  • 懇親会楽しみ
  • ついったー上のひとと会ってみたい

全部達成できた上に,飛び込みで初LTまでさせてもらって,非常に満足.
一番の目玉は Gentoo = カレー だと思う.

以下発表内容のメモ.発表外の個人的なコメント等を含む.

@naota344さん - Gentooあれこれ

  • symlinkに変数
  • hammer FS
    • 逐次スナップショットをとる
    • 適当なタイミングでリフレッシュしないとディスクをかなり消費する
    • hammer FS vs ZFS
      • ZFS の方がパフォーマンスがよかった(が,これもチューニング次第らしい)
Q.symlinkに変数ってshell/fs/other?
A.kernel. sysctlで有効/無効を切り替える

@syuu1228さん - イマドキなネットワークIO

  • CPU性能向上に対して,NICの性能向上の方が著しい
    • CPUはマルチコアで性能向上を目指した
    • NICもマルチコア対応する必要がある
  • 割込み負荷を下げる工夫:ハードウェア(NIC) / ソフトウェア(OS)
    • 1.HW:1パケット毎ではなく,数パケット毎に割りこむようにする
    • 2.SW:.割り込みを使わず,定期的なポーリング
    • 3.1&2の折衷案
    • CPU負荷と遅延はトレードオフ.まとめて一度に!はCPU負荷は下がるが遅延大.上手く賢く!
  • TOE(TCP Offload Engine)
    • 具体的に何をやってるん?
      • CheckSumぐらいしか知らない...
      • NICでMTU分割(LSO:Large Segment Offload)/結合(LRO:Large Receive Offload)
    • 特定用途にはOK. i.e. RemoteDMA(from InfiniBand)
  • ネットワークスタックのSMP対応
    • ジャイアントロック不要,SMPセーフな構造
    • +SMPに適した構造
      • CPU毎のキュー
      • データの局在性:CPUのキャッシュを有効に使える
      • ロックフリーなデータ構造(i.e. LinuxならRCU)
  • 速度が出ない原因
    • メモリアクセスの速度が遅い
    • DMAでNICからメモリに書きこんでも,メモリアクセスが遅いので,結局遅い
    • NIC高速化,CPU高速化,OS最適化はOK
  • Intelの取り組み対策 ... Intel I/O Acceleration Technology
    • QuickData:NIC-カーネル空間,カーネル空間-ユーザ空間のアクセス
    • Direct Cache AccessNIC→CPUのキャッシュ(SRAM)に書きこむ(=高速)
      • 1/2次キャッシュ?具体的なインターフェースは?
  • Microsoftの取り組み対策 ... Scalable Networking Initiative
    • NIC1つでマルチコアCPUの場合,処理できるのはシングルコアCPU?(Windowsだけ?)→BSDでの取り組みは?
  • Receive Side Scaling (RSS)
    • NICでホスト側のCPUと1対1対応のキューを用意する
    • NICは5tupleのハッシュ関数でキューを選択
    • サーバのNIC(HW)では広く実装されている
    • BSDで実装されている?
  • RSSへの対応(RPS) ... OSでのエミュレーション
    • NIC割込ではなくIPIを使うことで,任意のCPUへデータを渡す
    • HW割り込みorポーリング時に,NICから受け取ってCPUに渡すときにハッシュ関数を使う
    • IP/TCPまでは同一のCPU,ソケット処理以降(ユーザ空間)に行く時にCPUが変わるかも
  • RFS
    • ソケット処理以降も同一CPUで行う
Q.BSDへの対応は?
A.FreeBSDだとRFS的な実装があるが,Open/NetBSDにはない
  NICはマルチキュー対応の場合,まずはドライバが対応する必要がある
  OSでの対応が必要かも

@rofiさん - 円周率でプログラム

@fadis_さん - 1bit music

  • ピポッ
  • なんということでしょう,サウンドカードを抜いているのに音が出ます
  • printf("\a");
  • リモートログイン時は fopen(/dev/console)
  • "\33[11;1999]\a"
    • "11"は周波数:21~31766Hz(デフォルト750Hz)
    • "1999"は流す時間(デフォルト125msec)
  • 矩形波しか出ないので和音/ベース/音の大きさを調整するのに工夫がいる

@takeokasさん

  1. みんなのベクトル計算
    • ベクトル計算とは,データ列(ベクトル)に同じ演算を繰り返す
    • Q1.ベクトル演算の強みは何か?
    • A1.同じ形式のデータに同じ演算を繰り返し行う場合
    • Q2.並列に特化した言語が必要ではないか?
    • A2.既存言語でも十分対応できている
  2. Lispマシン CADRドキュメント和訳
  3. 関西でしか言えない MIPS R10000 とかについて
  • Q1.今後,日本製MIPSは出るか?
  • A1.出ないだろう

@kumagiさん- Hashmap探訪 - 細粒度Lock Hashmap / Lock-free Hashmap

  • P2PのChord?に似てる気がする
  • アトミックな操作を実現するための工夫
  • 削除オブジェクトに削除フラグがつける
  • 削除フラグが付いたオブジェクトをまたいだ操作はキャンセルすることで先が無い状態にする

@ysk_univさん - WindowManagerネタ - タイル型WindowManagerの世界

@hiromu1996さん - IS01カーネルハック

  • 225cm !!!
  • IS01が重いのはメモリが256MB+swapoff
  • 2週間ぐらいでできた

@syuu1228さん - 各OSでのパケット受信時のシーケンス比較

  1. Linux
    • ソケットは各CPUで共有なのでロックが必須
  2. OpenBSD
    • 4.4BSDの実装に近い
    • コードは分かりやすいが,マルチコア対応が不十分
  3. NetBSD
  4. FreeBSD
    • HW割込み
    • 割込みスレッドを起こす
    • NICからパケットをカーネル空間にコピー
    • CPUを設定する(RPSに近い動作)
    • IP/UDPの処理
    • ソケットに渡してロックをかける

@naota344さん - Gentoo とはなにか

@ten_forwardさん - LXC( Linux Containers)

Q.LXCはルーティングのテーブルを分割できるか
A.できる=仮想ルータにできる
Q.IOの仮想化の恩恵を受けているか
A.IOの仮想化は完全ではない.VM毎に帯域制限等は可能

@kumagiさん

@kazさん

  • SSEとFPUとSMPとレガシーPICの関係

@yogata

(ry

@takawata19さん

  • できたてほやほや hack !!!
  • ICH7
  • less + dmesg + hexdump プレゼン