(」・ω・)」うー!(/・ω・)/にゃー!

Qpstudy 2012.05 に参加してきた

| Comments

新入社員でもなんでもないけど参加してきた。 個人的には、計算機科学は勉強したことなかったので、全然知らない考え方も多く、いい取っ掛かりを得られた、大変参考になる勉強会だった。

ハードウェアについて

コンピュータの5大要素

  • 入力・記憶・演算・制御・出力
    • 寸劇www
  • ノイマン型コンピュータ

    • 昔からこの基本構造は変わっていない。
  • 仕事の中でのハードウェア

  • ボトルネック調査

    • CPU
    • memory
    • Disk IO(補助記憶)
  • 効率の良いアーキテクチャ

    • ハードウェアをよく知る
  • 効率がいい、とは?

    • アーキテクチャから見て効率がいい
    • コンピュータのきもちを知ること。
      • どのように動いているのか?

CPU の話

  • Control Unit + 演算装置 = CPU

  • 5大要素とあわせて

    • Processer
    • Program
    • Data
  • CPU

    • Address Busで指定した場所に、Data Busカラデータが流れる。
  • CPUの4つの原則

    • 時間軸に合わせて4つの仕事をする
      • Fetch
      • Decode
      • Execute
      • Write back
  • Fetch

    • 主記憶からのデータの取り出し
  • Decode

    • 回路で実行できる内容に変換
  • Execute

    • その内容を下に、回路上で実行
  • Write back (or store)

    • 結果を戻す
    • 原則に含まれないこともある。
  • これらがCPU Clockにあわせて動作している。

  • CPU Clock

    • 水晶(クリスタル)に電圧をかけると、一定周期のOn/Offの波形が出てくる。
    • このクロックに合わせて命令を実行する。
    • 市場に出ているCPUの中では、最速は5.2GHz
  • 高速化の方法

    • Pipeline
      • GPUのような計算し続けるものには効果が高い。
      • プログラムの動きによっては、パイプラインの途中で無駄が発生してしまって、効果が少ない。
    • Super Scalar
      • いっぺんに計算してしまえ!というもの
    • Out of Order
      • 遅い処理(memoryからの読み込み)などは他の命令と並行してやってしまってもいいよね、というやり方。
  • CISC vs RISC

    • CISC - いろんな命令セットを回路で実装する考え方
      • でも、実は利用頻度の高い命令は限られていた。
    • RISC - 利用頻度の高い命令セットのみで、プログラム側でそれを組み合わせて使う考え方。
    • 今は、CPUの中で命令セットはCISCで飛ばして、内部は実はRISCの組み合わせをしている、という実装がほとんど。
  • Peak CPU Clocks

    • クロックを上げていくのは、とてもコストがかかるようになってきたので、コア数増やす方向に進んでる。
  • で、ぶっちゃけどう動いてるの?

  • Z80 CPU

    • 今日はコレで考える。
  • bit width?

    • レジスタやバスの幅で決まることが殆ど
  • マシン語

    • を学びたいが。。。つらいのでw
  • アセンブラ

  • register vs memory

    • CPUで実行する際には、memoryから一旦registerに持ってきて実行している。
    • コレをどう使うか?がアセンブラの醍醐味
    • Z80のレジスタは8bit。場合によって2つ合わせて16bitの命令セットとして扱うこともある。
  • Endian

    • big endian - 順番通りにレジスタに入る。ABCD -> ABCD
    • little endian - 順番がひっくり返る。 ABCD -> CDAB
  • Accumulator

    • 何かを計算するときはここを使うレジスタ
  • Status (flag) Register

    • 計算した結果や特定の命令セットの結果が反映されるflagがあるレジスタ
  • どんな命令セットがあるか。

  • 5 functions
    • Data transfer
    • Data Processing
      • Z80は足し算とshift rotateぐらいしかない
    • Test and Jump
    • Input / Output
    • Control
      • 制御コード
  • 1単位時間あたりに実行されているのは、これらの命令のどれか。

  • 引き算はどうするか

    • 2の補数をとって負の数との足し算をしていた。
  • ニーモニックとオペランド

  • まとめ

    • アセンブラ
    • 英語大事

I/O入門

  • I/Oとは

    • コンピュータで必ずしも必要ではないパート
    • なしでも計算はできる
      • とはいえ、ないと使えたものではない。
  • I/Oの基本

    • IA-32の入出力
      • I/Oポート
      • 割り込み
      • DMA
      • メモリマップドI/O
  • IOポート

    • 最も単純な入出力
    • このportに対して何かデータを送れば、(なんだかはわからないけど)その先のデバイスに送られる。
    • 逆に読み出しをするときはポートを読む
    • 基本的には8bitでのアクセス単位
    • キーボードなど。
  • 割り込み

    • 外から何らかの理由で入ってくる、作業を中断させる通知
    • キーボードを押した瞬間などに反応するときは、割り込みで発生させている。
  • I/Oがどう使われるのか?

    • 入力装置が付いているのはわかった。どう使うか?
    • 話が変態的すぎて。。。
  • その他のI/O

  • メモリマップドI/O
    • CPUの物理メモリ空間に、デバイスのメモリ空間をマッピング
      • CPUから直接デバイスのメモリ空間にデータを送れる。
  • DMA
    • プロセッサがDMAコントローラに対して要求し、データ転送をそちらに任せることができる。
    • データ転送の時間中にCPUが処理時間を食われることがない。
  • IRQ

    • 割り込みを送るための線
    • しかし物理線は15本しかない。
      • 同じ線で複数のデバイスが割り込みを入れたりする。
      • CPU側では、どのデバイスが割り込みしてきたかわからない。。。
      • デバイスドライバ側で、ISRレジスタというところに「どのデバイスが割り込んだか」の情報を記録して、それで判断する。
  • Busとは

    • 内部バス
    • 周辺回路
    • 拡張バス
  • PCIバス

    • 32bit,周波数33MHz, 帯域幅133MHz
    • パラレル転送
    • plag and play対応だったが、活線挿抜できたわけではなかった。
  • PCI-X
    • 周波数33MHz, 帯域幅1.06GHzに拡張
    • 上位互換、だがよく物理干渉して刺せなかったりした。
  • PCI Express
    • シリアル転送、複数レーンを束ねて転送可能に
    • 1レーンあたり 250MB/s (1.25GHzで、1クロックあたり2bit転送してる)
    • 4レーン 1GB/s , 16レーンで4GB/s
      • 仕様上は最大32レーン
    • 活線挿抜に対応
  • PCI Express 2.0

    • クロックを2倍(1.25GHz -> 2.5GHz)にして、レーンごとの転送速度も500MB/sに。
    • MSIサポートが必須に。
  • MSI

    • そもそもIRQ使わなくていいじゃん、と気づいた。
    • IRQを使わないで、メモリ書き込みによって割り込みを通知する。
      • ニセのメモリ書き込みをして、CPUに割り込みと認識させる。
      • CPUがいちいちISRを見なくていい。
    • 仮想化環境では、world changeの問題が発生するため、IRQでの割り込みはすごく効率が悪い。
      • コレが解消できるので、仮想環境としてはすごくいい。
  • CPUのインターコネクト

    • NUMA(非対称)とUMA(対象)
      • 今はほぼUMA
    • NUMAだと、メモリはどちらかのCPUに依存してる
      • 下手にマルチプロセッサで使うと、1プロセッサより遅い。。。ということが発生しうる。
  • QPIとHyperTransport

    • Quick Path Interconnect
    • 下手にチューニングなしだと遅くなるかも。。という点は気をつけておく。
  • まとめ

    • I/Oは必須ではないが、ないと使えないもの。
  • IOを勉強するには

    • ArduinoとかPICでやると、勉強しやすい。
    • PIC USBマイコンボードなど。
    • もっとガチな人にはBeagleBoard
      • Linux Boxを手作りで作ろう。。。なんてときに。

インターフェース入門

  • インターフェースとは

    • 2つのものの間にたって、情報をやりとりするもの。
  • ハードウェアインターフェース

    • 音響カプラ
    • X.21企画
    • RS-232C
      • 俗に言う「シリアル端子」
      • 25 pin
      • 9pinもあるが、同期通信できない。
    • DB-60(HD60)
      • Cisco独自規格
  • 端子数が上がった
    • 通信速度は上がった
    • でも、データの通信並列数は1
    • シリアル通信
  • 端子数が多いわけ

    • 直接データを送受信しない端子
    • 同じデータを流す端子
    • 使ってないものも。
      • なぜ多い?信頼性の工場のため。
    • ある程度やると、性能頭打ち。
  • 動作周波数

    • 33MHz
    • 1cycle = 0.03 nano sec
  • SDR
    • Single Data Rate
    • 1cycleあたり1bitのデータ転送
    • 1周期のup /down を1bitと見る
  • DDR

    • Double Data Rate
    • 1cycleの周期up downを別々のサイクルと見て、1cycle 2bitのデータを送る。
  • なぜ性能が頭打ちになるか?

    • 費用対効果
    • 主に、半導体性能がネックだった。
  • パラレル通信

    • データを同時送受信する。
    • IEEE 1284
      • RS-232Cと端子は同じ
      • 同時送受信 8bit
    • SCSI
      • 50pin
      • 同時送受信 8bit
    • ATA
      • 40pin
      • 16bit
    • Ultra SCSI 320
      • 2.56Gbps
  • しかし、世界はパラレルからシリアルへ。

    • なぜ。。?
    • パラレルじゃダメだから戻ってきた。
    • 半導体性能のUP
      • 動作性能UP
      • スキュー発生率UP
  • スキューとは

    • クロック同期型の回路において、異なるタイミングでデータ転送が行われてしまうこと。
    • コレを回避するためには、基板設計を考え直す必要がある。
      • ミクロン単位で配線を設計する必要がある。。
  • 今流行の端子

    • USB
      • 端子数 4 - 9
      • シリアル通信
    • IEEE 1394
      • FireWire
      • 端子数4 -9
      • シリアル通信
    • S-ATA
      • 端子数7
      • シリアル通信
    • SAS
      • Serial Attached SCSI
      • 端子数7
      • シリアル通信
    • Thunderbolt
      • 20pin
      • 非同期パラレル通信
      • 内部的にはPCI Express
    • InfiniBand
      • 4 - 48
      • シリアル通信 (1X)
      • 非同期パラレル(2X - 12X) レーンのような考え方。
    • 最近のはやりは非同期パラレル
      • 同期しないのでスキューは発生しない。

今日のまとめ

  • ハードウェアは、インフラエンジニアにとって結構重要
  • アーキテクチャ
    • 基本構造は昔から一緒
    • コンピュータの気持ちになろう。
  • CPU
    • 動作原理を知っておこう。
  • バス
    • データ転送をよく知っておくと、よりコンピュータを理解できる。
  • インターフェース

  • 気になったらどんどん自分で調べよう!

Comments