2012年6月13日水曜日

RAID組むとき考えたこと(1)

The new RAID
autor:boboroshi

LSI MegaRAID SAS 9280-8e というイイRAIDカードを使ったので備忘録がてらのメモです。

ぼくはこれまで、ちゃんとしたRAIDカードを多用する感じで仕事してないので、こちらが参考になりました(やっ太郎ブログ

さて、今回の構成です。

今回の構成







  • 某社の1Uサーバ

  • LSI MegaRAID SAS 9280-8e

  • 某社のSAS接続ディスクエンクロージャ(SATA 2TB X 16で、RAID6)

  • CentOS 5.4

  • いわゆるDAS構成

  • 用途は巨大なファイルサーバです。NFSマウントして使用します。


考えたこと


HDDの話



  • a.(平均)シーク待ち時間

  • b.(平均)回転待ち時間(サーチ時間)

  • c.転送時間


大雑把に言うと、a + b + c = 応答時間(アクセス時間) となります。
a + b = 待ち時間 ですね。
1 / 応答時間 = IOPS

となります。
下記は、基本情報技術者試験みたいな話ですが...

a.(平均)ヘッドのシーク待ち時間


読み書きのためにヘッドが移動(シーク)するのにかかる時間のことです。通常外周と内周では速度が変わるため、平均値が使われます。

b.(平均)回転待ち時間(サーチ時間)


データが磁気ヘッドの下に来るまでの平均時間なので、最小0、最大1、なので1/2してます。
サーチ時間=1/2 * 1回転の時間
1回転の時間(ミリ秒)=60秒*10^3 / 1分間の回転数

c.転送時間


転送時間=データのバイト数 / 転送速度
転送速度=1トラックのバイト数 / 1回転の時間

つまり


当然ですが、回転数が早いほうが応答時間としては短くなります。
例えば一般的な、SATA HDDの場合、5,400rpmより、7,200rpmのほうが早いということになります。

コントローラの設定の話


write policy


今回のRAIDカードのようにバッテリーバックアップ付ライトキャッシュ(BBWC)が搭載されている場合、ライトキャッシュを有効にしたほうがよいケースが多いと思います。

当然、ライトキャッシュがあっても、書き込みデータはそこからあふれるわけですが、コントローラ側の実装により、隣接領域を連続して書き込んでくれるなど、キャッシュなしの場合に比べパフォーマンスが向上することが期待されます。

キャッシュ有効化し、キャッシュに書き込みを完了した時点で完了通知を出すのをライトバック。キャッシュを使用しない(無効化している)書き込みをライトスルーといいます。

今回はライトバックの設定としました。

read policy


書き込み同様、読み取りのポリシーもいくつかあります。

Adaptive
シーケンシャルリードと想定されれば先読みする。いわゆる混合系。

Read ahead
常に先読み

No .read ahead
先読みしない

とありますが、今回はファイルサーバなので、シーケンシャルリード主体と判断してRead aheadとしました。
DBであれば、ランダムアクセス主体なので、No .read aheadか、Adaptiveのほうがよいかもしれません。

ディスクキャッシュ


ディスクにも通常キャッシュが搭載されていますが、バッテリーバックアップが無い為、マシンのクラッシュ時には消えてしまう可能性があります。そのため、エンタープライズ系のHDDはよくデフォルトでディスクキャッシュが無効化されているのですが、されていない場合は明示的に無効化する必要があります。

Cache Policy


これいまいちよくわからなかったのですが、マニュアルを見る限り、読み取り処理を行ったあと、データをリードキャッシュに格納するかの設定っぽいです。

LSIならでは?なのかな??

Direct
キャッシュされない。ただし、Read aheadで読み込んだブロックはリードキャッシュに残る(っぽい)
Cached
すべての読み取りがキャッシュされる。

とりあえず、chachedにしてみました。が、いろいろ海外のブログとか漁った感じだと、Direct I/Oでいいのかもしれません。このへん参照。

実際の設定


[bash]
#バッテリキャッシュの強制(常時ライトバック)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -CachedBadBBU -Immediate -LALL -aAll

#ライトバック設定
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -WB -Immediate -LALL -aAll

#read ahead設定
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -RA -Immediate -LALL -aAll

#ディスクキャッシュの無効化
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -DisDskCache -Immediate -LALL -aAll

#I/O Poclicyを設定(cached にしたけど、directのほうがよさげ)
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp -Cached -Immediate -LALL -aAll
[/bash]

結果こんな感じ
[bash]
/opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aAll

Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
Size : xxx TB
State : Optimal
Stripe Size : 512 KB
Number Of Drives : 16
Span Depth : 1
Default Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAhead, Cached, Write Cache OK if Bad BBU
Access Policy : Read/Write
Disk Cache Policy : Disabled
Encryption Type : None
[/bash]




MegaCli64のコマンド自体は、ネット上にコマンドリファレンスが転がっているので、それを参考にするのがよいかと思います。

区切りがいいので今回はこのへんで。
書ききれなかった「RAIDレベル」「フルストライプ書き込み」等については、次に触れたいと思います。

なお、当たり前ですが上記の記述は環境によって正しい場合と正しくない場合があります。

参考


これすばらしい本です

2012年6月1日金曜日

非対話型でパーティションを切る話

今どきのLinuxだと、fdiskというより、partedでいいですよね。
partedはいろいろ良い所がありますが、「--script(-s表記も同じ)」をつけると、非対話型モードとしてバッチ処理できるのがとても便利です。

下記の例はCentOS 5系での動作になります。
使用例
[bash]
#sdbのパーティションを表示
/sbin/parted --script /dev/sdb 'print'

#ディスクラベルの設定。2TB以上とかだと「mklabel gpt」とかにすればよいですね。
/sbin/parted --script /dev/sdb 'mklabel msdos'

#パーティションを作成します
/sbin/parted --script /dev/sdb 'mkpart primary 0 -0'

#適当なファイルシステムでフォーマットする
/sbin/mkfs.ext3 /dev/sdb1
[/bash]

実行例
[bash]
# /sbin/parted --script /dev/sdb 'mklabel msdos'
# /sbin/parted --script /dev/sdb 'mkpart primary 0 -0'
# /sbin/mkfs.ext3 /dev/sdb1
# /sbin/parted --script /dev/sdb 'print'

Model: xxx (scsi)
Disk /dev/sdb: 300GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags
1 0.51kB 300GB 300GB primary ext3

[/bash]

2012年5月29日火曜日

DELLの純正USB-Ethernetアダプタのドライバ探した話

Title Onlyなんですが。。。

共用で、DELLのXPS 13っていうノートPCを会社で買ったんですが、イーサネットのポートがなく(今時のうるとらPCってやつですね)。

別売りの、USB LANアダプタ(製造元番号 : W5R0T | パーツ番号 : 750-31067)を買ったみたいだったので、いざWindows 7から認識させようと思ったけど、認識してくれない。

デバイスマネージャからは、「DAD」ヤル気のないデバイス名が表示され「?」が付いている。。。

あんまり情報無かったのでちょっと苦労したんですが、最終的に、ASIX AX88772Aってチップを使ってるっぽかったので、チップ屋のサイトからドライバ落としてきてロードしたらちゃんと使えました。

DELLのサイトちょろーっと探したけど、それっぽいの見つけられなかったなー。

ドライバ探すの地味に大変だったので、ブログってみたよ( ー`дー´)キリッ

2012年5月1日火曜日

CentOS 6.2 + e1000eでうまくいかなかった話

環境

  • OS
    • CentOS 6.2
    • Kernel:2.6.32-220.4.2.el6.x86_64

  • H/W
    • Ethernet controller: Intel Corporation 82574L
    • 某社の鯖(特に秘す)

現象


しばらく放置してると(通信した状態で)、/var/logに、こんなんでるねん。


kernel: e1000e 0000:01:00.0: eth0: Error reading PHY register


そして通信できなくなってしまう。

CentOSのbugzillaにも似たようなのがあった。
0005614: Networking: Intel NIC locks machine after a while, requiring cold reboot
http://bugs.centos.org/view.php?id=5614


どうしたか

とりあえず、CentOS6.2のe1000eは1.4.4だったので、Intelのサイトから1.9.5(当時の最新)を拾ってきて適用。

結果

だめorz

上記のbugzillaに

pcie_aspm=off

したらいいぜHAHAHAみたいなコメントがあったのでやってみる。

OK(^^)

というわけで、某環境では、grub.confに上記の起動パラメータを追加してちゃんと動いてます(今のトコ)。

2012年4月9日月曜日

最近読んだ本と、富士通のはなし

Fujitsu Grid Girls
author:scenicaviator

ぼくは富士通のインサイダーではないので、公開情報しか知らないんだけど。

結構前にプロジェクトXでもやっていたので、割と有名かもしれませんが、富士通のコンピュータ事業ってのは、池田敏雄さんというキーマンがいました。

詳細は適当にぐぐって貰えばよいですが、書籍だと



に、弟子の山本卓眞さんのインタビューが載っていて、いわゆる池田敏雄伝説みたいなのがでてきます。この「計算機や〜」も残念ながら品切れなんですが、サマリ版の新書が今はでてるっぽいです。



さて、池田さんは働きすぎて壮絶な「戦死」をとげられるわけですが、その後富士通のコンピュータビジネスは大きな問題に直面します。IBM互換の問題です。

これもぐぐってもらえばいくらでも情報がでてきますが、かいつまむと、池田さんの時代にIBM互換でないコンピュータを作ったら、ユーザがそれまでIBMのコンピュータ向けに作ったプログラムが(当然)動かず、富士通のコンピュータがあまり売れませんでした。

すでにIBMのコンピュータは世界で売れていたので、世界で富士通のコンピュータを売るためには、IBMのコンピュータと互換性のある(IBM向けにつくったプログラムの動く)コンピュータをつくって売ろうと考えたのです。それがいわゆる互換機路線。

で、こっからが本題なんですが、当然IBMが起こって、富士通側にクレームを入れてくるわけです。その交渉の内容を当事者が小説仕立てにしたのが、この2冊の本です。





著者はすでにいろんな人がネタバレしていますが、鳴戸道郎さん。2009年に亡くなっています。(富士通元副会長の鳴戸道郎氏が逝去 )

病床で書かれたと言われているのが、この2冊の小説です。
最初の「雲を掴め」のほうは、IBMと富士通の直接交渉を小説風に再現したものです。後者の「雲の果てに」は第三者機関での仲裁の舞台裏となっています。

小説としてはちょっと微妙なんですが、ルイスガースナーの「巨像は踊る」風にリアルなドキュメンタリーとして見ると、とても面白いです。アメリカ人相手の交渉や、弁護士とのやりとりは、「あーこういうの日本人苦手なんだろうなー」と思いながらも、いわゆる根性で乗り切る鳴門さんに、悲しい日本人の性を感じます。。。

ただ、この事件は、コンニチ的な意義を見出すのが難しく、「雲の果てに」の後半でも出てきますが、業界としてはメインフレームからダウンサイジングの時代となり、和解締結のあたりになると、完全にPC主導のマーケットになっているんですよね。

両者の法務部門ががんばっている間に時代が変わってしまった、というのが数少ない教訓かもしれません。

2012年3月25日日曜日

ビジネスの基本を学ぶ場所

Business Card Recycling
credit:systemonegang

大学生の時に、就職活動をしていたときだったと思うのだけれど、企業が雇いたいと思う人材の要素の一つとして、「実家が事業をやっている」というのがあると聞いたことがあった。

理由としては、身近なところで仕事のイロハを(自然に)学んでいる、という話だったが、サラリーマン家庭で育った自分としては、いまいちピンとこなかった。そのあとぐらいに、とある職場でバイトしたときに、なるほどな、と思ったことがあって、最近またふと思い出したので書いてみる。

その職場は、とある小売店だった。ターゲットとしては、地元の年配の女性向けの雑貨や衣類を扱っている店で、経営者の娘がインターネットで通販をはじめるにあたって、マークアップ的なところをやってくれるバイトを募集していたのでなんとなくjoinしたのがおいらだった。

その小売店には年配の女性のパートタイムの従業員ばかりで、当時のおいらのような金髪大学生は異質な存在だった。まぁ、それはどうでもいい。

事務所は1フロア(そう広くない)しかなく、社長と社長の娘と事務を担当している従業員とパカパカキーボードを叩くバイトのおいらが同じ部屋にいるという、結構今考えるとユニークな職場だったが、そう悪い仕事ではなかった。

応接室とかなかったので、社長宛に訪ねてくる来客も、背中の来客コーナーで話をしているので、中小企業の社長さんってのはこんな人達を相手にしてるんだなーと、関心した覚えがある。

当時社長のもとによくきてたのは


  • 税理士

  • 証券会社の営業

  • 地元の経済団体の人

  • 取引先の営業

  • 社長仲間


などなど

そこで交わされる話題は、ミクロな話ではあるんだけど、生きた経済の話だった。
たしかに、子供の頃からそういう親をみて育つと、会社を経営したり、事業をまわりたり、というのはそーゆーことなのか、とイメージは付きやすいと思う。

さて、翻ってみてたとえば自分だと、サラリーマン家庭に育って、分業が進んでいる大きな企業に就職したりしたので、法律的な部分だったり、経理的な部分だったり、契約的な部分だったり、自分で関わっていない部分が多いので、商売の基本みたいなものはぜんぜんわかってないなーと思ったりするのだ。

2012年2月7日火曜日

ソフトウェアRAID(MD)とgrubの備忘録

要するに、ソフトウェアRAID(RAID1構成)で、ディスクが1本死んだ時の対応のハナシ


珍しく、mdとか使ったので備忘録。
環境はCentOS 6.2。SATA接続のsdaとsdbというDISKが刺さっています。

ま、ミラクル・リナックスさんの「ブートディスクをソフトウェア RAID 1 (ミラーリング) に構成する場合、2本目のディスクに GRUB を手動でインストールしなければなりません。
インストールしない状態でもしも1本目のディスクが壊れた場合、2本目のディスクには GRUB が入っていないため、システムが起動しません。
」って話です。リンク先見てしまえば、下記はおまけみたいなものです。。。

まず、Kickstartで下記のようなスライスを切りました。

clearpart --all --initlabel

part raid.1 --size 100 --ondrive=sda
part raid.2 --size 100 --ondrive=sdb
part raid.3 --size 2048 --ondrive=sda
part raid.4 --size 2048 --ondrive=sdb
part raid.5 --size 30720 --ondrive=sda
part raid.6 --size 30720 --ondrive=sdb

raid /boot --fstype ext4 --level 1 --device md0 raid.1 raid.2
raid swap --fstype swap --level 1 --device md1 raid.3 raid.4
raid / --fstype ext4 --level 1 --device md2 raid.5 raid.6

これだと、sdbにgrubがなくて、sdaが死んだ時に、再起動してもあがってこないというちょっとだけ困ったことになるので、Kickstartに以下の記述を追加しました。

cat </grub/raid1.grub
root (hd1,0)
setup (hd1)
quit
EOF

grub --batch < raid1.grub


grubコマンドでsdbにもインストールしてあげればよいわけですな。めでたしめでたし。
試しに、sdaを抜いてテストしたところちゃんとsdbにて、bootしてきました。

あと、DISKを抜き差ししたときに、


mdadm --manage /dev/md2 --add /dev/sdb1


とかしようとしたら、「mdadm --zero-superblock /dev/ほげほげ しなされ」みたいに怒られたので


mdadm --zero-superblock /dev/sdb1

とかちゃんとしてあげないといかんらしいです。

ちなみに、新品のDISKの場合は、ちゃんとスライス切ってあげないといけないのは言うまでもありませんねー。