知っているようで知らないPC周辺の基本用語 (CPU,メモリ,ストレージ,RAID)
[履歴] [最終更新] (2016/04/02 04:13:04)
最近の投稿
注目の記事

概要

「CPU、メモリ、ストレージ、RAID」どれもよく耳にするPC関連の用語ですが、ちゃんと理解できているでしょうか。簡単にそれら基本用語の基本を記載します。

CPU

Central Processing Unit (中央演算装置) です。

OSから見えるCPUの個数

CPUはマザーボードにあるCPUソケットに設置します。つまり、あるPCのCPUソケット数とは物理的なCPUの個数です。CPUには一つ以上の主要計算部分 (コア) があります。コア数が2以上のCPUを特にマルチコアCPUとよびます。CPUによって一つのコアで処理できるスレッドの数が異なります。一つのコアで二つのスレッドを処理することを特にハイパースレッディングとよびます。以上より、Windowsのタスクマネージャを起動して確認できる、OSから見た仮想的なCPUの個数は以下のようになります。Unix系OSでは "/proc/cpuinfo" というテキストファイルまたは "lscpu" というコマンドで確認できます。

物理的なCPUの個数 * スレッド数
  = 物理的なCPUの個数 * コア数 * n
(ハイパースレッディング対応: n=2, 非対応: n=1)

これは、並列プログラミングで指定できる上限を調査する場合などに役立つ知識です。4コアでハイパースレッディング非対応の "Core i5 3470" というCPUを物理的一つ搭載したPCについては、以下の画像のように4つのCPUがOSからは見えています。

Uploaded Image

Uploaded Image

CPUの処理速度

CPUの処理速度に最も影響を与えるのは動作周波数です。動作周波数が高ければ、発熱は増えますが高速に動作します。また、同一CPU内で仕事をしていないコアを別のコアのクロックアップのために利用するターボブーストテクノロジーという技術に対応したCPUもあります。これによって、その間の実質的なコア数は減少しますが、ある一つのコアを動作周波数を越えるクロック数で動作させることができます。また、いわゆるメインメモリ以外にCPUに内蔵されたキャッシュメモリというものがあり、ここにCPUからよくアクセスするデータを一時的に置いておくことで、メインメモリへのアクセス回数を減らし、結果としてCPUの動作を速くするということもCPU内では行われています。このキャッシュメモリのサイズはCPU毎に異なり、処理速度に影響を与える要素の一つです。

メモリ

読取専用のROM (Read Only Memory) と、読み書きが可能なRAM (Random Access Memory) があります。RAMには様々な種類がありますが、電力を供給している限りデータを記憶できる SRAM (Static Random Access Memory) と、電力を供給していたとしても一定期間が経過するとデータを失ってしまうため定期的なリフレッシュが必要になる DRAM (Dynamic Random Access Memory) に大別できます。SRAMは高価かつ高速で、CPUのキャッシュメモリに使用されます。一方でPCの主記憶装置 (メインメモリ) には低速ですが安価で大容量であるDRAMが使用され、特にDRAMの中でも "DDR3" (DDR3 SDRAM; Double-Data-Rate3 Synchronous DRAM) というものが主流です。

メインメモリのデータ転送幅

メインメモリはDIMM (Dual Inline Memory Module; ディム) という一枚の基板モジュールにまとめられた状態で、マザーボードに挿します。DIMMには、複数のDRAMチップが搭載されており、その枚数によってどれだけのデータ量を並列してCPUが取り出すことができるか、という "ランク" が決まります。64bitのデータに同時アクセスできるDIMMをシングルランク (1R) とよび、128bitのデュアルランク (2R) と256bitのクアッドランク (4R) をまとめてマルチランクとよびます。

シングルランクのDIMM上のDRAMチップの構成としては、8bitのDRAMチップを8枚 ("1Rx8"と表記) や4bitのDRAMチップを16枚 ("1Rx4"と表記) が考えられます。デュアルランクの構成としては、8bitのDRAMチップを16枚 ("2Rx8"と表記) が考えられます。実際には、ECC (Error Correcting Code) という符号でビット反転エラー検出や自動補正を行うDIMMが多く、上記の枚数に1-2枚追加でDRAMチップが搭載されています。

メインメモリとCPU間のデータ転送経路の数

CPUがDIMMにアクセスする際の経路をチャネルとよびます。CPUによってはマルチチャネルに対応しており、複数の経路で並列アクセスができます。チャネル数が2つ, 3つ, 4つの場合のことをそれぞれダブルチャネル、トリプルチャネル、クアッドチャネルとよび、マザーボードにはCPU一つにつきDIMMを2,3,4枚挿す必要があります。総データ転送幅は、各チャネルで64bit (1R) だとすると、単純に128,192,256bitとなります。なお、これはDIMM側の機能ではなくCPUおよびマザーボードの機能であることに注意してください。

メインメモリとCPU間のデータ転送速度 (パフォーマンス)

以上のことから、メインメモリとCPU間のデータ転送速度を向上させるためには、ランクの高いDIMMと、マルチチャネルに対応したCPUおよびマザーボードを用いればよいということになります。その場合のデータ転送幅とDIMMの動作周波数で、一秒あたりのデータ転送量が決定します。しかしながら、CPU側のメモリコントローラには一度に扱えるデータ転送幅に制限があり、例えば4Rの制限のあるメモリコントローラに対しては、4RのDIMMを一枚挿すか、1RのDIMMを四枚挿すかといった選択肢しかなく、前者の場合は空きスロットにDIMMを挿すことができません。

DIMMの表記の例

DDR3-1600

動作周波数が1600MHzで、1Rあたりのデータ転送速度は「1600MHz * 64bit = 12.8GB/s」となります。

4GB 2Rx8 PC3L-10600R

4GBの容量。デュアルランク(2R)。DRAMチップは8bit。PC3はDRAM種別ではDDR3に対応。Lは低電圧で動作することを意味。10600は10.6GB/sということ。逆算すると、「10.6GB/s = 667MHz * 64bit * 2ランク」となります。

ストレージ

PCのストレージには「PC内部の記憶領域」と「PC外部ストレージ」があり、後者には以下のようなものがあります。

  • NAS (Network Attached Storage): ネットワーク経由でアクセスするストレージで、NFS,SMB/CIFS,AFPといったプロトコルで通信
  • SAN (Storage Area Network): ストレージ用に独立して形成されたネットワーク。既存のネットワークに投入されるNASよりも大掛かり。ネットワーク通信プロトコルの違いによって「FC-SAN: Fibre Channel SAN」と「IP-SAN: Internet Protocol SAN」があります
  • DAS (Direct Attached Storage): いわゆる外付けハードディスクのイメージ。NASやSANに対応させたい場合に使用する用語

いずれのストレージの場合についても、最終的にデータを記憶する媒体が存在しています。有名なものには以下のようなものがあります。

  • SATA (Serial ATA) ハードディスク: 家庭用で安価
  • SSD (Solid State Drive): 家庭用にしては高価・高速・低電力
  • SAS (Serial Attached SCSI) ハードディスク: 無停止のサーバ用。高性能で高速
  • FC (Fibre Channel) ハードディスク: SANストレージなどで使用。高信頼で非常に高速

RAID

RAID (Redundant Arrays of Inexpensive/Independent Disks) は複数のハードディスクを組合せて、パフォーマンス向上または耐障害性の向上を図った仮想的な一台のハードディスクです。ハードディスクの組み合わせ方法には、レベル0-6の基本7種類と、レベル0とN (N=1,5,6) を組み合わせた応用3種類があります。

RAID 0

ハードディスクを並列設置し同時にアクセスできるようにすることで、仮想的にディスクI/O性能を上げます。冗長構成を取っておらず、ディスク領域に無駄は発生しない一方で、耐障害性は全くありません。RAID 0のことをストライピングともよびます。一時記憶領域などで使用されます。

RAID 1

同一のデータを複数のハードディスクに書き込み、データの二重化 (ミラーリング) を行うことで、耐障害性を高めます。ディスク領域は半分になってしまいます。OSのパーティションなどで使用されます。

RAID 2,3,4

(論文などで提唱はされた方式ですが、実際の現場ではあまり使用されていません)

RAID 5

RAID 0のようにハードディスクを並列設置し同時にアクセスできるようにします。違いは、データの書き込み時にパリティ情報も書き込むことです。このパリティ情報の書き込みが発生するため、書き込み時にはRAID 0ほどに性能は向上しませんが、読み出し時には並列処理が可能であり性能が向上します。また、並列設置しているので保存容量も仮想的に増えます。更に、パリティ情報のため耐障害性もそれなりにあります。ファイルサーバやログ保存などの用途で使用されます。

RAID 6

RAID 5とほぼ同じ仕組みです。唯一の違いはパリティ情報を二種類保存することです。そのためRAID5よりも耐障害性が高くなっています。なお、用途はRAID 5と同等です。

RAID 10

「RAID 1でミラーリングした組み合わせ」をRAID 0のように並列設置したものです。耐障害性 (RAID 1) とディスクI/O性能 (RAID 0) の両方を満たしますがコストもかかります。データベースなどで使用されます。

RAID 50,60

「RAID 5,6で並列設置した組み合わせ」をRAID 0のように並列設置したものです。保存容量の確保およびそれなりの耐障害性 (RAID 5,6) とディスクI/O性能 (RAID 0) の両方を満たします。ファイルサーバやログ保存で使用されます。

関連ページ
    概要 「何とかstat」というコマンドがたくさんあります。よく使うものの基本的な使用方法をまとめます。 iostat (I/Oデバイスの統計情報) システムが認識する各デバイスのI/Oの使用状況を調査するコマンドです。補足情報としてCPUの使用状況「%user, %system, %iowait, %idle」も合わせて出力されます。それらの意味については
    メモリ使用量を表示 (free) 既定ではキロバイト単位で表示されます。オプション "-b", "-k", "-m", "-g" を付与して実行するとそれぞれバイト、キロ、メガ、ギガで表示されます。 free total used free shared buffers cached Mem: 510824
    概要 C 言語から Linux OS の各システムコールを利用する場合を想定して、関連情報をまとめます。 システムコールについて プログラムを実行するとき、CPU のレジスタの一つであるプログラムカウンタは、実行するプログラムが展開されたメモリ上のアドレスを指します。CPU が実行するプログラムには、OS のカーネルと、カーネルが管理するユーザプログラムがあります。CPU のプログラムカウン
    コマンドライン引数 #include <iostream> using namespace std; int main(int argc, char* argv[]) { for (int i = 0; i < argc; ++i) { cout << argv[i] << endl; } return 0; }
    概要 POCO (POrtable COmponents) は Boost と同様に有用な C++ のクラスライブラリです。簡単に使用方法を記載します。Boost Software License で配布されていますが Boost への明示的な依存はなく単体で動作します。 A Guided Tour Of The POCO C++ Libraries