水曜日 11 25, 2009
水曜日 11 25, 2009
自転車29 - 富士チャレンジ200 でちょっと前に私が初めて行った自転車レース話をしましたが、その更新です。
![]() |
![]() |
![]() |
![]() |
水曜日 11 04, 2009
直前に書いたzfs dedup ですが、 早速社内の人が試した結果がきました。 とっても単純な試験ですが、とてもわかりやすい検証結果となっています。 ビルド#128はまだありませんので、開発途中のビルドからbfuをしたそうです。 最初dfとかzfs listみてもdedupの効果がわからずとまどったようですが、zpool listでちゃんとわかるということです。
$ zfs list NAME USED AVAIL REFER MOUNTPOINT lacieusb 166K 293G 21K /lacieusb ... $ zpool list NAME SIZE USED AVAIL CAP DEDUP HEALTH ALTROOT lacieusb 298G 310K 298G 0% 1.00x ONLINE - ... $ zdb -S lacieusb Simulated DDT histogram: bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- ...
$ zfs create lacieusb/test1 $ zfs create lacieusb/test2 $ zfs create lacieusb/test3
$ cd /lacieusb/test1 $ dd if=/dev/urandom of=testfile bs=1024 count=1000000 $ sum testfile 36236 2000000 testfile $ zpool list NAME SIZE USED AVAIL CAP DEDUP HEALTH ALTROOT lacieusb 298G 981M 297G 0% 1.00x ONLINE - ... $ zfs list NAME USED AVAIL REFER MOUNTPOINT lacieusb 980M 292G 25K /lacieusb lacieusb/test1 977M 292G 977M /lacieusb/test1 lacieusb/test2 21K 292G 21K /lacieusb/test2 lacieusb/test3 21K 292G 21K /lacieusb/test3 ... $ zdb -S lacieusb Simulated DDT histogram: bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- 1 7.63K 977M 977M 977M 7.63K 977M 977M 977M Total 7.63K 977M 977M 977M 7.63K 977M 977M 977M dedup = 1.00, compress = 1.00, copies = 1.00, dedup * compress / copies = 1.00 ...
zfs listでは普通に領域を消費しているように見えますが、 zpool listではほぼ1GBの消費にとどまっているのが確認できます。$ sum /usr/tmp/testfile 36236 2000000 /usr/tmp/testfile $ cp -fpr testfile /lacieusb/test2/ $ sum /lacieusb/test2/testfile 36236 2000000 /lacieusb/test2/testfile $ zpool list NAME SIZE USED AVAIL CAP DEDUP HEALTH ALTROOT lacieusb 298G 983M 297G 0% 2.00x ONLINE - rpool 228G 168G 59.9G 73% 1.00x ONLINE - ... $ zfs list NAME USED AVAIL REFER MOUNTPOINT lacieusb 1.91G 291G 25K /lacieusb lacieusb/test1 977M 291G 977M /lacieusb/test1 lacieusb/test2 977M 291G 977M /lacieusb/test2 lacieusb/test3 21K 291G 21K /lacieusb/test3 ... $ zdb -S lacieusb Simulated DDT histogram: bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- 2 7.63K 977M 977M 977M 15.3K 1.91G 1.91G 1.91G Total 7.63K 977M 977M 977M 15.3K 1.91G 1.91G 1.91G dedup = 2.00, compress = 1.00, copies = 1.00, dedup * compress / copies = 2.00 ...
$ cp /lacieusb/test2/testfile /lacieusb/test3 $ ls -la 合計 2001617 drwxr-xr-x 2 root root 3 11月 4日 16:50 ./ drwxr-xr-x 5 root root 5 11月 4日 16:21 ../ -rw-r--r-- 1 root root 1024000000 11月 4日 16:50 testfile $ zfs list NAME USED AVAIL REFER MOUNTPOINT lacieusb 2.87G 290G 25K /lacieusb lacieusb/test1 977M 290G 977M /lacieusb/test1 lacieusb/test2 977M 290G 977M /lacieusb/test2 lacieusb/test3 977M 290G 977M /lacieusb/test3 ... $ zpool list NAME SIZE USED AVAIL CAP DEDUP HEALTH ALTROOT lacieusb 298G 983M 297G 0% 3.00x ONLINE - rpool 228G 168G 59.9G 73% 1.00x ONLINE - ... $ zdb -S lacieusb Simulated DDT histogram: bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- 2 7.63K 977M 977M 977M 22.9K 2.86G 2.86G 2.86G Total 7.63K 977M 977M 977M 22.9K 2.86G 2.86G 2.86G dedup = 3.00, compress = 1.00, copies = 1.00, dedup * compress / copies = 3.00
1MBしか増えていませんので、ファイル単位ではなくblock単位であることが確認できます。$ ls -al -rw-r--r-- 1 root root 1024000000 11月 4日 17:02 testfile $ sum testfile 36791 2000000 testfile $ zpool list NAME SIZE USED AVAIL CAP DEDUP HEALTH ALTROOT lacieusb 298G 984M 297G 0% 3.99x ONLINE - rpool 228G 168G 59.9G 73% 1.00x ONLINE - ... $ zdb -S lacieusb Simulated DDT histogram: bucket allocated referenced ______ ______________________________ ______________________________ refcnt blocks LSIZE PSIZE DSIZE blocks LSIZE PSIZE DSIZE ------ ------ ----- ----- ----- ------ ----- ----- ----- 1 1 128K 128K 128K 1 128K 128K 128K 2 1 128K 128K 128K 3 384K 384K 384K 4 7.63K 977M 977M 977M 30.5K 3.81G 3.81G 3.81G Total 7.63K 977M 977M 977M 30.5K 3.81G 3.81G 3.81G ... dedup = 4.00, compress = 1.00, copies = 1.00, dedup * compress / copies = 4.00
Jeff Bonwick氏の 新しい書き込み でZFSのdedupが話題なっていますね。 deduplication、重複をなくすということですが、これ自身が最近結構話題になっていると思います。 また、これほど早くdedupがzfsで実装されるとは思いませんでした。 Jeffのblogには書いていませんが、OpenSolarisのビルド#128に入ってくるそうです。 ZFSはもとともsnapshot/cloneを駆使することで、 使い方によってはかなり重複がさけられる運用ができますが、 これでますます無駄のないストレージの運用プラス速度の向上が見込めますね。 もちろん様々なトレードオフがあるので、 実際の運用にどの方法が適しているのかみてみる必要もあると思いますが。
以下、Jeffのブログの要約です。 英語の参照文も入れおきますので、興味あれば原文を読む時の参考にしてください。 だれか全部訳してくれるまでということで。
ZFS provides block-level deduplication because this is the finest granularity that makes sense for a general-purpose storage system.
ZFS deduplication is synchronous.
zfs set dedup=on tank
zfs set dedup=verify tank
zfs set dedup=fletcher4,verify tank
to use the 256-bit block checksums in ZFS as hash signatures for dedup.
火曜日 10 27, 2009
とっても久しぶりの更新ですが、自転車ねたです。 ブログの更新は滞っていましたが、相変わらずほぼ毎週どこかに出かけていました。 よく出没するのは南多摩尾根幹線道路とか、甲州街道の大垂水峠と近場が多いですが、 今年は初めて箱根を1号線で超えて静岡の興津までいったり (行った先でOpenSolarisの勉強会に参加 - 2泊)、 中山道で軽井沢(1泊)にいったりしています。 また、最近はサンでほかに自転車に乗っている人たちや、 その友達の方たちに誘われて行く機会が何度かありました。 誘われた最初は正直「ゲーッ」て思うような話ばかりだったのですが(私にはまだ無理かなー?)、 誘ってもらったおかげで、富士のスバルラインと大弛峠にそれぞれ登ることができました (自分としては快挙!、ひとりではまずいかなかった)。 その中でもっとも「エーッ!!」と思ったのが今回の 富士チャレンジ200です。 なんとなく勢いでチームエンデューロ7時間に登録してしまったのですが、 考えれば考えるほど大それたことをしてしまったものだと、及び腰になっていました。 しかも、サンの社員ででる3人はすべてレース未経験、集団で走ることになれていません。 他の2人は早いからまだいいですけど....
でも、「サン」の名前で登録してしまったし、いろいろプランも立てたしということで、 元気に事故なしで完走することを目指し3人とも サンのジャージ を着てがんばることに。
![]() |
| 富士チャレンジ200 |
| 送信者 富士チャレンジ200 |
| 送信者 富士チャレンジ200 |
![]() |
| 送信者 富士チャレンジ200 |
月曜日 4 20, 2009
いろいろなマシンにOpenSolarisを導入していますが、 最近はほとんど最初から入っているドライバだけで済んでいました。 しかし、久しぶりにそうでないマシンに遭遇したので、簡単にメモを書いておきます。 まず、マシンですが、ちょっと古いラップトップで、SHARPのPC-AL90Gというものです。 でた当時に会社で購入したのですが、 当時はグラフィックス(S3 UniChrome)がどうにもならず、Solarisで使うのは諦めていました (当時は別の人がいろいろ頑張ってくれていたのですが、詳しいことはよく覚えていないのです)。 しかし、ひょんな事から久しぶりに私の手元に帰ってきたので試してみることに。
System : PC-AL Series CPU Type : Mobile AMD Athlon(tm) 64 Processor 2700+ CPU MHz : 1600MHz CPU 2nd Cache : 512KB Memory : 1.2GB
まだまだ現役で充分使えそうなマシンです。 CD-ROM(DVD Super Multi?)が付いていますので、OpenSolaris 2009.11を起動します。 とりあえずLiveCDとして使える状態になるのですが、忘れていました。 パーティションを切り直すツールはまだOpenSolarisには入っていないのでした (まもなく、もしくはもう、入ったはずですが)。 そこで、たまたま手元にあったUbuntu 7.10で起動しますが、 あれあれ?グラフィックスが切り替わったところで固まります。 OpenSolaris 2009.11でいけるんだからという軽い気持ちで、 Ubuntu 8.10をダウンロードして試しますが、同じ結果に....あれーー?? もしかするとグラフィックスが切り替わるところで固まるけど、なにか違う理由なのかもしれません (画面は切り替わってちゃんとカーソルは書いたところで固まります)。 では、Ubuntu以外でとググッて見ると、gparted の 大元 にちゃんとLiveCDもあるではないですか。 これの最新版で試したところうまくいきました。 80GBのディスクをおおよそ半分にします (この後使う人はおそらくWindowsなので)。
さて気を取り直して、再度OpenSolaris 2009.11で起動します。 直後にDevice Driver Utilityを起動すると、モデムのドライバがないことと、 有線のネットワークが"third party"とでます。 AL90GはWifiが付いていないので、このままではネットに繋がりません。 PC-CardのWifiを使ってみましょう(他機種で実績のあるAtherosのカードです)。 あれ?無反応? DDUの結果を見るとそもそもCardBus Bridgeを認識しません (表にすら出てきません)。 このままではどうにもならないのですが、 とりあえずこのネットワークなしの状態のままでOpenSolaris 2009.11を導入します。 これはあっさり、問題なく完了。 しかし、ネットワークに繋がらないので、このままブートしても意味がありません。
そこで、あらかじめ導入されていたWindows XPを起動して、 ドライバを捜します。 問題の有線ネットワークはRhine-IIですので、 かの有名な MurayamaさんのWebページ から、 vfe をダウンロードして、DVD-RWに書き込みます。 ここで、ハードディスクに導入したOpenSolaris 2009.11を起動し、 ダウンロードしたファイルのREADMEに従ってvfeドライバをインストールします。 最初READMEを見た時makeと書いてあるのでコンパイラって最初から入っていたかな? と不安になりましたが、コンパイルする必要はなく(別のオプションを指定したりする場合必要)、ちゃんと導入できます。 ちょっと驚いたのは、make installが終わった直後にNWAMが動き始めwifiネットワークに繋がったのです。 これはできすぎー?と喜んだのですが....その後にリブートをすると動きません。 でなぜかいったん動かなくなるとどうしてもうごきません。 modunloadしたり、再導入したりといろいろやっても動きません。 でいろいろ調べると、vfeのドライバにはvfe.confが存在しません。 実はSolarisにはこの*.confファイルがあるものとないものがあるのですが、 理由がすぐにはわかりませんでした。 が、とりあえずやってみようと言うことで、 空のvfe.confを作って(といっても念のためiprb.confのコピー)を/kernel/drvにおいてリブート。 ちゃんと動くじゃないですか。 CardBusに関しては調べる時間がとれていないのですが、
が大量にでますが、これだけではbiosか、ドライバか?あるいは全く別の原因なのかこれではわからないですね。 image-updateを使ってb111にしてみましたが、この症状は改善しません。 というところで、今回は時間切れでした (_o_)。Apr 20 18:40:48 hostname pcic: [ID 868228 kern.warning] WARNING: pciclass,0607000: Odd Cardbus Present State 0xffffffff
水曜日 3 25, 2009
皆さんはzfsで作ったファイルシステムをどのようにバックアップしていますか? 最近ではテープというデバイス (単体のテープドライブ、テープ・オートローダ、テープ・ライブラリ)は古くさく、 過去のものという考えを持った人が多くなってきていると思いますが、 私はまだ価値があると思っています。 簡単にオフラインの場所に保管できるとか(例えば遠隔地や耐火金庫に入れるとか)、 保管できるデータの量とそれに要する場所の大きさとかいろいろ利点があります。 また、速度も各世代でディスクに対して結構高速です ( sustained data rate of 120MB./sec for LTO4 / T10000 )。 ソフトウエアは会社において私は(部門のサーバとして) Sun StorageTek Enterprise Backup Software を使っています。 特にバージョン7.3以降はzfsをサポートしており、なかなか快調です。 現在私の書いたちょっとしたスクリプトを使って、 直接使用中のファイルシステムではなくスナップショットからとるように運用しています (これは2年くらい前にやったことで、最新のSun StorageTek Enterprise Backup Software ではもっとスマートにできるようになっているかもしれません)。
このSun StorageTek Enterprise Backup Softwareは実際良くできていて、 使いやすく、かつパワフルです。 しかし、無料ではありませんし、小さな組織における小さなサーバでは大げさすぎるかもしれません。 あるいは、定期的にはとらないけど、なにか特別な理由で1回だけとりたい場合などにも適さないかもしれません。 そういった場合今まではufsdump/ufsrestoreがとても役に立ってくれました。 当然完璧ではありませんが(もっと早くなってほしいですね、特にディレクトリ関連は)、 十分であり、差分のバックアップも効率よくやってくれます。 そうはいってもufsdumpというくらいで、これはufsだけに有効なコマンドで、 zfsには少なくともこれに直接変わるコマンドはありません。 zfsのスナップショット機能はとても強力で、間違えて消してしまったファイルや、古いバージョンの ファイルを復活させるのには大変便利です。 しかし、すべて同じディスクのプール内だけで行われることです。 zfsのsend/recieveはかなり期待が持てそうですが、 ufsdump/ufsrestoreのように複数のテープに書き出す機能がありません (もともと媒体に書き出すために設計しているわけでないので)。 GNUのtar(gtar)には複数のテープを扱う機能があるようですが、どうも、 手動で切り替える場合だけで、オートローダに対応していないようです。
さて、ではどうすればよいのでしょうか? gtarを改造しますか? でもそれではtarの書式しかサポートできません。 うーん、Unixのプログラマーらしい発想をしてみたいと思います。 複数のテープをサポートする機能はもっと一般的な機能として実現するべきではないかと思います。 そうですね、古くからもともとテープを扱うために作られたコマンドがありますね、ddです。 ということで、ddをおもしろ半分の気持ちで試しに改造してみました。 ddはOpenSolarisのプロジェクトの一環としてオープンソース化されていますので、 ソースコード は簡単に手に入ります。 まあ、私がCのプログラムを書くなんていうのはかなりしばらくぶりなので、腕はさび付いていますが、 なんとか動く物ができました。
参考までに私のやった変更を ここに 載せておきました。 もし、興味がおありでしたら次のステップで試してみてください。
そしてコンパイルします。$ cd ${SRC} $ cd usr/src/cmd/dd $ patch dd.c < dd_mtv.patch
自動的にテープドライブかどうか判断したりする方法もあるかもしれませんが、 結果が正確でないかもしれませんし、 その結果とんでもないことが起こるかもしれないと思い、 私はオプションで指定するように作りました。 使い方の例です:
- ial[=n]
- Input being AutoLoader. 入力が(if)がオートローダであることを指定します。 オプションでオートローダがロードする時間nが指定できますが、 省略すると180秒になります。
- oal[=n]
- Output being AutoLoader. 出力が(of)がオートローダであることを指定します。 オプションでオートローダがロードする時間nが指定できますが、 省略すると180秒になります。
一応この改造版はSPARCの上で StorEdge L280 with DLT7000 drive (ただし、このオートローダはすでに外して使わなくなったので、最近テストしていません), と StorageTek L20 with LTO2 drive で試しています。# zfs send rpool/export/home@backup | dd oal of=/dev/rmt/0cbn obs=2048b
最後に将来の希望をリストすると (:-p):
How do you backup zfs based file system/stroage? Those days tapes (tape drive, tape autoloader, tape libary) are considered legacy by many people, but I still value the tape as backup device. Its can be store offline easily (can place on to fire safe stroage for example), amount of data on given space (such as library) would be greater. And it actually pretty fast ( sustained data rate of 120MB./sec for LTO4 / T10000 ). At work/office, I do use Sun StorageTek Enterprise Backup Software. Version 7.3 and following do support zfs file system, and works fine. I even wrote small script to backup from snapshot instead of live file system (I done this years ago, newer version may support this in more elegant way).
While Sun StorageTek Enterprise Backup Software is nice, easy to use, poweful solution, it does cost and combersome for small operation or adhoc backups. For those cases, ufsdump/ufsrestore did excellent job for me. Its not perfect (I wish it does go even faster, too slow on directory), but adequate and came with incremental backup. But it only for the ufs, and zfs does not have direct replacement (yet?). zfs snapshot does wonderful job for finding lost (unitentinally deleted, or look for older version) files, but within the existing disk storage/pool only. zfs send/receive looks promising., but unlike ufsdump/restore, it does not able to write to multiple tape volume. Well, zfs send/receive did not designed for that purpose. GNU tar (gtar) has ability to handle multiple tapes, but it appear only for manual tape exchange operation (not for autoloader).
What should I do? Modify gtar to support autoloader ? But that only support gtar format. Think like Unix programmer (^ ^;). Handling multiple tape volume should reside on more generic Unix command. I decided to modify dd command for experimentation (or fun :-). Its being open sourced as part of OpenSolaris. Its being while I did actually wrote piece of source code, so, its kind a rusty. But I was able to produce workable version.
For reference I have placed patach/diff of my modification posted. If you are interested to try, prepare the OpenSolaris source code and compiling environment, Down load the patch, and apply patch to the dd.c:
then, complie it. For usage, I have added two options.$ cd ${SRC} $ cd usr/src/cmd/dd $ patch dd.c < dd_mtv.patch
Automagically detect the tape drive and such may not acculate, and may result in undesired behavior, therefore I decided to have above option to contol the behavior. Example on how may use:
- ial[=n]
- Input being AutoLoader. Optional n indicate how many seconds will wait for the autoload to complete, default being 180 second.
- oal[=n]
- Output being AutoLoader. Optional n indicate how many seconds will wait for the autoload to complete, default being 180 second.
I have tested this vesion with old tape autoloader StorEdge L280 with DLT7000 drive (but I have take it offline while ago, and have not tested lately), and StorageTek L20 with LTO2 drive.# zfs send rpool/export/home@backup | dd oal of=/dev/rmt/0cbn obs=2048b
And finally wish list (:-p):
I have request to provide binary from comment onto this entry. I already reply to the comment to provide binary, but just in case I'll also write here. I did uploaded binary at here. its include both SPARC and x86 binary, as well as DEBUG binary. However, I don't have autoloader connected to x86 server, therefore x86 version are not being tested. As usuall, please use it at your own risk. Also, I would appreciate if you can report back how it works.
月曜日 1 19, 2009
2009年の最初の OpenSolaris Night Seminar を1月9日に行いました。 今回は私が 「Solaris/OpenSolaris の発展とその背景にあるハードウエア」 と題して話をさせていただきました。 どうも、歴史というと私が引っ張り出されるのですが、 期待にこたえるべくがんばってみました。 しかし、年末年始に準備をしたのですが、 どうもそれでも準備不足と自分のプレゼン技術の未熟さを露呈する結果となり申し訳ありませんでした(_o_)。
木曜日 11 06, 2008
ブログの更新が相も変わらず滞っていますが、いつもの通りほぼ毎週末自転車にのっています。 風振峠クラスを2週続けていけば楽に登れるようになるかもと思ってもなかなかできないですね。 いつも風張を五日市市側から登るのですが、これを奥多摩湖側からのぼったら、かなりきつかったです。 五日市側からだと一気に登る感じなんですが、 奥多摩湖側だといったん奥多摩湖に登ってからしばらく走ってから登るので疲れてしまった後の登りがきついのかな? 午前にピークがくるのと午後にくるののさもあります。 また、ずっと知ってはいたのですが、尾根幹線道路を最近になってやっと走りました。 いろいろなブログに書いてあるとおり近場としては結構良い練習になるかと思います。 その後野猿街道に行ったつもりなんですが、なぜかすぐに野猿街道からはずれてしまいました。
前回書いた
自転車エントリ
でサンのジャージの話を書きました。
最初にみんなで買った時から一緒に走ってみたいねという話をしていたのですが、
なかなか機会に恵まれず(というか私の怠慢)、だんだん半袖では寒い時期になってきました。
そこで今年もう最後の機会になるかもしれないということで、急遽無理矢理勢いで企画。
誰も来ないかなと思ったら私以外に2人の方が参加してくれました。
まあ、寂しいと言えば寂しいですが、その週の木曜日辺りに突然言い出したわりには集まったかなと (^ ^:)。
実は一人の方は私よりも自転車歴がずっと長い方で、
そのK氏の道案内で鶴見川を246から上流に登っていこうくらいのいい加減な設定で当日を迎えます。
もう一人のM氏もかなり乗っておられるようで、期間は私とそれほど変わらないようなのですが、
日帰りで富士スバルライン登ってきた(250km位だそうです、凄すぎ)強者で、
当然のごとく上り坂で私はぶっちぎられました(T T)。
さて、M氏は写真登場は勘弁ということなので、K氏とのショットになっています。
K氏がきているのは今SunWareで売っているものではなく、
以前に社内の自転車愛好家で作った時のものでメーカが違うためか色が濃いです。
また、写真ではわかりませんが、横に書いてある文字がK氏のは"Share"なのですが、
私のは"Innovation"ということでサンのスローガンの時代に合わせて変わっています
(私は"Share"が「道をshare」してねという運動/かけ声がアメリカではあり、良いなと思っていたのですが)。
このリカンベントはまずペダルがSPDで、私のSPD-SLの靴では乗れないし、 普通の自転車と違ってサドル高さ調整に相当するものが面倒なのだそうです。 ということで今回はあきらめました。さて、その後ものんびりとポタリング感覚で鶴見川の源流までいったり、 途中でゆっくりおいしいパン屋さんで昼をたべたり、 オーダーメードの自転車の制作販売をしている ケルビム さんによったりして、1日K氏の案内で楽しく過ごせました。 K氏は本当にこの地域をご存知でなんかツアーガイド付きのポタリングって感じでした。 走ったコースは、
ところで、全然違う話なのですが、 普段乗り(通勤や買い物)兼、朝の激坂トレーニングに使っている自転車がかなりへたりました。 ディレイラーが調子悪いのですが、とうとう歯飛びがひどくなってきました。 調整したり(嘘、してもらいました)掃除をするとよくなるのですが、それでもかなり歯飛びします。 自転車屋さんに言われるとおり見てみてもやはりチェーンがのびている感じ、 これだとスプロケットも交換。 タイヤもひびは入ってきているしと、結構きています。 まだ部品は買えるようなので直して乗ることもできると思います、 次々と問題もでそう。 そろそろ変えどきかなー?と悩んでいます。 プジョーのメトロ、まだ10年はたっていないけど、普段からドロップハンドルほしいし....。
月曜日 10 06, 2008
前回は 全部メインメモリに入ってしまう結果でしたが、追加で入りきらないものを計測しました。 一つの結果に対して3回計測しており、全部終わるまでに74時間以上かかりました。 もちろん一発できれいに行かない(私のスクリプトがへくったのも含めて)ために、 今日までかかってしまいました。 マシンの構成は変わっていないのですが、読み込み側のZFSファイルシステムは StorageTek 3510FCというディスクアレイで、RAID5になっています。 計測方法は前回若干変えています。 まずread onlyですが、gtarの結果があまりにもはやいので不思議に思い、 /dev/nullを直接の出力に指定するのではなく、パイプでcatに繋いでから/dev/nullにおくりました。
gtarはもしかすると出力先によっては処理が違うのかな?と思える結果です。 直接/dev/nullで、パラレルgtarの結果は4分台でした。もう一つは10台のディスクで組んであるRAID5からの読み込みの速度を少しでも上げるために、 tar/gtar/cpioを複数同時に起動するものもやってみました。 これは試験対象ファイルシステムのルートにあるファイルおよびディレクトリに対し一対の スクリプトを同時に実行するという形にしました。 各ディレクトリに含まれるファイルの数や大きさが必ずしも一致しないのですが、 かなり当初の目的は達成できたかなと思います。 今回の対象のファイルシステムは以下の通り158GBでメインメモリのほぼ2倍の容量です。
ファイルシステム サイズ 使用済み 使用可能 容量 マウント先 p1/tst 331G 158G 172G 48% /p1/tst
結果は:
| read only | copy | |||||
|---|---|---|---|---|---|---|
| Real time | User time | Sys time | Real time | User time | Sys time | |
| tar | 2:14:03 | 0:19:55 | 0:38:21 | 5:12:43 | 0:38:47 | 5:10:17 |
| gtar | 2:01:10 | 0:03:38 | 0:41:32 | 2:05:08 | 0:06:32 | 1:27:11 |
| cpio | 2:18:22 | 0:02:45 | 0:41:55 | 3:11:58 | 0:04:13 | 1:02:37 |
| multi tar | 0:56:44 | 0:23:41 | 0:47:22 | 1:50:09 | 0:45:43 | 8:45:35 |
| multi gtar | 0:53:32 | 0:05:03 | 0:55:18 | 0:54:49 | 0:07:14 | 1:40:36 |
| multi cpio | 0:57:46 | 0:04:22 | 0:57:37 | 2:02:38 | 0:08:02 | 2:02:38 |
| zfs send/recv | 1:39:01 | 0:00:02 | 0:31:49 | 1:51:50 | 0:00:04 | 1:14:57 |
なかなか興味深い結果だと思います。 手間をのぞくとzfs send/recvは必ずしも最も早い方法ではないことになります。 zfsはファイルシステムとしてかなり優秀だと思いますが、 zfs send/recvまではマルチスレッドホットになっていないと言うことでしょうね。
「マルチスレッドホット」という言葉最近聞きませんね。 Solaris 2.0開発時によく使っていた言葉で、"multi-thread unsafe", "multi-thread safe"と"multi-thread hot" と確か3種類あって、それぞれ、マルチスレッド環境下で使えない、マルチスレッド環境下で使える、 そして、マルチスレッド環境下でマルチスレッドであることを活かして早くなるということで、 システムの各コンポーネントをどれだけホットにできるかという課題に取り組んでいました。 man pageにMTの属性の説明がありますが、ホットは無いんですね。但しこれは今回のようにCPUの個数に余裕がある場合ということになります。 実際multi tarの結果は実時間の4倍以上のCPU時間を使っている (4つ以上平行に走っていた)ことになり、 CPUもしくはCPUの個数に余裕が無ければ違う結果になっていたでしょう。 また、gtarとmulti gtarのread onlyとcopyの結果を見ると、実時間であまり差がありません (むしろcopyの方がはやいですが、計測誤差の範囲内でしょう)。 詳しく調べないとわかりませんが、zfsのwrite cache/bufferと、 6140Arrayのwrite cacheと、さらに全体の平行動作との組み合わせがうまく働き合い、 書き込みのオーバーヘッドが無いような結果になったのでしょうか? さらに、multiがこれほど効果的、特にgtarでの結果出たと言うことは、 zfsは複数のプロセスからの同時アクセスに対して効率よく処理できていると思われます。
ここまでくるとディレクトリを作るのがごとくばんばんファイルシステムを作れるzfsで、 ルートディレクトリ単位にファイルシステムを作って複数のzfs send/recvを走らせてみたくなりました。 が、さすがにそこまでは時間がとれないかなー.... ま、この方法が早かったとしても運用方法が変わってしまうのでそのまま比べられませんね。
金曜日 9 26, 2008
またしてもZFSを使ったちょっとした試験をしました。
私がこういう試験をするのは社内で利用しているシステムの更新をする時の、 実際の更新までの空いた時間でやっているので毎回違う構成になってしまいます。 今回のマシンも決して新しいマシンとは言えないのですが、もうすぐ実際の運用に回します。今回はすでにZFSを使っていて、 マシン間や新しいディスクアレイに移行する時に どうやって行うが早いのかいろいろ試してみました。 ZFSどうしなら当然zfs send/zfs recvの組み合わせが思い浮かびますが、 果たしてどのくらい他の方法に比べて早いのか? また、zfs send/recv はリリース間の互換性を今のところ保証していないので、 将来的にマシン間ではできなくなる可能性もあります。 他の方法はtar/gtar/cpioをそれぞれ試してみました。
まずはハードウエアの構成ですが、
となり、サーバは少し古いですが、メモリはたっぷりです。 OSはSolaris 10 + patch です。 ディスクアレーは私のブログに登場する中では珍しく現在販売している最新機種です (^ ^)。 試験は36GBをZFSで3way mirrorにしたファイルシステムにおいてあるものを、 6140のRAID-5に複写するという形で行いました。 結果を見るとわかりますが、この構成の詳細はあまり重要ではありませんでした。 複写したファイルシステムはある製品のソースコードが入っているもので、 およそ 16GB の容量に32万個のファイル(ディレクトリをのぞく)が入っているものです。 16GBということで、このシステムのメインメモリーにキャッシュされると思われるので、 ディスクのI/Oはこのベンチマークにはほとんど影響されない予定です。System : Sun Fire V1280 CPU Type : SUNW,UltraSPARC-III+ * 12 CPU MHz : 900MHz CPU 2nd Cache : 8MB Memory : 86GB Disk : 36GB * 3 Disk Array : StorageTek 6140
各方法の実行の仕方は、
の様になっております。 また、念のために読み込みだけの時間も計りました (上の例では書き込みのプロセスだけを計っていますが、 読み込み時は書き込み先を/dev/nullにして、読み込みのプロセスを計測しています)。tar EcfbB - 1024 . | (cd /${T} ; timex tar xfb - 1024) gtar cfbB - 1024 . | (cd /${T} ; timex gtar xfb - 1024) find . -print | cpio -ocC 524288 | (cd /${T} ; timex cpio -idmlC 524288 zfs send ${SP}@bench | timex zfs recv ${T}
結果は:
| read only | copy | |||||
|---|---|---|---|---|---|---|
| Real time | User time | Sys time | Real time | User time | Sys time | |
| tar | 05:34 | 04:16 | 01:17 | 32:22 | 06:17 | 32:13 |
| gtar | 01:06 | 00:18 | 00:45 | 06:18 | 00:41 | 08:08 |
| cpio | 02:21 | 00:20 | 02:23 | 09:47 | 00:44 | 10:12 |
| zfs send/recv | 00:56 | 00:00 | 00:56 | 04:50 | 00:00 | 06:30 |
ある意味想定通りCPUで頭打ちになっています。 しかし、これほどtarが遅いとは思いませんでした。 というか、gtarって早いんですね。 zfs send/recvが勝ってはいますが、思いの外gtarと近かったです。 ディスクアレイへの書き込みに関しては、StorageTek 3510FCへの書き込み (しかも、RAID-5に使っているディスクの本数も違う)と比べて誤差ぐらいの差しかありませんでしたので、 関係なさそうです。 この中で実時間よりもCPU時間の長い物がありますが、 Solarisのカーネルがマルチスレッドで複数のCPUを効率よく使って結果だと 思っているのですが、確認していません。 とここまで書いて思ったのですが、このマシン、運用に回すまでまだ1,2週間あるので、 もっと大きな(メインメモリを超えるような)ものもやってみようと思います。
月曜日 8 25, 2008
Sun Wear というのができたのをご存知でしょうか? 以前は定番のサングッズ(ロゴ入りの様々なものでイベントなどで配る特注でないもの)は USのサンのオフィース内にあるSun Shopで買えたのですが、これが無くなった代わりに、 Webで買えるようになったものです。 自転車ネタでは SUGOI Classic Cycling Jersey という自転車用のジャージがあります。 ここに載るようになってすぐに社内の自転車メイリングリストで話題になり、 私も知ったのです。 Sun Wearに出ているのは絵なのですが、同じデザインで以前に作ったことがあると言うことで、 写真や(日本にたまたま持っている人がおり)実物も見せてもらいました。 さらに調べると以前に作った時とは違うメーカ(Sugoi)が作るので同じにはならないかも? また、私は知らなかったのですが、"Sugoi"は日本語の「凄い」にちなんだカナダのブランドだとか。 と、いろいろ話題豊富でした。
でもやっぱりこういうのは自分で着てみて意味があるでしょう、ということで、 注文を考えるのですが、日本から注文すると輸送費が高く倍くらいになってしまいます。
日本での重要が多ければ国内で買えるようになるかもしれませんけど、今のところはUSのみです。そこで、日本サンの中で自転車好きの人に声をかけまくったところ、 私も入れて9人まで買いたいという人が集まりましたのでまとめ買いをしました。 これで1着8千円弱になりました。 実際のものを開けてきてみると、
水曜日 8 13, 2008
先月 OpenSolaris 2008.05 を CD/DVDもnetworkも無い状態で導入 というのを書いておりますが、 その中で別の方法で導入できる気もするといっております。 今回はそれを試してみた結果です。 基本的には前回の導入方法を試みている時にZFSの柔軟性とそのパワフルさに感心し、 さらに大胆な別の方法でできるのではないかと考えました。 それは、"zfs send"でできるイメージを導入に使うというものです。 この方法を2台のマシンで試しており現在の所、 特に大きな問題もなく運用できています。 マシンはそれぞれ、SunのデスクトップマシンであるW1100z(AMD Opteron)と、 PanasonicのCF-W5(Intel Core2 Duo)というノートパソコンです。
英語で書いた時は"cheat"という言葉を使っていますが、 あまり良い意味ではありません。 まあ、インチキというかいい加減な方法であるということです。
OpenSolaris 2008.05の導入、とくに"All language"というバージョンの場合、 結構時間かかりますよね? ざっとCDからイメージを複写してる時間を計ってみると (つまりブート、構成している時間などを除いて)、 CF-W5(DRAM 1GB)でまるまる1時間以上、W1100z(DRAM 2GB)で40分以上かかります。 たかがCD一枚なのですが、圧縮の解凍に時間がかかっているようで、 ディスクとかCDドライブの時間よりもCPUに時間をとられているようです。 しかし、"zfs recv"はかなり効率が良く、高速です。 これが今回方法の思い立ったヒントです。
以下が今回のインチキなネットインストール方法です。
すでに導入済みのマシンがあり、かつ@installのsnapshotを消していない場合は、 そのマシンでもかまわないはずです。jack@opensolaris:~$ pfexec su jack@opensolaris:~# zfs send -R rpool@install | ssh 他のホスト名 -l ログイン名 "dd of=ファイル名 bs=1024k"
でまずはroot権限を獲得します。jack@opensolaris:~$ pfexec su jack@opensolaris:~#
format> fdisk Total disk size is 9729 cylinders Cylinder size is 16065 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Other OS 0 254 255 3 2 IFS: NTFS 255 4629 4375 45 3 Active Solaris2 4629 8714 4086 42 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 6 format> p PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition 3 - change `3' partition 4 - change `4' partition 5 - change `5' partition 6 - change `6' partition 7 - change `7' partition select - select a predefined table modify - modify a predefined partition table name - name the current table print - display the current table label - write partition map and label to the disk ! - execute , then return quit partition> p Current partition table (original): Total disk cylinders available: 4084 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 262 - 4083 29.28GB (3822/0/0) 61400430 1 swap wu 1 - 261 2.00GB (261/0/0) 4192965 2 backup wu 0 - 4083 31.29GB (4084/0/0) 65609460 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 7.84MB (1/0/0) 16065 9 unassigned wm 0 0 (0/0/0) 0 partition>
これは、"zfs recv"を実行時にrecvしたファイルシステムから 順次自動的にマウントしてくれるのですが、 途中で既存のものとぶつかるとそこで止まって先をやってくれないためです。 実際最初/export/homeができなくて結構面倒なことになりました (rootでログインできないようになっているのに、 設定したユーザのホームディレクトリが無いとログインできません。 なんとか救済できるのですが、面倒です)。jack@opensolaris:~# mv /opt /opt-
jack@opensolaris:~# zpool create -f rootディスク(例えばc5d0s0) jack@opensolaris:~# ssh 他のホスト名 -l ログイン名 "dd if=ファイル名 bs=1024k" | zfs recv -Fvd rpool
jack@opensolaris:~# zfs rollback rpool@install jack@opensolaris:~# zfs rollback rpool/ROOT@install jack@opensolaris:~# zfs rollback rpool/ROOT/opensolaris@install jack@opensolaris:~# mkdir /a jack@opensolaris:~# mount -F zfs rpool/ROOT/opensolaris /a
実際の所install-finishが何をするスクリプトのなのか完全には把握していません。 しかし、これを走らせるとディスクにすでに導入されているOSをGRUBのメニューに 書き込んだ上でbootアーカイブを作ってくれます (おそらく、これ以外にも何かしています)。 CF-W5の場合はWindows Vistaでした。 また、zfs.cacheも実際のマシンの内容と違うとおかしな動きをします。jack@opensolaris:~# cp /etc/zfs/zpool.cache /a/etc/zfs/ jack@opensolaris:~# cp /etc/path_to_inst /a/etc jack@opensolaris:~# /sbin/install-finish /a cd jack@opensolaris:~# installgrub -m /a/boot/grub/stage1 /a/boot/grub/stage2 /dev/rdsk/rootディスク(例えばc5d0s0) <<. y . jack@opensolaris:~# umount /a
通常のリブートはshutdown(1M)やGNOMEのメニューから"シャットダウン”を 選んで電源再投入をするべきですが、ここではむしろよけいなことをされたくないので、 さっくり落とします。 また、リブート中にLiveCDのメディアを抜いて確実にハードディスクからブートさせてください。jack@opensolaris:~# reboot
マシンは大きな問題なくブートするはずですが、 いくつか修正する必要があるかもしれません。
の一行を加え、リブートします。LAYOUT=キーボード配列の名前
なにか私がリブート前に修正し忘れているファイルがあるのかもしれません
もちろんこの方法によるOpenSolaris 20058.05の導入はSunがサポートする方法ではありませんし、 一台だけ導入するのであれば単に面倒なだけです。 しかし、試験のために何度も導入したり、多くのマシンを導入する際には、 高速で有効な方法だと思います。 実は"zfs send"のイメージをどこかにおこうかと思ったのですが、 2.6GBのサイズになり、 mediacast.sun.comだと500MBごとに切らないといけないのでやめてしまいました。
火曜日 8 12, 2008
When I wrote Installing OpenSolaris 2008.05 without CD/DVD nor network - English about month ago (already a month!), I mentioned about having new idea on installing OpenSolaris. Since ZFS are so much powerful and flexible, I thought I can cheat installation process by using the "zfs send" image. I have tried one desktop machine (Sun W1100z) and one notebook PC (Panasonic CF-W5), and so far found no major issues (but some).
When you install OpenSolaris 2008.05, especially "All language" version, it does takes while isn't it? Just measuring about CD image copy phase took more than full hour on CF-W5, and more than 40 minutes for W1100z. It is still just single CD, but compressed. For CF-W5, its more likely depend on the CPU speed than disk or CD drive. At same time, "zfs recv" seems to be efficient and fast, even on the notebook PC. This is where my idea came from.
Here is my cheat process:
If you already has installed machine (which has not destroy the @install snapshot), you can do the same on that machine as well.jack@opensolaris:~$ pfexec su jack@opensolaris:~# zfs send -R rpool@install | ssh someotherhost -l loginname "dd of=path_to_file bs=1024k"
which gives you the root access to the system (so be careful).jack@opensolaris:~$ pfexec su jack@opensolaris:~#
format> fdisk Total disk size is 9729 cylinders Cylinder size is 16065 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Other OS 0 254 255 3 2 IFS: NTFS 255 4629 4375 45 3 Active Solaris2 4629 8714 4086 42 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 6 format> p PARTITION MENU: 0 - change `0' partition 1 - change `1' partition 2 - change `2' partition 3 - change `3' partition 4 - change `4' partition 5 - change `5' partition 6 - change `6' partition 7 - change `7' partition select - select a predefined table modify - modify a predefined partition table name - name the current table print - display the current table label - write partition map and label to the disk ! - execute , then return quit partition> p Current partition table (original): Total disk cylinders available: 4084 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 root wm 262 - 4083 29.28GB (3822/0/0) 61400430 1 swap wu 1 - 261 2.00GB (261/0/0) 4192965 2 backup wu 0 - 4083 31.29GB (4084/0/0) 65609460 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 7.84MB (1/0/0) 16065 9 unassigned wm 0 0 (0/0/0) 0 partition>
"zfs recv" wants mount the just received zfs file system, but if conflict, its stop right there. Moving /opt to avoid this.jack@opensolaris:~$ mv /opt /opt-
jack@opensolaris:~# zpool create -f yourdisk(such as c5d0s0) jack@opensolaris:~# ssh someotherhost -l loginname "dd if=path_to_file bs=1024k" | zfs recv -Fvd rpool
jack@opensolaris:~# zfs rollback rpool@install jack@opensolaris:~# zfs rollback rpool/ROOT@install jack@opensolaris:~# zfs rollback rpool/ROOT/opensolaris@install jack@opensolaris:~# mkdir /a jack@opensolaris:~# mount -F zfs rpool/ROOT/opensolaris /a
Seriously, I don't exactly know what install-finish script does, but without this, menu.lst will not have other than Solaris (in case of my CF-W5, Windows Vista). Also, zpool.cache seems to do some trick as well.jack@opensolaris:~# cp /etc/zfs/zpool.cache /a/etc/zfs/ jack@opensolaris:~# cp /etc/path_to_inst /a/etc jack@opensolaris:~# /sbin/install-finish /a cd jack@opensolaris:~# installgrub -m /a/boot/grub/stage1 /a/boot/grub/stage2 /dev/rdsk/$1 <<. y . jack@opensolaris:~# umount /a
and while rebooting, taking out the liveCD/InstallCD to make sure boot from hard disk.jack@opensolaris:~# reboot
System should boot fine, but there are few things need to be fixed.
Need reboot to take effect.LAYOUT=Your_keyboard_layout_name
Obviously this isn't supported way of installing OpenSolaris 2008.05, and if you are installing just one machine once, this isn't interested. But for the testing or need to install bunch of machine, this might help you. It is so much faster!.
火曜日 7 29, 2008
またしても自転車の話はしばらく書いていませんが、 またしてもほぼ毎週末乗ってはいました。 この間いろいろ走った中で変わったところに行き(特に海外)、 GPSで軌跡が残っているものを少しだけ書きます。
2008/05/14 プラハ周辺 57km?
Praque bike trip - Widget powered by EveryTrail: GPS Geotagging
EveryTrailにはしばらく前にアップしていて、今見ると 私のレーパン姿の写真デビューになっていましたね :-)また、この時の写真を載せておきます。 もっとも、 Jimが とてもきれいな写真を載せているのに全然かなわないですけど (残念ながら一緒に行ったわけではありません)。 どちらにしても本当にきれいな町並みです。
![]() |
| Praque Trip on 2008 May |
2008/05/27-30 MTV<->MPK 40km?
Safe path from MTV to MPK - Widget powered by EveryTrail: GPS Geotagging
2008/05/31 Santa Rosa周辺 90km?
Santa Rosa to Guerneville - Widget powered by EveryTrail: GPS Geotagging
2008/07/06-07 千葉県館山 330km (往復)