「CPU、メモリ、ストレージ、RAID」どれもよく耳にするPC関連の用語ですが、ちゃんと理解できているでしょうか。簡単にそれら基本用語の基本を記載します。
Central Processing Unit (中央演算装置) です。
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からは見えています。
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がDIMMにアクセスする際の経路をチャネルとよびます。CPUによってはマルチチャネルに対応しており、複数の経路で並列アクセスができます。チャネル数が2つ, 3つ, 4つの場合のことをそれぞれダブルチャネル、トリプルチャネル、クアッドチャネルとよび、マザーボードにはCPU一つにつきDIMMを2,3,4枚挿す必要があります。総データ転送幅は、各チャネルで64bit (1R) だとすると、単純に128,192,256bitとなります。なお、これはDIMM側の機能ではなくCPUおよびマザーボードの機能であることに注意してください。
以上のことから、メインメモリとCPU間のデータ転送速度を向上させるためには、ランクの高いDIMMと、マルチチャネルに対応したCPUおよびマザーボードを用いればよいということになります。その場合のデータ転送幅とDIMMの動作周波数で、一秒あたりのデータ転送量が決定します。しかしながら、CPU側のメモリコントローラには一度に扱えるデータ転送幅に制限があり、例えば4Rの制限のあるメモリコントローラに対しては、4RのDIMMを一枚挿すか、1Rの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外部ストレージ」があり、後者には以下のようなものがあります。
いずれのストレージの場合についても、最終的にデータを記憶する媒体が存在しています。有名なものには以下のようなものがあります。
RAID (Redundant Arrays of Inexpensive/Independent Disks) は複数のハードディスクを組合せて、パフォーマンス向上または耐障害性の向上を図った仮想的な一台のハードディスクです。ハードディスクの組み合わせ方法には、レベル0-6の基本7種類と、レベル0とN (N=1,5,6) を組み合わせた応用3種類があります。
ハードディスクを並列設置し同時にアクセスできるようにすることで、仮想的にディスクI/O性能を上げます。冗長構成を取っておらず、ディスク領域に無駄は発生しない一方で、耐障害性は全くありません。RAID 0のことをストライピングともよびます。一時記憶領域などで使用されます。
同一のデータを複数のハードディスクに書き込み、データの二重化 (ミラーリング) を行うことで、耐障害性を高めます。ディスク領域は半分になってしまいます。OSのパーティションなどで使用されます。
(論文などで提唱はされた方式ですが、実際の現場ではあまり使用されていません)
RAID 0のようにハードディスクを並列設置し同時にアクセスできるようにします。違いは、データの書き込み時にパリティ情報も書き込むことです。このパリティ情報の書き込みが発生するため、書き込み時にはRAID 0ほどに性能は向上しませんが、読み出し時には並列処理が可能であり性能が向上します。また、並列設置しているので保存容量も仮想的に増えます。更に、パリティ情報のため耐障害性もそれなりにあります。ファイルサーバやログ保存などの用途で使用されます。
RAID 5とほぼ同じ仕組みです。唯一の違いはパリティ情報を二種類保存することです。そのためRAID5よりも耐障害性が高くなっています。なお、用途はRAID 5と同等です。
「RAID 1でミラーリングした組み合わせ」をRAID 0のように並列設置したものです。耐障害性 (RAID 1) とディスクI/O性能 (RAID 0) の両方を満たしますがコストもかかります。データベースなどで使用されます。
「RAID 5,6で並列設置した組み合わせ」をRAID 0のように並列設置したものです。保存容量の確保およびそれなりの耐障害性 (RAID 5,6) とディスクI/O性能 (RAID 0) の両方を満たします。ファイルサーバやログ保存で使用されます。