Hatena::ブログ(Diary)

adsaria mood このページをアンテナに追加 RSSフィード

2012-07-25 HDDの基本性能を測定してみた

HDDの基本性能を測定してみた

OSインストールの前に時間的な余裕があるのでHDDの基本性能を測定してみた。

HDD初期不良チェックのために、全セクタの読み込み・書き出しテストを行った。Linuxでは次のようなコマンド簡単に実効できる。

# dd if=/dev/sdc of=/dev/null bs=1G
2794+1 records in
2794+1 records out
3000592982016 bytes (3.0 TB) copied, 17922.9 s, 167 MB/s

# dd if=/dev/zero of=/dev/sdc bs=1G
dd: writing `/dev/sda': No space left on device
2794+1 records in
2793+1 records out
3000592982016 bytes (3.0 TB) copied, 18065.2 s, 166 MB/s

これはSeagate ST3000DM001の例だが、これを見ると3TBの読み書きには18000秒(今回はきっかり5時間!)かかり、“平均的な”読み書きの速度は166MB/sということがわかる。

このデータを取っておくだけでもイメージバックアップの際の作業時間の見積りに役立つ。しかし、ここで疑問が出てくる。HDDは外側と内側でデータ伝送速度時間が変わってくる(⇒ハードディスク・ドライブの内部構造)。そこで、どの様に変わるのか、10分毎にddコマンドの進捗状況を表示させてみた。

# dd if=/dev/zero of=/dev/sdc bs=1G
118+0 records in
117+0 records out
125627793408 bytes (126 GB) copied, 603.364 s, 208 MB/s

237+0 records in
236+0 records out
253403070464 bytes (253 GB) copied, 1201.76 s, 211 MB/s

356+0 records in
355+0 records out
381178347520 bytes (381 GB) copied, 1803.86 s, 211 MB/s

	:省略

2686+0 records in
2685+0 records out
2882996797440 bytes (2.9 TB) copied, 16809.3 s, 172 MB/s

2746+0 records in
2745+0 records out
2947421306880 bytes (2.9 TB) copied, 17406.1 s, 169 MB/s

2794+1 records in
2794+1 records out
3000592982016 bytes (3.0 TB) copied, 17922.9 s, 167 MB/s

HDDの最外周は200MB/sを超えている。ST3000DM001のデータ・シートでは“最大データ転送速度”は210MB/sとなっているのでほぼスペックどおりの性能が出ていることになる。また、データ・シートでは“平均データ転送速度”は156MB/sとなっているので計測した166MB/sは6パーセント程度の誤差に収まっている。

でも、このデータを見ていると更に疑問が出てくる。最高は210MB/s、平均は166MB/s、では最低はどれ位? ということで、HDDを55のエリアに分けて、各エリアで50GBのデータ読み書きをしてみた。

dd if=/dev/sdc of=/dev/null bs=1073741824 count=50 skip=0
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 263.65 s, 204 MB/s

dd if=/dev/zero of=/dev/sdc bs=1073741824 count=50 seek=0 conv=fsync
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 267.476 s, 201 MB/s



dd if=/dev/sdc of=/dev/null bs=1073741824 count=50 skip=50
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 251.751 s, 213 MB/s

dd if=/dev/zero of=/dev/sdc bs=1073741824 count=50 seek=50 conv=fsync
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 255.757 s, 210 MB/s

	:省略

dd if=/dev/sdc of=/dev/null bs=1073741824 count=50 skip=2692
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 497.485 s, 108 MB/s

dd if=/dev/zero of=/dev/sdc bs=1073741824 count=50 seek=2692 conv=fsync
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 504.389 s, 106 MB/s



dd if=/dev/sdc of=/dev/null bs=1073741824 count=50 skip=2743
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 530.178 s, 101 MB/s

dd if=/dev/zero of=/dev/sdc bs=1073741824 count=50 seek=2743 conv=fsync
50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 536.856 s, 100 MB/s

どうもHDDの内側における最低転送速度は100MB/sとなる。外側の最速値の約半分の速度しか出ないことになる。(平均が156MB/sであれば、こんなものだろう。もっとも線形に変化している訳ではないが。)

これをグラフににしたのが次の画像である:

f:id:adsaria:20120725132518p:image:w640

こうしたデータを取っておくことで、パーティション計画などにも役立てることができる。転送速度を基準にパーティションを切る境界を決め、外側の速い方は仮想ディスクのデータストア用、内側の遅い方は文書ファイルやアーカイブ用などといった具合に。(今回もこのデータを元に全体の10%の外側部分とそれ以外の部分でパーティションを分けることにした。)I

ついでにバックアップ用として買っておいたHGSTのHDS723030ALA640(通称 0S03088)の測定値は次のようになる。

f:id:adsaria:20120725132859p:image:w640

両方の測定結果を1つのグラフにまとめると次のようになる。

f:id:adsaria:20120725133158p:image:w640

さて、こうやって見るとやたら速いように見えるSeagate ST3000DM001だが、速いのは上の計測で行ったようなシーケンシャルアクセスの時だけで、ランダムアクセスになると余り高いスコアにならないようだ(⇒ Seagate Barracuda 3TB Review)。通常のPCで使う環境ではむしろST3000DM001は遅くなる可能性が高い。シーケンシャル・アクセスが速いのは単に円盤(プラッタ)の記録密度が高いからだと考える。プラッタ1枚辺りの容量はSeagate ST3000DM00が1TB、HGST HDS723030ALA640では600GBと半分、とまでは行かないが結構異なる。(Western DigitalのWD30EZRXは750GB。)シーケンシャルアクセスは記録密度の高い方が有利だが、ランダムアクセスはヘッド制御など、その他の要因が影響するから、各社の特徴がでてくるようだ。

あとインタフェース速度について。Seagate ST3000DM001の最高時の210MB/sはSATAの速度に換算すれば2.1Gbpsである。このHDDは一応、6.0GbpsのSATA I/Fを持っているが、そんな速度は必要ないことがわかる。3.0GbpsのSATAポートに接続しても十分最高性能を出せる。まぁ、製品として6.0Gbpsに対応していないと、比較表などで並べられた時に見劣りするから仕方ないのだろうし、SATA I/Fチップも6.0Gbps対応になっているだろうから、選択の余地はないのかも知れないが。今回使うMoBoASUS P8H77-Iには2つの6.0Gbps SATAポートと4つの3.0Gbps SATAポートがある。必然、ST3000DM001は3.0Gbpsポートの方に接続して、6.0Gbpsポートの方はSDDに接続する。実は上の測定も6.0Gbpsポートではなく3.0Gbpsポートを使って行った結果だ。

じつは、5年前程にノートPCを使った簡単な実験をしていた(⇒HDDの外側と内側)。当時はカタログスペック値150MB/sの2.5インチHDDに対して35MB/s程度の性能しか測定できなかったと書いた。しかし、改めて読んでみると、150MB/sと言うのはどうもインタフェース転送速度のSATA 1.5Gbpsを指しているようだ。実際のデータ伝送速度は5,400rpm、63セクタ/トラック@Zone0、16論理ヘッダから計算して371Mbpsで8bit/10bitエンコードとして37MB/s程度ではないだろうか。実測で35MB/s出ればいい方だろう。各社、HDDの性能に関するデータの記述はまちまちで、インタフェース速度をあたかもアクセス速度の様に表現したり、外周部の最高速度だけを表示したり、色々だが、Seagateのように平均伝送速度を明記しているのは良心的だと思う。

2012-07-21 自作PCの構築手順

自作PCの構築手順

自作PCの構築手順をまとめておく。パーツの初期不良(=購入時点での不良品、DOA、Dead On Arrival)が無いかを確かめるために、1つ1つ手順を確認しながら組み立てて行く必要があり、無計画にパーツを買い集めると後で後悔することになる。

  • 筐体と電源ユニットを買っておく

筐体は納期が長い物もあり、ショップで衝動買いするのでなければ、気に入った筐体を予め通販でオーダーして取り寄せておく。電源ユニットも初期不良が少ないパーツなので先に取り寄せておく。これらのパーツが遅れて、通電するのが遅れて、初期不良保証期間が過ぎちゃった、ということがないように。

  • メモリテスト用の起動CDやUSBを作成しておく。

電源を入れてBIOS動作の確認後、最初に行うのはメモリテストになるので別のPCを使って予めメディアを用意しておく。Linuxの場合は、LiveCDやインストールCDで立ち上げるとメモリテストを実行できるし、UbuntuなどではLiveCDで作成した起動用USBからもメモリテストを走らせることができる。私はネットワーク・ブートを使ってネットワーク経由でメモリテストを起動するので、これは省略している。

  • MoBoCPU、メモリ、CPUクーラーを買う。

これらのパーツは一気に買う。出来ればショップで相談して部品の干渉とか無いか、組合せに矛盾がないかを確認しておく。これらの部品は何かあった時のために同じショップで買い揃えておいた方がいい。場合によっては持ち込んで状況確認してもらうこともあり得る。またメモリの相性保証を付けておく方がいい。確かにMoBoとの相性もあるのだが、メモリの初期不良のためでもある。以前、メモリの初期不良に出くわし、メモリテストの結果を証拠として写真に撮ってショップに持っていったが、確認のために半日位テストしなければならず、ショップでのテストが通ってしまうと交換にはお応じられないと言われた。でも幸い、相性保証を付けていたので相性問題ということでスンナリ交換してもらった。(ただ、元のメモリは不良品ではなく、商品としてまた棚に戻されるのを見ているので、以降、そのショップではパーツは買わないことにしている。)

  • MoBoCPUCPUクーラー、メモリを取り付ける。

PCとして動作する最低限のパーツ、CPUCPUクーラー、メモリを取り付けて、パーツ相互に干渉がないか確認する。今回、CPUクーラーが大きくて、CPUクーラーを取り付けた後だと、メモリを取り付けることが出来なかった。仕方ないので、一旦、CPUクーラーを取り外してからメモリを取り付け、再度CPUクーラーを取り付けている。取り付け後の干渉はない。

  • 電源を接続して通電する。

筐体に入れる前に、新聞紙の上などにMoBoを置いて通電してみる。勿論、キーボードやディスプレも接続しておく。まず、BIOSが起動するか、BIOSの設定(CPUやメモリの認識)は正しいかを確認する。上手く起動せず原因が分からない場合は、これらのパーツを取り付けた状態でショップに持ち込み見てもらうという手もある。

また、BIOSのバージョンも確認しておこう。MoBoが新製品の場合、BIOSのバージョンは頻繁にアップするので、出来る限り最新のものにしておく。最近のBIOSはWebからUSBメモリダウンロードして、それをMoBoに挿して起動するするとアップデートできるようになっているので簡単だ。

  • 筐体にMoBo、電源を取り付け配線する。

MoBoと電源ユニットを筐体に取り付け、干渉が無いかを確認する。もっとも、この段階で干渉が見つかってもパーツを変更するしかないが。電源スイッチなどを配線し、電源ケーブルの取り回しなどを確認する。なお、これは仮取り付けということで、ネジなどは軽く締め付ける程度にしておく。DVDBLドライブを接続する場合は、これらも取り付けてみて、干渉を確認しておく。組合せによってはMoBoとドライブが当たるということもあり、ビニールテープなどで保護する必要もある。

  • 電源を入れて、メモリテストを実行する。

MoBoが裸の状態で長時間通電するのは危険なので、筐体に入れてからメモリテストを実施する。私はMemtest86+を使っている。プログラムを起動して、メモリの認識や設定に間違いないかを確認して、1日程度テストプログラムを走らせておく(今回は16GBのメモリで1回約3時間かかる)。以前のメモリの初期不良ではこの段階で、特定のアドレスが書き込みエラーとなっていた(書き込んだデータと読み出したデータが合わないビットがあった)。このテストをやらずに行き成りOSを動かしても、不具合の原因の特定が困難だったり、保障期間が過ぎてから分かったりすることになってしまうので、じっくりとテストしておきたい。

今回の場合はこんな感じ。

      Memtest86+ v4.20
Intel Core Gen2 2500 MHz
L1 Cache:   32K  83335 MB/s
L2 Cache:  256K  37879 MB/s
L3 Cache: 8192K  28409 MB/s
Memory  :   16G  17482 MB/s
IMC:         Intel(R) Core(TM) i7-3770T CPU @ 2.50GHz  / BCLK : 100 MHz
Settings: RAM : 800 MHz (DDR3-1600) / CAS : 11-11-11-28  / Dual Channel

WallTime    Cached  RsvdMem   MemMap   Cache  ECC  Test  Pass  Errors ECC Errs
---------   ------  -------  --------  -----  ---  ----  ----  ------ --------
 15:00:00      16G    2780K    e820      on   off   std     5       0
------------------------------------------------------------------------------
  • HDDを買って来てテストする。

メモリのテストが終わってからHDDを買ってきて取り付ける。私の場合は、Linux(具体的にはUbuntu)をLiveCDなどで起動してHDDのテストを行う。Live CDに不慣れな場合やWindows環境しかない場合は、一時的にHDDを他の稼働中のPCに接続して試験するのが簡単だろう。なお、UbuntuのLive CDを使う場合は起動後、smartユーティリティをインストールしておく。

$ sudo -s
# apt-get install smartmontools

OSインストールする前にHDDを徹底的にテストしておく。最初にやらなければならないは、S.M.A.R.Tの情報の読み出しとSMARTのロング・セルフテストである。まず、SMARTの最初の情報を取得しておく。

# smartctl -a /dev/sda > smart.log
# cat smart.log
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-26-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     ST3000DM001-9YN166
Serial Number:    W1FXXXXX
LU WWN Device Id: 5 abcdef 012345678
Firmware Version: CC4B
User Capacity:    3,000,592,982,016 bytes [3.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 4
Local Time is:    Thu Jul 21 08:53:33 2012 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

	:省略

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   100   100   006    Pre-fail  Always       -       15776
  3 Spin_Up_Time            0x0003   094   094   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       6
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   100   253   030    Pre-fail  Always       -       36
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       0
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       6
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   253   000    Old_age   Always       -       0
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   067   067   045    Old_age   Always       -       33 (Min/Max 31/33)
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       5
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       6
194 Temperature_Celsius     0x0022   033   040   000    Old_age   Always       -       33 (0 27 0 0)
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   253   000    Old_age   Always       -       0
240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       47098611367936
241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       0
242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       1616

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]


SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

この状態で既にErrorが発生していたり、異常な値があれば、交換してもらう。なお、上の例では“Head_Flying_Hours”が非常に大きな値になっているが、これは“生値”でSeagateの場合には実際のヘッドの稼働時間以外の情報も上位バイトに含まれており、“2AD6 0000 0000”を10進数で表しているので、下位バイトはゼロであり、実際に稼働時間はまだゼロ時間ということで正常値だ。このように“生値”はメーカーによって値が違うので、この値が大きいからと言って騒ぐと恥ずかしいことになってしまう。最悪値(WORST)が閾値(THRESH)以下になっていなければ一応はOK。

ここで、ファームのバージョンも確認しておく。今回買ったSeagateHDDはメーカーのホームページに最新ファームが載っている。もし、購入したHDDが最新ファームでなければ、直ぐに最新ファームに変更する。上の例は“CC4B”で最新ファームは“CC4H”だったので、このあと直ぐにファームを書き換えた。(しかし、IBM/日立や東芝といったHDDを使って来た私としてはユーザによるHDDファームアップなんて信じられない話だが。)SeagateのST3000DM001は海外ではトラブルが多いようなので、速攻で最新ファームに上げておいた。

SMARTの初期値を確認したら次にSMARTのロング・セルフテストを実施する。

# smartctl -t long /dev/sda

3TBのHDDで約5時間かかる。気長に待とう。(セルフテスト中にHDDを使うこともできるがセルフテストを少しでも早く終わらせるためには、無負荷の状態で実行する方がいい。)なお、セルフテストは終わっても何もメッセージを出してくれないので、適当な間隔で“smartctl -a”で進行状況と結果を確認する。

# smartctl -a /dev/sda
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-26-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     ST3000DM001-9YN166
Serial Number:    W1FXXXXX
LU WWN Device Id: 5 abcdef 012345678
Firmware Version: CC4H

	:省略

Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.

	:省略

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%         5         -

	:省略

もし、ここでエラーが記録されたら直ぐに交換してもらおう。

SMARTのセルフテストがパスしたら、次に念のためOSからHDDの全セクタの読み出しと書き込みを実行する。

# dd if=/dev/sda of=/dev/null bs=1G && dd if=/dev/zero of=/dev/sda bs=1G

HDDにもよるが読み出しと書き込みを合わせて10時間程度掛かるので、セルフテストも含めると1日作業となる。

なお、この試験を実行する前にHDDの内容を見てみたが、SeagateのST3000DM001では最初の10GBは“ゼロ”で埋まっていたが、それ以降はランダムぽいデータが入っていた。最初は“中古品”を売りつけられたのか、と思ったがSMARTの情報を見る限りはその形跡はない。どうも、出荷検査を最初の10GBしかやっていないのではないか、と思われる。日立のHDDは新品でも頭の天辺から足のつま先まで綺麗に“ゼロ”になっているのだが....。やはり、その辺が品質にも表れるのだろう。

余談だが、HDDはメカニカルな構造を持っているので初期テストはしっかりやっておいた方が良いが、SSDは別だ。電子回路だけで構成されるSSDは精々SMARTの確認程度で良いだろう。逆に全セクタの書き込みテストなどは厳禁だ。

ここまでメモリ、HDDをテストしておけば初期不良でトラブルになる可能性は極めて少なくなるので、配線を再確認しつつ、ネジを増し締めしてハードウェアとしては完成となる。あとはいつもの通りOSインストールとなる。

2012-07-20 新サーバの構成

サーバの構成

CPUIntel Core i7 3770T 2.6GHz
Memory16GB DDR3 1600
MoBoASUS P8H77-I
HDDSeagate ST3000DM001 (3TB) x2 (Software RAID1 3TB)
 Intel SSDSC2CT060A3 (60GB)
OSUbuntu 12.04 LTS server amd64
ChassisLIAN-LI PC-Q25B
PSU玄人志向 KRPW-PT500W

CPU

瞬間的なTurbo Boostを別にすれば2.6GHzで若干は非力だが、他の複数のPCやデバイスに対するファイルサーバNFS/CIFS)、ディスクサーバiSCSI)が主な役割なので十分だろう。(スレッド単位で見ればIO待ちが多くなるので)単一コアの性能よりは複数マルチスレッドによる負荷分散を目指す。また常時稼働という性質から消費電力を抑えたいので、結論としてはCore i7 3770Tとなる。

Memory:

時価で安いものということでCentury製のメモリとなった。CAS Latencyが11と若干遅いが、どちらかと言えばメモリはキャッシュとしての役割で、がんがんメモリ操作をするような演算はしないので、これでOK。

MoBo

Mother Boardはコンパクトに組み上げるということでmini-ITXサイズのASUS P8H77-Iというボードを使う。前回のサーバASUSのボードだったが、別にASUSファンということではない。P8H77-IはSATAインタフェースを6つ持っている。つまり、拡張ボード無しで最大で6台のHDDを接続できる。ファイルサーバにはもってこいのMoBoである。PCIeスロットが1つあるのでチーミング用のGiga NICを挿す予定。

HDD

HDDIBM!(前日立、現WD?)と決めているのだが、今回は価格重視でSeagateのST3000DM001とする。海外のフォーラムなど見ると使用してしばらくするとエラーを起こしたり認識不能となる不具合が結構多い様だが、日本では異音がする以外は殆んど話題になっていないようだ。RAID1構成で組むので、若干品質が悪いのは我慢しよう。

http://article.gmane.org/gmane.linux.raid/39284

http://forums.seagate.com/t5/Barracuda-XT-Barracuda-Barracuda/ANNOUNCEMENT-New-firmware-update-for-Barracuda-1TB-platter/td-p/162362

(元々RAIDの起源は、民生用の安価なHDDを使ってメインフレームのディスクシステムと同等の品質と容量を確保しようというところから来ている。つまり品質の悪いHDDを組み合わせてダウンタイムの少ないシステムを構成しようというのだからST3000DM001でOK。)RAIDとは別にバックアップ用にもう1台必要なので、そちらはHGSTにしようと思う。

なお、新サーバではファイル共有用の大容量HDDLinuxroot FSのHDDは分けることにした。ルート・ファイルシステムは、適宜バックアップを取っていればRAID1で強化する必然性もないし、管理も楽になる。ルート・ファイルシステムを格納するのはSSDにして消費電力を抑えようと思う。GUIを含まないサーバ用のルート・ファイルシステムであれば8GBもあればお釣りが来るが、今時のSSDでそんな容量は無い。そこで、60GBのIntel SSDSC2CT060A3を使うことにした。60GBでも大きいので30GBのパーティションに分けて使う(残りの30GBは使わずにSDDの延命用にリザーブしておく)。

OS

OSLinuxをベースにしようと思うが、どれを使うか。現サーバUbuntu 8.04を使っている。勝手知ったるUbunuが第一候補だが、海外のフォーラムを見ると、最新の12.04はPCが固まる(Perfect Freeze)らしく、マウスキーボードも反応がなくなるようだ。

https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/993187

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/999910

ただ、調べて行くとUbuntuに限ったことではなくLinux 3.X系の問題らしい。サーバ用途で多く使われているOSLinuxで信じられないことだが、どうも事実のようだ。安定して動かすと言えばCentOSになるが、最新の6.3で採用しているカーネルは2.6.32であり、SSDに対するTrimコマンドをサポートしているのは残念ながら2.6.33からなので、今回は使えない。Fedora人柱要素が強い上にサポート期間も短いので、長期で利用するには避けたい。

そうなるとやはりUbuntuが良いのだが、カーネルのバックポート・パッチが出るまで試験的に運用するしかなさそうだ。

Chassis:

筐体はLIAN-LI PC-Q25Bにしてみる。小型の筐体ながらホットスワップ3.5インチベイを5台分持ちファイルサーバ用としてはうってつけだ。更に筐体底部にHDDを3台程取付けられる。ここにSSDを設置することにする。筐体前面は電源ボタン以外は何もない。DVD/BLドライブもUSBコネクタも無い。DVD/BLドライブは必要ないので要らない(Linuxの場合、ISOファイルで入手すれば、マウントして使えるので)。USBに関してはUSB 3.0用のハブをそばに設置して置けば問題ないだろう。吸気口が少なく冷却が気になるが、CPUGPUをガンガン使う訳でもないので大丈夫だろうと踏んでいる。

デザイン的には非常にスッキリしていて気に入っている。

PSU:

電源ユニットには玄人志向のKRPW-PT500Wを使う。これを採用した理由は2つ。80PLUS PLATINUMの高効率性と奥行きが125mmと他の電源ユニットに比べてコンパクトであること。電源の効率性は低消費電力には結構効いてくる。ただ、今回の構成ではピーク時でも150W行くか行かないかなので、500Wだとオーバースペック気味である。電源は定格の半分程度の消費電力の時に最も効率が良く、それ以下だと効率が下がる傾向にあるので、本来であれば250W〜300Wの電源が理想的だ。しかし、300Wで80PLUS PLATINUMの製品がなく、玄人志向ホームページによれば負荷20%でも90%の効率がでるようなので、これにした。

また、LIAN-LIの筐体はコンパクトなので、通常の140mmの奥行の電源ユニットだと配線の取り回しが結構大変そうだ。ここで15mmの余裕があるのは非常に嬉しい。


以上のような構成でパーツを集めてみる。

2012-07-19 サーバを新しくしようと思う

サーバを新しくしようと思う

暫く家を空けていたのでブログもすっかりご無沙汰していたが久しぶりに再開しようと思う。というのも、改めて我が家のサーバを構築しようと思っているので、構築過程のメモ書きが必要になったからだ。

前回サーバを構築したのは2007年12月だから、もう4年半以上経っている。超安定稼働していてるのでサーバを新しくしようという動機がなかった。前回はVMware仮想マシンを動かすエンジンという機能を主軸としたため、複数の仮想ディスクを格納することを考慮して2TB(1TB×3によるRAID5)を搭載した。そのお蔭もあってHDDの容量も十分足りていたのだが、昨今、動画品質がフル・ハイビジョンになり、録画のファイルサイズも巨大化してきたので、そろそろ窮屈になってきた。現在、1.6TB程度を消費して、あと300GB程度の余力しか無くなってきた。サーバの構築と安定稼働までに数か月は見ておいた方が良いので、そろそろ構築を始めた方が良いだろう。

現在使っているサーバの主な仕様は以下の通り:

CPUIntel Core2 Duo E8600 3.33GHz
Memory8GB DDR2 800
MoBoASUS P5K-VM (Intel G33 Chipset)
HDDHITACHI HDT721010SLA360 (1TB) x3 (Software RAID5 2TB)
OSUbuntu 8.04 LTS server amd64
VMVMware Server 2.0

と、ザッとこんなスペックだが、さすがに4年の歳月を感じさせる。実は数か月前にCore2 DuoからCore2 Quadアップグレードしようと調べたら、既にCore2シリーズが販売中止になっていたことに初めて気づいた。

さて、どの様なサーバにしようか思案してみたのだけど、次のような概要にしようと考えている。

  • 仮想マシンエンジンの機能を分離して、大容量NASの機能をメインに考える。
  • とは言え、運用管理用に仮想マシンは必要なので、KVMを使って最小限の構成にする。
  • 他のマシンはディスクレスにしたいので、NFS/iSCSIによるブート機能を提供する。
  • OSは管理が簡単なLinuxを使う。管理はリモート(別室)からCLIしか使わないのでLinuxの方が簡単。それにGUI使わないのであればLinuxの方が圧倒的に軽い。
  • 前回と同様に消費電力を抑えた構成とする。
  • RAIDはSoftware Raid1として3TB以上の実用量を確保する。

という感じだ。

本当は、仮想マシンエンジンとしても使いたかったのだけど、使おうとしているVMwareが既にVMkernl専用ハイパーバイザしか出していないので、前回のようにLinuxの上に仮想環境を構築することはできない。そこで、仕方なく仮想マシン・エンジンは別のマシンとして独立させ、このサーバは主にストレージの提供、ネットワーク管理(ネームサーバDHCPサーバ)機能、そしてその統合機能として他のマシンへのネットブート機能の提供をメインとして考える。

CPU

ファイルサーバ機能だけであればCeleron程度のものでもよいのだが、複数のディスクレスに対してサーバ機能を提供するとなると、そこそこのネットワークトラフィックをこなして、更にHDDとのIOもマルチプロセススレッドによるアクセスとなる。また、小規模だがKVMを使って仮想マシンを内部に持たせ、外出先からのアクセスサーバWindows XPによる家事手伝いマシンを動かす予定。すなわち各スレッドにはそれ程の性能を必要としないが、スレッドの数が多い方が良いことになる。となるとCore i7によるハイパースレッディング 8Coreだろか。消費電力を考えれば3770Tということになる。

メモリ:

ファイルサーバとして使うのであれば16GBにしておこう。これらのメインメモリHDDの大容量2次キャッシュ効果が期待できる。OSの先読みや遅延書き込みによりメインメモリバッファとして利用できる。(ただし、遅延ん書き込みは突然のサーバのダウンによってデータが消失する可能性があるので注意が必要。でも、家の中でトランザクションするわけではないので、余り気にしない。)それに、今は16GBでも1万円そこそこで買えてしまう。数千円をケチって8GBで我慢する必要もない。

ストレージ構成:

今回はSoftware RAID1にする。前回はHDDの利用効率を考えてRAID5にしてしまったが、これが遅い。書き込み時にパリティを生成したりするオーバーヘッドがあるので遅くなる。RAIDカードを使う方法もあるが、安物では高性能CPUを使ったソフトRAIDよりも遅くなってしまう上に、障害時の普及に結構制限があったりする。実際に使いものになるのは数万円のクラスになるので、HDDが数台買えてしまう。だったら、速度低下が殆んどないソフトRAID1でOKということになる。

RAID10で6TBのファイルシステムも考えてみたがやめた。RAIDと言えども内容が壊れない保証はない。複数のHDDでストライピングして大容量化した場合、RAID自身が壊れた場合、全ての内容が読み出せなくなる可能性がある。そうした被害を局所化するためにも1ボリュームで大容量化するのではなく、ボリューム毎にマウントポイントを変えておく。それに個人ユースで1ファイルで3TBを超えることは先ず有り得ない。

ネットワーク

ネットワークはギガビット2つによるチーミングにより帯域と可用性を確保する。これでネットワークボトルネックになることは、まず無いと思う。

消費電力:

昨今の省エネトレンドと、今後の電気料の値上げを考えると、出来る限り電気は喰わない方が良い。前回はCPUに低消費電力のE8600を採用したが、当時の技術ではそれでも65Wで、HDDを3台搭載していので、システムでは90W程度だったと記憶している。今回は、通用時(低負荷時)で50W以下を目指したい。


さて、こんな感じで構成を考えてみよう。

2011-06-30 マルチタッチの特許

マルチタッチの特許

閑話。

先週、Appleにマルチタッチの特許が下りた。AppleファンのページやつぶやきではAndroidは終わったと狂喜乱舞の様相だ。でも、本当にそうなるのだろうか。

私は、今回の特許取得は確かにAppleにとって大きなアドバンテージだと考える。しかし、これは“一本”ではなく“技あり”程度のものではないだろうか。実際のビジネスを考えれば、携帯端末という製品を具現化するにはApple自身も他社の特許を必要とするところも多い。携帯端末の分野では競合しても、別の分野では依存しているケースもあるだろう。そうなると特許のクロスライセンスという形なってゆくのではないだろうか。

また、Appleが基本的な特許を出願中であることは以前から報道されていた。それを承知で多くの一流メーカーが後先を考えずにAndroidを採用してきたとは思えない。当然、特許を取得した場合の対応策も考えた上で採用してきただろう。でなければAndroidなど使えない。既に多くのユーザを抱えるキャリアやメーカーが「我社は今日でAndroid製品は止めます」とは言えない。無効申請を出す企業も出てくるだろう。

歴史的に見てもIBMXeroxなどは多くの基本特許を持ちながらも、それに対抗する競合企業があり、それら競合も市場の拡大と共に成長してきている。それにこの場合、Apple対その他企業の連合体、という構図になっているのも面白い。

まぁ、私としてはAndroidでもiOSでもどちらでも構わない派だし、別に製品を製造・販売している訳ではないのでAndroidでも構わない。

一つ言えるのは、この特許によって(他社の動向は別として)Apple自身は更に業績向上が見込めるようになったことだろう。しかし、今のところ株価の動きは冷静だ。