<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nkjmkzk.net</title>
	<atom:link href="http://nkjmkzk.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://nkjmkzk.net</link>
	<description>Virtualization, Operating System, Storage, Cloud Computing</description>
	<lastBuildDate>Wed, 08 Sep 2010 12:05:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
	<atom:link rel="hub" href="http://superfeedr.com/hubbub" />
			<item>
		<title>SSD(Intel X25-M)で寿命を確認するには</title>
		<link>http://nkjmkzk.net/?p=1380</link>
		<comments>http://nkjmkzk.net/?p=1380#comments</comments>
		<pubDate>Wed, 08 Sep 2010 12:00:50 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Linux / Unix]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[smart]]></category>
		<category><![CDATA[ssd]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1380</guid>
		<description><![CDATA[SSDではデータを書き込む際に素子を包む絶縁体が摩耗していき、この摩耗がいわゆる「SSDの寿命」につながっています。
プロダクション環境でSSDを搭載したサーバを運用する場合は、当然この寿命を定期的に監視しておきたいでしょう。実際、SSDを本番導入できないユーザの多くは膨大な容量が必要になる環境を運用しているか、HDDにはなかった寿命というdeadlineに不安をおぼえていることがほとんどだと思います。しかし稼働部品のないSSDはHDDに比べて衝撃に強く耐障害性が高いことが期待できます。なので寿命さえマネージできればSSDは恐るるに足らずということになります。
SSDの寿命確認について、今のところ各ベンダー間で統一したパラメータが提供されているわけではなく、S.M.A.R.T.に独自のパラメータをもたせて寿命確認の指標としているようです。
今回はIntel X25-Mでの寿命確認方法を紹介しておきます。IntelさんもS.M.A.R.T.にパラメータを持たせています。より公式な方法はIntelさんが提供するIntel SSD ToolBoxをインストールしてこのツールでS.M.A.R.T.のパラメータを引っぱってくるというやり方ですが、残念ながらIntel SSD ToolBoxは現時点ではWindows版しかないようです。僕は宗教上の理由でWindowsは使っていないのでLinuxで使えるsmartmontoolsを使ってこのパラメータを取得することになります。
まず、もしsmartmontoolsがインストールされていない場合はインストールします。大抵のディストリビューションではベースレポジトリにあるはずです。
X25-Mが差さっているマシンでsmartmontoolsをインストールしたら、smartctlコマンドでパラメータを確認できます。下記は/dev/sdaがSSDだという前提でのコマンド実行例です。
[root@~]# smartctl -a /dev/sda

smartctl 5.39.1 2010-01-28 r3054 [i686-pc-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     INTEL SSDSA2M080G2GC
Serial Number:    CVPO0082023A080BGN
Firmware Version: 2CV102HD
User Capacity:    80,026,361,856 bytes
Device is:        Not [...]]]></description>
			<content:encoded><![CDATA[<p>SSDではデータを書き込む際に素子を包む絶縁体が摩耗していき、この摩耗がいわゆる「SSDの寿命」につながっています。</p>
<p>プロダクション環境でSSDを搭載したサーバを運用する場合は、当然この寿命を定期的に監視しておきたいでしょう。実際、SSDを本番導入できないユーザの多くは膨大な容量が必要になる環境を運用しているか、HDDにはなかった寿命というdeadlineに不安をおぼえていることがほとんどだと思います。しかし稼働部品のないSSDはHDDに比べて衝撃に強く耐障害性が高いことが期待できます。なので寿命さえマネージできればSSDは恐るるに足らずということになります。</p>
<p>SSDの寿命確認について、今のところ各ベンダー間で統一したパラメータが提供されているわけではなく、S.M.A.R.T.に独自のパラメータをもたせて寿命確認の指標としているようです。</p>
<p>今回はIntel X25-Mでの寿命確認方法を紹介しておきます。IntelさんもS.M.A.R.T.にパラメータを持たせています。より公式な方法はIntelさんが提供するIntel SSD ToolBoxをインストールしてこのツールでS.M.A.R.T.のパラメータを引っぱってくるというやり方ですが、残念ながらIntel SSD ToolBoxは現時点ではWindows版しかないようです。僕は宗教上の理由でWindowsは使っていないのでLinuxで使えるsmartmontoolsを使ってこのパラメータを取得することになります。</p>
<p>まず、もしsmartmontoolsがインストールされていない場合はインストールします。大抵のディストリビューションではベースレポジトリにあるはずです。</p>
<p>X25-Mが差さっているマシンでsmartmontoolsをインストールしたら、smartctlコマンドでパラメータを確認できます。下記は/dev/sdaがSSDだという前提でのコマンド実行例です。</p>
<pre>[root@~]# smartctl -a /dev/sda

smartctl 5.39.1 2010-01-28 r3054 [i686-pc-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     INTEL SSDSA2M080G2GC
Serial Number:    CVPO0082023A080BGN
Firmware Version: 2CV102HD
User Capacity:    80,026,361,856 bytes
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   7
ATA Standard is:  ATA/ATAPI-7 T13 1532D revision 1
Local Time is:    Wed Sep  8 11:39:26 2010 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

General SMART Values:
Offline data collection status:  (0x00)	Offline data collection activity
					was never started.
					Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0)	The previous self-test routine completed
					without error or no self-test has ever
					been run.
Total time to complete Offline
data collection: 		 (   1) seconds.
Offline data collection
capabilities: 			 (0x75) SMART execute Offline immediate.
					No Auto Offline data collection support.
					Abort Offline collection upon new
					command.
					No Offline surface scan supported.
					Self-test supported.
					Conveyance Self-test supported.
					Selective Self-test supported.
SMART capabilities:            (0x0003)	Saves SMART data before entering
					power-saving mode.
					Supports SMART auto save timer.
Error logging capability:        (0x01)	Error logging supported.
					General Purpose Logging supported.
Short self-test routine
recommended polling time: 	 (   1) minutes.
Extended self-test routine
recommended polling time: 	 (   1) minutes.
Conveyance self-test routine
recommended polling time: 	 (   1) minutes.

SMART Attributes Data Structure revision number: 5
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  3 Spin_Up_Time            0x0020   100   100   000    Old_age   Offline      -       0
  4 Start_Stop_Count        0x0030   100   100   000    Old_age   Offline      -       0
  5 Reallocated_Sector_Ct   0x0032   100   100   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       2807
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       46
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       22
225 Load_Cycle_Count        0x0030   200   200   000    Old_age   Offline      -       22301
226 Load-in_Time            0x0032   100   100   000    Old_age   Always       -       573
227 Torq-amp_Count          0x0032   100   100   000    Old_age   Always       -       3
228 Power-off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       4278423803
<span style="color: #ff0000;">232 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
233 Media_Wearout_Indicator 0x0032   099   099   000    Old_age   Always       -       0
<span style="color: #000000;">184 End-to-End_Error        0x0033   100   100   099    Pre-fail  Always  </span>     -       0</span>

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]

Note: selective self-test log revision number (0) not 1 implies that no selective self-test has ever been run
SMART Selective self-test log data structure revision number 0
Note: revision number not 1 implies that no selective self-test has ever been run
 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.</pre>
<p>赤字の部分が寿命に該当するパラメータです。これらのパラメータをIntelさんのサイトから引用させていただきました。</p>
<blockquote><p>E8	Available Reserved Space	Normalized	予約領域の残っている数を表す。正規化した (Normalized) 値は、100 パーセントを表す 100 から始まる。正常の範囲は 10 パーセントまで。<br />
E9	Media Wearout Indicator	Normalized	記録メディアであるフラッシュメモリーの使い込んだ程度を表す。平均消去回数が増えるにつれ、正規化した (Normalized) 値が 100 から 1 へ減少していく。</p></blockquote>
<p>なお、smartmontoolsのバージョンが5.38以下の場合、これらのATTRIBUITE_NAMEはUnknownと表示されます。</p>
<p>運用方法としてはこれらの値をスクリプトでしきい値を設けて定期チェックする等が考えられるでしょう。</p>
<h2>参考</h2>
<ul>
<li><a href="http://www.intel.co.jp/jp/consumer/Shop/diy/features/ssd/optimizer/p6.htm">Intel SSDオプティマイザーとは？</a></li>
<li><a href="http://sourceforge.net/apps/trac/smartmontools/wiki">smartmontools</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1380</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle&#8217;s Sun Unified Storageのシミュレーターを使ってみよう</title>
		<link>http://nkjmkzk.net/?p=1368</link>
		<comments>http://nkjmkzk.net/?p=1368#comments</comments>
		<pubDate>Tue, 07 Sep 2010 11:07:36 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Storage]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1368</guid>
		<description><![CDATA[OracleではUnified StorageというI/Aサーバ+Solaris ZFSを用いたストレージ製品を販売しています。Unifed Storageは下記のような特徴があります。

ZFSベースのDedup, Compression, RAID, Snapshot, Replication等が標準機能として使え、かなり直感的な専用のGUIが付属している。
機能の追加によるオプションライセンス発生は一切なし。全ての機能がベースの価格に含まれる。

そしてこのUnified Storageの使用感を手軽に試せるシミュレーターが提供されています。
これはVirtualBoxのアプライアンス（VM）として起動させるもので、OracleのWebサイトからフリーでダウンロードできます。
Oracle&#8217;s Sun Unified Storage Simulator
リンク先にはセットアップ方法も書いてありますが、基本的には下記の流れですぐに使えるようになります。

（まだインストールしてなければ）VirtualBoxをインストールする
Simulatorをダウンロードして解凍する
VirtualBoxを起動して解凍したSimulatorアプライアンスをインポートする

あとはインポートしたVMを起動し、最初の簡単なネットワーク設定ウィザードに従ってセットアップするだけです。
Simulatorを実際に僕が操作してみた動画を貼付けておきます。これだけでもかなりUnified Storageを使ったボリューム作成等のイメージが湧き、直感的なユーザインターフェースを感じていただけると思います。

]]></description>
			<content:encoded><![CDATA[<p>OracleではUnified StorageというI/Aサーバ+Solaris ZFSを用いたストレージ製品を販売しています。Unifed Storageは下記のような特徴があります。</p>
<ul>
<li>ZFSベースのDedup, Compression, RAID, Snapshot, Replication等が標準機能として使え、<strong>かなり直感的な</strong>専用のGUIが付属している。</li>
<li>機能の追加によるオプションライセンス発生は一切なし。全ての機能がベースの価格に含まれる。</li>
</ul>
<p>そしてこのUnified Storageの使用感を手軽に試せるシミュレーターが提供されています。<br />
これはVirtualBoxのアプライアンス（VM）として起動させるもので、OracleのWebサイトからフリーでダウンロードできます。</p>
<p><a href="http://www.oracle.com/webapps/dialogue/dlgpage.jsp?p_ext=Y&amp;p_dlg_id=8588618&amp;src=6870265&amp;Act=7">Oracle&#8217;s Sun Unified Storage Simulator</a></p>
<p>リンク先にはセットアップ方法も書いてありますが、基本的には下記の流れですぐに使えるようになります。</p>
<ol>
<li>（まだインストールしてなければ）VirtualBoxをインストールする</li>
<li>Simulatorをダウンロードして解凍する</li>
<li>VirtualBoxを起動して解凍したSimulatorアプライアンスをインポートする</li>
</ol>
<p>あとはインポートしたVMを起動し、最初の簡単なネットワーク設定ウィザードに従ってセットアップするだけです。</p>
<p>Simulatorを実際に僕が操作してみた動画を貼付けておきます。これだけでもかなりUnified Storageを使ったボリューム作成等のイメージが湧き、直感的なユーザインターフェースを感じていただけると思います。<br />
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/1l3qIREZP0w?fs=1&amp;hl=ja_JP"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/1l3qIREZP0w?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1368</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle Sun Technology Updateに行ってきました</title>
		<link>http://nkjmkzk.net/?p=1332</link>
		<comments>http://nkjmkzk.net/?p=1332#comments</comments>
		<pubDate>Fri, 20 Aug 2010 18:29:13 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Linux / Unix]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[dtrace]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1332</guid>
		<description><![CDATA[昨日、8/19に目黒雅叙園にてOracle Sun Technology Updateが開催されました。3Track x 3でセッションが開催され、各セッションは大きく分けてJavaとSolarisを扱う内容でした。その中でも最新情報の提供を行うようなセッションと、DTraceチュートリアルのような具体的な技術話とかなり幅広い内容が提供されたように思います。
僕はSolaris Trackに一日中入り浸っていましたので簡単にレポートしたいと思います。
B-1 Solaris開発環境のご紹介

大曽根 明さん
Mr.Solarisの異名をとる大曽根さんはOracle Solaris Operating Systemについてこれまでを振り返り、今後のロードマップを紹介しました。
次に新しいH/Wサポートメニュー「Premier Support for Systems」についても紹介しました。Premier Support for SystemsはH/Wの保守プログラムでありながら、同時にOracle Solaris, Oracle Enterprise Linux, Oracle VMが使いたい放題になることを説明。
また、ZFS, Containerについて概要を紹介し、特にZFSについては「非クラスター型で現在最強のファイルシステムだろう」と指摘。そしてSun Studioを使ったデモを披露する等幅広い内容をカバー。
B-2 開発環境でのSolaris ZFS

野崎 宏明さん
先のセッションで「最強」とされたZFSについて、こちらの@IT記事でもわかりやすい解説をされてる野崎さんからプレゼン。End-to-Endの整合性チェック機構、CoW等ZFSの根幹を成す内部アーキテクチャについて説明。
B-3 DTrace活用術
ZFSと並ぶSolarisの代表的な機構であるDTraceについて藤田さん、本間さんからプレゼン。

藤田 勇治さん
藤田さんはDTraceが何であるのか、どういった情報がとれて、どのように活用できるのかという全体象を事例を交えて紹介。端的で軽快なトークでDTraceのメリットを限られた時間ながら非常にわかり易く説明されていました。カーネルを特別なビルドオプション付きでコンパイルしたりする必要がない、特別な起動オプションもいらない、その場でほしい情報を動的に出力させることができる、ということがズドンと理解できる濃密な時間でした。

本間 大輔さん
本間さんはDTraceのHow toを紹介。「こういう情報をとりたいときは・・」という切り口で実際のスクリプトを見せて解説しながら出力結果を確認していくという実践的なセッション。持ち時間は30分足らずであるにもかかわらずDTraceのサンプルスクリプトを含む実用的な資料を120枚作成するというパッション。事実、この資料はこれからDTraceを使ってみたい！という人にはバイブルでしょう。必見です。バイブルのダウンロードはこちら。
DTrace活用術
特別企画トークライブ：「2020年に向けてITエンジニアはどうやって生き残るか？」

ウルシステムズ（株）の漆原様、（株）Preferred Infrastureの太田様、クックパッド（株）大野様によるパネルディスカッション。モデレータは弊社の伊藤さん。
はっきり言って、かなり面白いディスカッションでした。何が面白かったかというと、みなさんそれぞれ強い信念をお持ちで、その信念が名言となって出てくるとことです。僕が特に印象に残った名言を下記に挙げさせていただきました。

製品や技術にコミットするかどうかは開発者に会って決める。信頼できるヤツならいける。（漆原様）
めちゃ難しいプロジェクトを社員に任せる。できたら、目一杯給料を払ってあげる。それを繰り返す。（漆原様）
今日欲しいと言われたものは明日提供できなければそこに感動はない。（大野様）
やりたいことをやる。やりたくないことはやらない。やりたいことを宣言する。（大野様）

それぞれ深い思考や経験を元にしたパワフルな持論です。共感する部分や「なるほど〜」な気付きもあり、非常に有益な時間だったと思います。
個人的には今後SunのテクノロジーとOracleのテクノロジーの合体技をより具体的に訴求するようなセミナーをやりたいなと思っています。Solaris, ASM, ZFS、このあたりがキーワードになるでしょう。楽しくなりそうです。
]]></description>
			<content:encoded><![CDATA[<p>昨日、8/19に目黒雅叙園にてOracle Sun Technology Updateが開催されました。3Track x 3でセッションが開催され、各セッションは大きく分けてJavaとSolarisを扱う内容でした。その中でも最新情報の提供を行うようなセッションと、DTraceチュートリアルのような具体的な技術話とかなり幅広い内容が提供されたように思います。</p>
<p>僕はSolaris Trackに一日中入り浸っていましたので簡単にレポートしたいと思います。</p>
<h2>B-1 Solaris開発環境のご紹介</h2>
<p><img src="http://farm5.static.flickr.com/4076/4909250258_5ea682095f.jpg" alt="DSC_0015" width="500" height="332" /><br />
<strong>大曽根 明さん</strong></p>
<p>Mr.Solarisの異名をとる大曽根さんはOracle Solaris Operating Systemについてこれまでを振り返り、今後のロードマップを紹介しました。</p>
<p>次に新しいH/Wサポートメニュー「Premier Support for Systems」についても紹介しました。<strong>Premier Support for SystemsはH/Wの保守プログラムでありながら、同時にOracle Solaris, Oracle Enterprise Linux, Oracle VMが使いたい放題になることを説明。</strong></p>
<p>また、ZFS, Containerについて概要を紹介し、特にZFSについては<strong>「非クラスター型で現在最強のファイルシステムだろう」</strong>と指摘。そしてSun Studioを使ったデモを披露する等幅広い内容をカバー。</p>
<h2>B-2 開発環境でのSolaris ZFS</h2>
<p><img src="http://farm5.static.flickr.com/4120/4909250556_36c9ef12f0.jpg" alt="DSC_0032" width="500" height="332" /><br />
<strong>野崎 宏明さん</strong></p>
<p>先のセッションで「最強」とされたZFSについて、<a href="http://www.atmarkit.co.jp/fserver/articles/zfs/01/01.html">こちらの@IT記事</a>でもわかりやすい解説をされてる野崎さんからプレゼン。End-to-Endの整合性チェック機構、CoW等ZFSの根幹を成す内部アーキテクチャについて説明。</p>
<h2>B-3 DTrace活用術</h2>
<p>ZFSと並ぶSolarisの代表的な機構であるDTraceについて藤田さん、本間さんからプレゼン。<br />
<img src="http://farm5.static.flickr.com/4081/4908655437_bf38e40e8c.jpg" alt="DSC_0038" width="500" height="332" /><br />
<strong>藤田 勇治さん</strong></p>
<p>藤田さんはDTraceが何であるのか、どういった情報がとれて、どのように活用できるのかという全体象を事例を交えて紹介。端的で軽快なトークでDTraceのメリットを限られた時間ながら非常にわかり易く説明されていました。<strong>カーネルを特別なビルドオプション付きでコンパイルしたりする必要がない</strong>、<strong>特別な起動オプションもいらない</strong>、<strong>その場でほしい情報を動的に出力させることができる</strong>、ということがズドンと理解できる濃密な時間でした。</p>
<p><img src="http://farm5.static.flickr.com/4141/4908655697_129171de17.jpg" alt="DSC_0042" width="500" height="332" /><br />
<strong>本間 大輔さん</strong></p>
<p>本間さんはDTraceのHow toを紹介。「こういう情報をとりたいときは・・」という切り口で実際のスクリプトを見せて解説しながら出力結果を確認していくという実践的なセッション。持ち時間は30分足らずであるにもかかわらず<strong>DTraceのサンプルスクリプトを含む実用的な資料を120枚作成するというパッション</strong>。事実、この資料はこれからDTraceを使ってみたい！という人にはバイブルでしょう。必見です。バイブルのダウンロードはこちら。<br />
<a href="http://nkjmkzk.net/wp-content/uploads/2010/08/Leverage_DTrace.pdf">DTrace活用術</a></p>
<h2>特別企画トークライブ：「2020年に向けてITエンジニアはどうやって生き残るか？」</h2>
<p><img src="http://farm5.static.flickr.com/4121/4908655967_0e670a7859.jpg" alt="DSC_0044" width="500" height="332" /><br />
ウルシステムズ（株）の漆原様、（株）Preferred Infrastureの太田様、クックパッド（株）大野様によるパネルディスカッション。モデレータは弊社の伊藤さん。<br />
はっきり言って、かなり面白いディスカッションでした。何が面白かったかというと、みなさんそれぞれ強い信念をお持ちで、その信念が名言となって出てくるとことです。僕が特に印象に残った名言を下記に挙げさせていただきました。</p>
<ul>
<li>製品や技術にコミットするかどうかは開発者に会って決める。信頼できるヤツならいける。（漆原様）</li>
<li>めちゃ難しいプロジェクトを社員に任せる。できたら、目一杯給料を払ってあげる。それを繰り返す。（漆原様）</li>
<li>今日欲しいと言われたものは明日提供できなければそこに感動はない。（大野様）</li>
<li>やりたいことをやる。やりたくないことはやらない。やりたいことを宣言する。（大野様）</li>
</ul>
<p>それぞれ深い思考や経験を元にしたパワフルな持論です。共感する部分や「なるほど〜」な気付きもあり、非常に有益な時間だったと思います。</p>
<p>個人的には今後SunのテクノロジーとOracleのテクノロジーの合体技をより具体的に訴求するようなセミナーをやりたいなと思っています。Solaris, ASM, ZFS、このあたりがキーワードになるでしょう。楽しくなりそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1332</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ACFSのスナップショットで日次バックアップ ＆ 差分レプリケーション</title>
		<link>http://nkjmkzk.net/?p=1324</link>
		<comments>http://nkjmkzk.net/?p=1324#comments</comments>
		<pubDate>Tue, 10 Aug 2010 14:20:57 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Storage]]></category>
		<category><![CDATA[acfs]]></category>
		<category><![CDATA[asm]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1324</guid>
		<description><![CDATA[ACFSにはスナップショット機能が実装されています。
例えば、/u01/acfsにACFSファイルシステムがマウントされている場合下記のようにしてスナップショットを取得することができます。

[root@guest]# acfsutil snap create `date +%Y%m%d` /u01/acfs

スナップショットは/u01/acfs/.ACFS/snaps/YYYYmmdd以下に作成されます。これは通常のディレクトリ／ファイルとしてlsやcatなどで中身を確認することができます。バックアップの中身がすぐに確認できちゃう、というのは便利ですよね。
ただ、これだけだとあくまでもスナップショットによる論理バックアップです。ファイルシステムの改ざんやミスオペレーション時の復旧は可能ですが、RAID損傷等の物理的な障害時には機能しないバックアップです。物理的な障害時にもバックアップできるように異なるH/W間でレプリケーションさせておくことが考えられます。現時点での最新リリースGrid Infrastructure 11.2.0.1にはレプリケーション機能は実装されていません。
ACFSはGrid Infrastructureに含まれます
ということで伝統的なrsyncを使ってACFSスナップショットからリモートホストへ差分レプリケーションを実現するワンライナーを紹介しておきます。

[root@guest]# rsync -ave ssh --delete --exclude='.ACFS' --exclude='lost+found'  /u01/acfs/.ACFS/snaps/`date +%Y%m%d`/  [バックアップサーバのユーザ名]@[バックアップサーバのIP]:[ディレクトリ]

これで先ほど取得したスナップショットの内容をリモートホストに複製（レプリケート）することができます。初回実行時にはまだリモートホスト側にデータがまったく存在しないのでフルレプリケーションになりますが、次回からはレプリケート済みのデータと今回転送するデータとの差分のみが転送されます。また、リモート側には存在するがもうオリジナルには存在しないデータはリモート側から削除されます。つまりオリジナルの最新スナップショットとリモートの複製は一日毎に同期することになります。
なので先ほどのACFSスナップショットのコマンドとrsyncのレプリケーションコマンドをcronに登録しておけば日次でスナップショットを取得して論理障害に備えつつ、リモートホストにバックアップを複製して物理障害に備えることができます。
]]></description>
			<content:encoded><![CDATA[<p>ACFSにはスナップショット機能が実装されています。</p>
<p>例えば、/u01/acfsにACFSファイルシステムがマウントされている場合下記のようにしてスナップショットを取得することができます。</p>
<pre>
[root@guest]# acfsutil snap create `date +%Y%m%d` /u01/acfs
</pre>
<p>スナップショットは/u01/acfs/.ACFS/snaps/YYYYmmdd以下に作成されます。これは通常のディレクトリ／ファイルとしてlsやcatなどで中身を確認することができます。バックアップの中身がすぐに確認できちゃう、というのは便利ですよね。</p>
<p>ただ、これだけだとあくまでもスナップショットによる論理バックアップです。ファイルシステムの改ざんやミスオペレーション時の復旧は可能ですが、RAID損傷等の物理的な障害時には機能しないバックアップです。物理的な障害時にもバックアップできるように異なるH/W間でレプリケーションさせておくことが考えられます。現時点での最新リリースGrid Infrastructure 11.2.0.1にはレプリケーション機能は実装されていません。</p>
<blockquote><p>ACFSはGrid Infrastructureに含まれます</p></blockquote>
<p>ということで伝統的なrsyncを使ってACFSスナップショットからリモートホストへ差分レプリケーションを実現するワンライナーを紹介しておきます。</p>
<pre>
[root@guest]# rsync -ave ssh --delete --exclude='.ACFS' --exclude='lost+found'  /u01/acfs/.ACFS/snaps/`date +%Y%m%d`/  [バックアップサーバのユーザ名]@[バックアップサーバのIP]:[ディレクトリ]
</pre>
<p>これで先ほど取得したスナップショットの内容をリモートホストに複製（レプリケート）することができます。初回実行時にはまだリモートホスト側にデータがまったく存在しないのでフルレプリケーションになりますが、次回からはレプリケート済みのデータと今回転送するデータとの差分のみが転送されます。また、リモート側には存在するがもうオリジナルには存在しないデータはリモート側から削除されます。つまりオリジナルの最新スナップショットとリモートの複製は一日毎に同期することになります。</p>
<p>なので先ほどのACFSスナップショットのコマンドとrsyncのレプリケーションコマンドをcronに登録しておけば日次でスナップショットを取得して論理障害に備えつつ、リモートホストにバックアップを複製して物理障害に備えることができます。</p>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1324</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle VMをCisco UCS + Palo(M81KR)で検証しました</title>
		<link>http://nkjmkzk.net/?p=1309</link>
		<comments>http://nkjmkzk.net/?p=1309#comments</comments>
		<pubDate>Sat, 07 Aug 2010 13:48:00 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[oraclevm]]></category>
		<category><![CDATA[palo]]></category>
		<category><![CDATA[pci-passthrough]]></category>
		<category><![CDATA[ucs]]></category>
		<category><![CDATA[vt-d]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1309</guid>
		<description><![CDATA[8/6のOracle VM Forumで発表させていただきましたが、Oracle VMとCisco UCSを組み合わせて検証しました。検証の焦点はCisco UCSに装着したCNA, 「Palo」ことM81KRを認識できるかということと、その性能です。
M81KRはmezzanine cardですが一枚のM81KRで最大128個の仮想NICを作成できるところがポイントです。さらにOS側には特段SR-IOV対応等は必要ありません。OSはM81KRで作成された仮想NICを普通のPCIデバイスとして認識します。
Cisco UCS M81KR 仮想インターフェイス カード
結論から言うとまず認識に関してはまったく問題ありませんでした。
Oracle VM Serverでlspciコマンドを実行し、認識しているPCIデバイスを確認するとM81KRで作成した仮想NICは下記のように表示されます。
[root@vmserver]# lspci
0c:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0d:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0e:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0f:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
10:00.0 [...]]]></description>
			<content:encoded><![CDATA[<p>8/6のOracle VM Forumで発表させていただきましたが、Oracle VMとCisco UCSを組み合わせて検証しました。検証の焦点はCisco UCSに装着したCNA, 「Palo」ことM81KRを認識できるかということと、その性能です。</p>
<p>M81KRはmezzanine cardですが一枚のM81KRで最大128個の仮想NICを作成できるところがポイントです。さらにOS側には特段SR-IOV対応等は必要ありません。OSはM81KRで作成された仮想NICを普通のPCIデバイスとして認識します。</p>
<p><a href="http://www.cisco.com/web/JP/product/hs/ucs/ucs_b/prodlit/data_sheet_c78-525049.html">Cisco UCS M81KR 仮想インターフェイス カード</a></p>
<p>結論から言うとまず認識に関してはまったく問題ありませんでした。</p>
<p>Oracle VM Serverでlspciコマンドを実行し、認識しているPCIデバイスを確認するとM81KRで作成した仮想NICは下記のように表示されます。</p>
<pre>[root@vmserver]# lspci
0c:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0d:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0e:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
0f:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)
10:00.0 Ethernet controller: Cisco Systems Inc 10G Ethernet NIC (rev a2)</pre>
<p>lspciの出力は、デバイスから得られるPCI IDと、/usr/share/hwdata/pci.idsに格納されているPCI IDを照合してデバイス名を表示しています。したがってlspciでデバイス名が得られたからといってドライバがこのデバイスを認識しているかどうか（つまりNICとして使用可能な状態かどうか）は別問題です。</p>
<p>M81KRが作成する仮想NICを利用するにはenicというドライバが必要になります。これはまだ多くのLinuxディストリビューションには含まれていないため、別途Ciscoさんのサイトからダウンロードしてインストールする必要があります。RHEL5.x, OEL5.xであればRPMが用意されています。しかし今回僕も初めて気がつきましたが、Oracle VM Server 2.2.1はこのenicドライバを標準でインストールしてあります。なのでM81KRで作成した仮想NICはOracle VM Serverからは別途ドライバをインストールせずともNICとして正しく認識され、ethX, xenbrXが自動的に作成されます。</p>
<p>一方、この仮想NICを有効活用するにはPCI Passthroughが効果的でしょう。その場合はこのデバイスに対するドライバが必要となるのはゲストOS（仮想マシン）の方です。Passthrough設定を行うとVM Server（つまりdom0）からはそのNICは見えなくなります（ただし依然としてlspciの出力には現れます）。したがってPassthroughした先のゲストOSでこのNICを利用するにはゲストOS側にenicドライバをインストールする必要があります。</p>
<blockquote><p>RHEL5.x, OEL5.xではenicドライバはバンドルされていませんが、RHEL6.x, OEL6.xでは標準でバンドルされるようです。</p></blockquote>
<blockquote><p>2010年8月時点ではOracle VM ServerでのPCI Passthroughは公式サポートされていません。チャレンジャーな方は下記に手順を紹介しますのでトライしてみてください。</p></blockquote>
<p>Oracle VM Serverで上記の仮想NICをPassthroughするにはまずUCSの該当ブレードでVT-d（I/O Virtualization）がEnabledとなっていることを確認します。<br />
次にOracle VM Serverのgrub.confを編集してI/O Virtualizationを有効にしてOSを再起動します。</p>
<pre>title Oracle VM Server-ovs (xen-64-3.4.0 2.6.18-128.2.1.4.25.el5ovs)
        root (hd0,0)
        kernel /xen-64bit.gz dom0_mem=547M <span style="color: #ff0000;">iommu=pv</span>
        module /vmlinuz-2.6.18-128.2.1.4.25.el5xen ro root=UUID=f1b13de3-adb2-4b5a-a6e9-a8beda1b4f73
        module /initrd-2.6.18-128.2.1.4.25.el5xen.img</pre>
<p>OSが起動したら下記のコマンドでI/O Virtualizationが有効化されていることを確認します。</p>
<pre>[root@vmserver]# xm dmesg | grep 'I/O virtualisation'
(XEN) I/O virtualisation enabled
(XEN) I/O virtualisation for PV guests enabled</pre>
<p>次にmodprobe.confに下記の記述を追加し、再起動を行います。これはdom0からPCIデバイスを隠蔽するための設定です。（0000:0c:00.0はdom0用に残しておきます）</p>
<pre>install enic /sbin/modprobe pciback ; /sbin/modprobe --first-time --ignore-install enic
options pciback hide=(0000:0d:00.0)(0000:0e:00.0)(0000:0f:00.0)(0000:10:00.0)</pre>
<p>ifconfig -a等でインターフェースを確認してみるとと、先ほどまでこれらの仮想NICにひもづいて作成されていたethXやxenbrXがなくなるはずです。</p>
<p>その代わりにPCIデバイスはPassthrough用にプールされています。xmコマンドで確認可能です。</p>
<pre>[root@vmserver]# xm pci-list-assignable-device
0000:0d:00.0
0000:0e:00.0
0000:0f:00.0
0000:10:00.0</pre>
<p>ここにリストされているPCIデバイスはゲストOSにPassthrough可能になっています。仮想マシンの設定ファイルを編集してPCIデバイスを割り当てます。ここではPVHVMを使用しています。</p>
<blockquote><p>単なるHVMでももちろん可能ですが、PVMの場合はPVMのgrub.confにも少し設定が必要です。</p></blockquote>
<p>ネットワークの内部構成は下図のようになります。</p>
<p><img class="alignnone size-full wp-image-1318" title="スクリーンショット（2010-08-07 13.40.36）" src="http://nkjmkzk.net/wp-content/uploads/2010/08/スクリーンショット（2010-08-07-13.40.36）.png" alt="スクリーンショット（2010-08-07 13.40.36）" width="508" height="479" /></p>
<pre>[root@vmserver]# vi /OVS/running_pool/oel55-phvm-01/vm.cfg
acpi = 1
apic = 1
builder = 'hvm'
device_model = '/usr/lib/xen/bin/qemu-dm'
disk = ['file:/OVS/running_pool/oel55-phvm-01/System.img,hda,w']
kernel = '/usr/lib/xen/boot/hvmloader'
keymap = 'en-us'
memory = 1000
name = 'oel55-phvm-01'
on_crash = 'restart'
on_reboot = 'restart'
pae = 1
serial = 'pty'
timer_mode = '2'
uuid = '313105b6-15ac-d7ea-de41-0ef0a90d302a'
vcpus = 4
vif = ['bridge=xenbr0,mac=00:16:3E:42:C7:A9,type=netfront'] #これはPVドライバを利用したインターフェース
vif_other_config = []
<span style="color: #ff0000;">pci = ['0000:0d:00.0'] #PCI Passthroughの設定</span>
vnc = 1
vncconsole = 1
vnclisten = '0.0.0.0'
vncpasswd = ''
vncunused = 1</pre>
<p>これでゲストOSを起動します。まだゲストOSにenicドライバをインストールしていない場合はインストールします。<br />
ドライバ：<a href="http://tools.cisco.com/support/downloads/go/ImageList.x?relVer=1.3%281e%29&amp;mdfid=283004074&amp;sftType=Unified+Computing+System+%28UCS%29+Tools+and+Drivers+Bundle&amp;optPlat=Linux&amp;nodecount=2&amp;edesignator=null&amp;modelName=Cisco+UCS+B200+M2+Blade+Server&amp;treeMdfId=282558030&amp;treeName=Unified+Computing&amp;modifmdfid=&amp;imname=&amp;hybrid=Y&amp;imst=N&amp;lr=Y">http://tools.cisco.com/support/downloads/go/ImageList.x?relVer=1.3%281e%29&amp;mdfid=283004074&amp;sftType=Unified+Computing+System+%28UCS%29+Tools+and+Drivers+Bundle&amp;optPlat=Linux&amp;nodecount=2&amp;edesignator=null&amp;modelName=Cisco+UCS+B200+M2+Blade+Server&amp;treeMdfId=282558030&amp;treeName=Unified+Computing&amp;modifmdfid=&amp;imname=&amp;hybrid=Y&amp;imst=N&amp;lr=Y</a><br />
＊アカウントが必要です</p>
<pre>[root@guest]# rpm -ivh kmod-enic-1.3.1c-rhel5u5.x86_64.rpm</pre>
<p>そしてlspciコマンドで仮想NICをPCIデバイスとして認識できているか確認します。</p>
<pre>[root@guest]# lspci | grep Cisco
00:03.0 Ethernet controller: Cisco Systems Inc VIC Ethernet NIC (rev a2)</pre>
<p>ドライバをロードしてネットワークインターフェースが認識されることを確認します。</p>
<pre>[root@guest]# ls /sys/class/net
eth0 lo sit0
[root@guest]# modprobe enic
[root@guest]# ls /sys/class/net
eth0 <span style="color: #ff0000;">eth1</span> lo sit0</pre>
<p>あとはいつも通りネットワークインターフェースを設定するだけです。</p>
<p>性能値についてはOracle社のポリシー上公開できないのですが、かなりの値が期待できると思っていただいて間違いないでしょう。また、スピードが速い、というだけでなくdom0へのCPUインパクトが激減（というかほぼゼロ）になるのが素晴らしいところです。</p>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1309</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iSCSI Initiatorのタイムアウト設定</title>
		<link>http://nkjmkzk.net/?p=1298</link>
		<comments>http://nkjmkzk.net/?p=1298#comments</comments>
		<pubDate>Wed, 07 Jul 2010 04:20:02 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Linux / Unix]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[asm]]></category>
		<category><![CDATA[iSCSI]]></category>
		<category><![CDATA[storagegrid]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1298</guid>
		<description><![CDATA[Linux環境のiscsi-initiator-utilsを用いた際に重要となるタイムアウト関連の設定について。
信頼性の高いシステムでは当然iSCSIストレージへの接続も冗長化するという要件があります。汎用的な実装だとdevice-mapper-multipathを使ってストレージネットワークの障害に対しての冗長構成でとることができます。また、OracleのASMを使ったStorage GRID構成では複数ストレージをストライピング＆ミラーリングし、例えストレージが筐体ごとパワーダウンしてもオンラインで処理を継続することができます。このStorage GRID構成で重要なのがiSCSI Initiatorのタイムアウト設定です。
iSCSIストレージへの接続性に不具合が発生した場合、iSCSI Initiatorが死活監視によってそれを検出します。最終的にはiSCSI InitiatorがiSCSI Targetへの接続障害という判定を行い、それをI/Oエラーという形でOSに報告します。ASMはその報告をもってストレージの切り離しを行い、残るストレージで処理を再開、継続します。障害が起こってからiSCSI InitiatorがI/Oエラーを報告するまでの間は全てのI/Oが一旦保留されます。本番環境ではこの保留される時間を制御したいという要件が出てくるでしょう。
下記のような障害パターンで上記の保留期間を制御するためのiSCSI Initiator設定を紹介します。

クライアント側のNIC故障
iSCSIネットワーク断（ケーブル劣化、スイッチ故障）
iSCSIストレージのパワーダウン、コントローラ故障

ちなみにiSCSI InitiatorはOracle Enterprise Linux 5.4にバンドルされるiscsi-initiator-utils-6.2.0で動作を確認しています。前後のバージョンでもデフォルト値は変更されている可能性はありますが、挙動に大きな違いはないと思います。
重要なパラメータは下記の3つです。

node.conn[0].timeo.noop_out_interval（デフォルト5秒）

pingによるコネクションの死活監視間隔

node.conn[0].timeo.noop_out_timeout （デフォルト5秒）

pingによるコネクションの死活監視がコネクションエラーと判定するまでの待ち時間

node.session.timeo.replacement_timeout（デフォルト120秒）

コネクションエラーが発生してからI/Oエラーを返すまでの待ち時間。この時間までに死活監視がコネクション復帰を報告すればI/Oエラーは返らない。
デフォルト設定で障害が発生した場合、下記のような流れとなります。

死活監視のpingが発行される（タイミングによって障害発生から1〜5秒経過）
pingがタイムアウトする（+5秒経過）
継続して死活監視のpingが発行され、最終的にpingが成功しないとOSにI/Oエラーが返る（+120秒経過）
ASMがI/Oエラーを検出して障害ストレージを切り離し、残りのストレージで処理を再開する（即時）

経過時間をまとめると、(1〜5）+ 5 + 120 = 126〜130秒程の時間が切り替えまでに必要となります。
これを例えば障害試験等で確実に15秒程で切り替えを発動させたい場合は次のように設定すれば実現できます。

node.conn[0].timeo.noop_out_interval = 1


node.conn[0].timeo.noop_out_timeout = 5


node.session.timeo.replacement_timeout = 10

この場合経過時間は（〜1）+ 5 + 10 = 15〜16秒となります。
このiSCSI Initiatorのパラメータ設定は下記のiscsiadmコマンドで設定できます。ただし、ログイン済みのセッションについては反映されません。反映させるには一旦ログアウトし、再度ログインしてセッションを再確立させる必要があります。
[root@~]# iscsiadm -m node -p [ターゲットのIP] -o update -n [パラメータ名] -v [設定値]
また、/etc/iscsi/iscsid.confを編集しておくことで新たに登録されるiSCSIターゲットについてのデフォルト値を変更することができます。これは既に登録されているiSCSIターゲットには反映されないので注意してください。
]]></description>
			<content:encoded><![CDATA[<p>Linux環境のiscsi-initiator-utilsを用いた際に重要となるタイムアウト関連の設定について。</p>
<p>信頼性の高いシステムでは当然iSCSIストレージへの接続も冗長化するという要件があります。汎用的な実装だとdevice-mapper-multipathを使ってストレージネットワークの障害に対しての冗長構成でとることができます。また、OracleのASMを使ったStorage GRID構成では複数ストレージをストライピング＆ミラーリングし、例えストレージが筐体ごとパワーダウンしてもオンラインで処理を継続することができます。このStorage GRID構成で重要なのがiSCSI Initiatorのタイムアウト設定です。</p>
<p>iSCSIストレージへの接続性に不具合が発生した場合、iSCSI Initiatorが死活監視によってそれを検出します。最終的にはiSCSI InitiatorがiSCSI Targetへの接続障害という判定を行い、それをI/Oエラーという形でOSに報告します。ASMはその報告をもってストレージの切り離しを行い、残るストレージで処理を再開、継続します。障害が起こってからiSCSI InitiatorがI/Oエラーを報告するまでの間は全てのI/Oが一旦保留されます。本番環境ではこの保留される時間を制御したいという要件が出てくるでしょう。</p>
<p>下記のような障害パターンで上記の保留期間を制御するためのiSCSI Initiator設定を紹介します。</p>
<ul>
<li>クライアント側のNIC故障</li>
<li>iSCSIネットワーク断（ケーブル劣化、スイッチ故障）</li>
<li>iSCSIストレージのパワーダウン、コントローラ故障</li>
</ul>
<p>ちなみにiSCSI InitiatorはOracle Enterprise Linux 5.4にバンドルされるiscsi-initiator-utils-6.2.0で動作を確認しています。前後のバージョンでもデフォルト値は変更されている可能性はありますが、挙動に大きな違いはないと思います。</p>
<p>重要なパラメータは下記の3つです。</p>
<ul>
<li>node.conn[0].timeo.noop_out_interval（デフォルト5秒）</li>
</ul>
<p style="padding-left: 60px;">pingによるコネクションの死活監視間隔</p>
<ul>
<li>node.conn[0].timeo.noop_out_timeout （デフォルト5秒）</li>
</ul>
<p style="padding-left: 60px;">pingによるコネクションの死活監視がコネクションエラーと判定するまでの待ち時間</p>
<ul>
<li>node.session.timeo.replacement_timeout（デフォルト120秒）</li>
</ul>
<p style="padding-left: 60px;">コネクションエラーが発生してからI/Oエラーを返すまでの待ち時間。この時間までに死活監視がコネクション復帰を報告すればI/Oエラーは返らない。</p>
<p>デフォルト設定で障害が発生した場合、下記のような流れとなります。</p>
<ol>
<li>死活監視のpingが発行される（タイミングによって障害発生から1〜5秒経過）</li>
<li>pingがタイムアウトする（+5秒経過）</li>
<li>継続して死活監視のpingが発行され、最終的にpingが成功しないとOSにI/Oエラーが返る（+120秒経過）</li>
<li>ASMがI/Oエラーを検出して障害ストレージを切り離し、残りのストレージで処理を再開する（即時）</li>
</ol>
<p>経過時間をまとめると、(1〜5）+ 5 + 120 = 126〜130秒程の時間が切り替えまでに必要となります。</p>
<p>これを例えば障害試験等で確実に15秒程で切り替えを発動させたい場合は次のように設定すれば実現できます。</p>
<ul>
<li>node.conn[0].timeo.noop_out_interval = 1</li>
</ul>
<ul>
<li>node.conn[0].timeo.noop_out_timeout = 5</li>
</ul>
<ul>
<li>node.session.timeo.replacement_timeout = 10</li>
</ul>
<p>この場合経過時間は（〜1）+ 5 + 10 = 15〜16秒となります。</p>
<p>このiSCSI Initiatorのパラメータ設定は下記のiscsiadmコマンドで設定できます。ただし、ログイン済みのセッションについては反映されません。反映させるには一旦ログアウトし、再度ログインしてセッションを再確立させる必要があります。</p>
<pre>[root@~]# iscsiadm -m node -p [ターゲットのIP] -o update -n [パラメータ名] -v [設定値]</pre>
<p>また、/etc/iscsi/iscsid.confを編集しておくことで新たに登録されるiSCSIターゲットについてのデフォルト値を変更することができます。これは既に登録されているiSCSIターゲットには反映されないので注意してください。</p>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1298</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>オレ流クラウドの定義</title>
		<link>http://nkjmkzk.net/?p=1288</link>
		<comments>http://nkjmkzk.net/?p=1288#comments</comments>
		<pubDate>Thu, 01 Jul 2010 14:23:10 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cloud]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1288</guid>
		<description><![CDATA[先日、ようやくぴったりと自分の感覚にフィットするクラウドの定義を思いつきました。超端的に一文で表現。
「ガチガチに作り込んだ最強システムをみんなで使える形にしたもの」
ガチガチに作り込んだ、ってどんな？ということになります。
イメージし易いのはやはり比較的大規模なWebサービスを提供されている企業の自前システムでしょう。自前でSEを抱えてシステムを構築・運用されているところはいかに安く、安定して、スケーラブルで使い易いシステムを構築するかに創意工夫を凝らされています。そういうシステムの裏側を紹介する勉強会等はえてして面白いですよね。
素早くサーバを追加＆システムに組み込むためにPXEブートを駆使したディスクレス構成を組んでみたり、Cobbler等を使って高速なOSインストール環境を整えてみたり、PuppetやFuncを使って多数のサーバを一斉に操作するフレームワークを確立してみたりと、その筋の作り込みはめちゃ楽しいものです。しかしこういったシステムは一朝一夕で出来上がるものではなく、いろんな調査、検証や失敗経験から学んだ成果であり継続的なブラッシュアップがなされて完成度を高めていくものでしょう。
ある程度形になるまでは相当な努力と時間が必要ですが、軌道に乗れば自分たちにとって非常に都合のよい最適化された最強システムになっていきます。
こういったシステムはSIerが案件単位で構築することは現実的ではないでしょう。厳しい納期、各ステークホルダーの私利私欲による提案が交錯し、真に最適な姿を突き詰めるのは至難の業です。そこにはいくつもの妥協という大人の選択があります。
案件単位で個別にシステムを作っていく事はSIerにとっては飯の種かもしれませんが、エンドユーザは毎回システム毎にH/WやS/Wの購入を余儀なくされ、同じように設計、構築、テストという作業を発注することになります。しかもその結果構築されるシステムはWebサービス事業者が長年ブラッシュアップしているシステムと比較して、完成度で見劣りする可能性が多いにあり、また、費用も都度相当なものになることでしょう。国が大手SIerに発注しているシステム、とんでもない金額ですよね。「あんなの、あのイケイケの会社にお願いして作ってもらえば100分の1くらいの費用で済むんじゃないの？」と、納税者としてはクレームしたくもなります。
そう考えると、理想は「最強のオレオレ・システム」を汎用的に使えるようにすることではないかと思います。
これまでの調査・検証と経験、優秀なエンジニアの知見の粋を集めたオレオレ・システムの、、、

高速プロビジョニングの仕組みをシェアする
H/W障害時に高速にFailoverすることが検証済みである冗長構成をシェアする
ワンタッチで様々なオーダーが完了する運用フレームワークをシェアする

これができればIT業界はもっと政治的な要素がなくなり、純粋な技術的要素が強まるのではないかと思いを巡らせています。
実現するためのテクノロジーは問いません。高速プロビジョニングを仮想マシン＋CoWで実装する手法もあるでしょうし、前述のネットワークブートでベアメタルにOSを起動させる手法もあるでしょう。Real Application Clustersで耐障害性を確保するような高度な冗長構成もあるでしょうし、システムコンフィグレーションはシンプルに留め、人間的Failoverなシステムもあるでしょう。各手法によって一長一短あると思いますが重要なのは最終的に如何にサービスレベルが高く、運用が楽ちんで低コストなシステムが構築できるかだと思います。これがガチガチに作り込んだ最強システム。これに汎用性を持たせて第３者に開放できる状態にしたシステムが「クラウド」である、と考えました。
]]></description>
			<content:encoded><![CDATA[<p>先日、ようやくぴったりと自分の感覚にフィットするクラウドの定義を思いつきました。超端的に一文で表現。</p>
<h2>「ガチガチに作り込んだ最強システムをみんなで使える形にしたもの」</h2>
<p>ガチガチに作り込んだ、ってどんな？ということになります。</p>
<p>イメージし易いのはやはり比較的大規模なWebサービスを提供されている企業の自前システムでしょう。自前でSEを抱えてシステムを構築・運用されているところはいかに安く、安定して、スケーラブルで使い易いシステムを構築するかに創意工夫を凝らされています。そういうシステムの裏側を紹介する勉強会等はえてして面白いですよね。</p>
<p>素早くサーバを追加＆システムに組み込むためにPXEブートを駆使したディスクレス構成を組んでみたり、Cobbler等を使って高速なOSインストール環境を整えてみたり、PuppetやFuncを使って多数のサーバを一斉に操作するフレームワークを確立してみたりと、その筋の作り込みはめちゃ楽しいものです。しかしこういったシステムは一朝一夕で出来上がるものではなく、いろんな調査、検証や失敗経験から学んだ成果であり継続的なブラッシュアップがなされて完成度を高めていくものでしょう。</p>
<p>ある程度形になるまでは相当な努力と時間が必要ですが、軌道に乗れば自分たちにとって非常に都合のよい最適化された最強システムになっていきます。</p>
<p>こういったシステムはSIerが案件単位で構築することは現実的ではないでしょう。厳しい納期、各ステークホルダーの私利私欲による提案が交錯し、真に最適な姿を突き詰めるのは至難の業です。そこにはいくつもの妥協という大人の選択があります。</p>
<p>案件単位で個別にシステムを作っていく事はSIerにとっては飯の種かもしれませんが、エンドユーザは毎回システム毎にH/WやS/Wの購入を余儀なくされ、同じように設計、構築、テストという作業を発注することになります。しかもその結果構築されるシステムはWebサービス事業者が長年ブラッシュアップしているシステムと比較して、完成度で見劣りする可能性が多いにあり、また、費用も都度相当なものになることでしょう。国が大手SIerに発注しているシステム、とんでもない金額ですよね。「あんなの、あのイケイケの会社にお願いして作ってもらえば100分の1くらいの費用で済むんじゃないの？」と、納税者としてはクレームしたくもなります。</p>
<p>そう考えると、理想は「最強のオレオレ・システム」を汎用的に使えるようにすることではないかと思います。</p>
<p>これまでの調査・検証と経験、優秀なエンジニアの知見の粋を集めたオレオレ・システムの、、、</p>
<ul>
<li>高速プロビジョニングの仕組みをシェアする</li>
<li>H/W障害時に高速にFailoverすることが検証済みである冗長構成をシェアする</li>
<li>ワンタッチで様々なオーダーが完了する運用フレームワークをシェアする</li>
</ul>
<p>これができればIT業界はもっと政治的な要素がなくなり、純粋な技術的要素が強まるのではないかと思いを巡らせています。</p>
<p>実現するためのテクノロジーは問いません。高速プロビジョニングを仮想マシン＋CoWで実装する手法もあるでしょうし、前述のネットワークブートでベアメタルにOSを起動させる手法もあるでしょう。Real Application Clustersで耐障害性を確保するような高度な冗長構成もあるでしょうし、システムコンフィグレーションはシンプルに留め、人間的Failoverなシステムもあるでしょう。各手法によって一長一短あると思いますが重要なのは最終的に如何にサービスレベルが高く、運用が楽ちんで低コストなシステムが構築できるかだと思います。これがガチガチに作り込んだ最強システム。これに汎用性を持たせて第３者に開放できる状態にしたシステムが「クラウド」である、と考えました。</p>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1288</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZFSでtpgtを使って接続先ポートを限定する</title>
		<link>http://nkjmkzk.net/?p=1277</link>
		<comments>http://nkjmkzk.net/?p=1277#comments</comments>
		<pubDate>Mon, 28 Jun 2010 15:03:37 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Storage]]></category>
		<category><![CDATA[tpgt]]></category>
		<category><![CDATA[ZFS]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1277</guid>
		<description><![CDATA[ZFSはご存知の通りzvolを作成してiSCSIでエクスポートすることができます。
とある環境でZFSサーバは複数のネットワークセグメントに接続されており、当然それぞれのセグメントでIPアドレスが割り振られているとします（多くの環境ではそのようになっているでしょう）。そのときzfs set shareiscsi=on [ZVOL]としてzvolをエクスポートすると、すべてのセグメントでzvolがエクスポートされてしまいます。

iSCSIセグメントからDiscoveryしにいったiSCSIクライアントにも1zvolにつき複数のターゲットが見えてしまいます。これは多くの環境で望ましくない挙動でしょう。本来はzvolがエクスポートされるのはiSCSIのストレージセグメントだけに留めておきたいはずです。
zvolがエクスポートされるセグメントを設定するにはtpgt (Target Port Group Tag)が有効です。tpgtを使えば下図のようにzvolをエクスポートするセグメントを限定できます。

設定手順です。
まずtpgtを作成します。tpgtの名前には1〜65535の任意の数字を割り当てます。
[root@~]# iscsitadm create tpgt 1
作成したtpgtにzvolをエクスポートしたいIPアドレスを追加します。
[root@~]# iscsitadm modify tpgt -i 10.2.0.1 1
zvolのアクセス制御リストとして作成したtpgtを設定します。
[root@~]# iscsitadm modify target -p 1 [TARGET]
これでtpgt 1に参加している10.2.0.1だけがzvolのエクスポート対象となります。
]]></description>
			<content:encoded><![CDATA[<p>ZFSはご存知の通りzvolを作成してiSCSIでエクスポートすることができます。</p>
<p>とある環境でZFSサーバは複数のネットワークセグメントに接続されており、当然それぞれのセグメントでIPアドレスが割り振られているとします（多くの環境ではそのようになっているでしょう）。そのときzfs set shareiscsi=on [ZVOL]としてzvolをエクスポートすると、すべてのセグメントでzvolがエクスポートされてしまいます。</p>
<p><img class="alignnone size-full wp-image-1278" title="名称未設定.001" src="http://nkjmkzk.net/wp-content/uploads/2010/06/名称未設定.001.png" alt="名称未設定.001" width="350" height="394" /></p>
<p>iSCSIセグメントからDiscoveryしにいったiSCSIクライアントにも1zvolにつき複数のターゲットが見えてしまいます。これは多くの環境で望ましくない挙動でしょう。本来はzvolがエクスポートされるのはiSCSIのストレージセグメントだけに留めておきたいはずです。</p>
<p>zvolがエクスポートされるセグメントを設定するにはtpgt (Target Port Group Tag)が有効です。tpgtを使えば下図のようにzvolをエクスポートするセグメントを限定できます。</p>
<p><img class="alignnone size-full wp-image-1285" title="名称未設定.002" src="http://nkjmkzk.net/wp-content/uploads/2010/06/名称未設定.0023.png" alt="名称未設定.002" width="650" height="392" /></p>
<p>設定手順です。</p>
<p>まずtpgtを作成します。tpgtの名前には1〜65535の任意の数字を割り当てます。</p>
<pre>[root@~]# iscsitadm create tpgt 1</pre>
<p>作成したtpgtにzvolをエクスポートしたいIPアドレスを追加します。</p>
<pre>[root@~]# iscsitadm modify tpgt -i 10.2.0.1 1</pre>
<p>zvolのアクセス制御リストとして作成したtpgtを設定します。</p>
<pre>[root@~]# iscsitadm modify target -p 1 [TARGET]</pre>
<p>これでtpgt 1に参加している10.2.0.1だけがzvolのエクスポート対象となります。</p>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1277</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpからASMを管理するためのパッチ</title>
		<link>http://nkjmkzk.net/?p=1261</link>
		<comments>http://nkjmkzk.net/?p=1261#comments</comments>
		<pubDate>Thu, 24 Jun 2010 07:34:45 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Storage]]></category>
		<category><![CDATA[asm]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1261</guid>
		<description><![CDATA[phpからOracleを操作するときは一般的にoci8というAPI群を使います。Oracleに管理者としてログインする際、sqlplusだとconnect /as sysdbaするのはご存知の通りですが、このoci8からOracleに管理者権限接続する際には下記のようにOCI_SYSDBAというフラグを立てて接続することが必要です。
$conn = oci_connect('user', 'password', 'node/service', '', OCI_SYSDBA);
同様にASMに管理者としてログインする際、sqlplusだとconnect /as sysasmすることが必要ですが、このoci8からASMに管理者権限で接続するためのOCI_SYSASMというフラグがないということに気付きました。つまり、phpからASMを管理できないじゃないか、ということになります。
こりゃ困った、ということでいろいろ悩んだ結果、phpにOCI_SYSASM接続モードを勝手に実装することにしました。結果幸運にもphpのソースをちょこっといじるだけでOCI_SYSASM接続モードのサポートをphpに組み込むことができましたのでそれをパッチとして公開しておきます。
php-sysasm.patch
phpのバージョンは5.3.2に対応していますが、多分oci8ってそれほど更新されていないと思うので他のバージョンでもそれほど古くなければ適用可能じゃないかと思います。パッチ適用及びphpのビルド、インストールは下記の手順をご参考に（configureオプションは最小限ですので適宜追加してください）。
[root@~]# tar xvfj php-5.3.2.tar.bz2
[root@~]# cd php-5.3.2/ext/oci8/
[root@~]# patch &#60; /PATH/TO/php-sysasm.patch
[root@~]# cd ../../
[root@~]# ./configure --with-oci8
[root@~]# make
[root@~]# make install
ASMインスタンスへの接続は下記のようにOCI_SYSASMフラグを指定して接続します。
$conn = oci_connect('user', 'password', 'node/service', '', OCI_SYSASM);
]]></description>
			<content:encoded><![CDATA[<div>phpからOracleを操作するときは一般的にoci8というAPI群を使います。Oracleに管理者としてログインする際、sqlplusだとconnect /as sysdbaするのはご存知の通りですが、このoci8からOracleに管理者権限接続する際には下記のようにOCI_SYSDBAというフラグを立てて接続することが必要です。</div>
<pre>$conn = oci_connect('user', 'password', 'node/service', '', <span style="color: #ff0000;">OCI_SYSDBA</span>);</pre>
<div>同様にASMに管理者としてログインする際、sqlplusだとconnect /as <span style="color: #ff0000;">sysasm</span>することが必要ですが、このoci8からASMに管理者権限で接続するためのOCI_SYSASMというフラグがないということに気付きました。つまり、phpからASMを管理できないじゃないか、ということになります。</div>
<div>こりゃ困った、ということでいろいろ悩んだ結果、phpにOCI_SYSASM接続モードを勝手に実装することにしました。結果幸運にもphpのソースをちょこっといじるだけでOCI_SYSASM接続モードのサポートをphpに組み込むことができましたのでそれをパッチとして公開しておきます。</div>
<div style="margin: 20px 0px 20px 0px;"><a href="http://nkjmkzk.net/wp-content/uploads/2010/06/php-sysasm.patch">php-sysasm.patch</a></div>
<div>phpのバージョンは5.3.2に対応していますが、多分oci8ってそれほど更新されていないと思うので他のバージョンでもそれほど古くなければ適用可能じゃないかと思います。パッチ適用及びphpのビルド、インストールは下記の手順をご参考に（configureオプションは最小限ですので適宜追加してください）。</div>
<pre>[root@~]# tar xvfj php-5.3.2.tar.bz2
[root@~]# cd php-5.3.2/ext/oci8/
[root@~]# patch &lt; /PATH/TO/php-sysasm.patch
[root@~]# cd ../../
[root@~]# ./configure --with-oci8
[root@~]# make
[root@~]# make install</pre>
<p>ASMインスタンスへの接続は下記のようにOCI_SYSASMフラグを指定して接続します。</p>
<pre style="font: normal normal normal 12px/18px Consolas, Monaco, 'Courier New', Courier, monospace;">$conn = oci_connect('user', 'password', 'node/service', '', <span style="color: #ff0000;">OCI_SYSASM</span>);</pre>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1261</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xenでメモリをオーバーコミットする（Transcendent Memoryセットアップ編）</title>
		<link>http://nkjmkzk.net/?p=1162</link>
		<comments>http://nkjmkzk.net/?p=1162#comments</comments>
		<pubDate>Thu, 20 May 2010 14:18:22 +0000</pubDate>
		<dc:creator>nkjm</dc:creator>
				<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[tmem]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://nkjmkzk.net/?p=1162</guid>
		<description><![CDATA[概要

管理者は多かれ少なかれメモリをある程度オーバープロビジョニングする
結果、性能は確保されるものの定常的に使われていないメモリが出てくる
これを特にサーバ仮想化環境で見ると相当量のメモリが「未使用」となり、「もし、メモリ割り当てを最適化できればあと数VM収容できるのに」となる。実際、メモリは現在唯一VMの収容数を絶対的に制限するハードリミットとなっている
この最適化を行うのがTranscendent Memory(以後tmem)。使われていないメモリをかき集めてtmem poolとして再配布可能とする
ゲストOSはtmemを有効にしてビルドされたカーネルで起動することによって、従来のpage cacheに格納していたページをtmemを使って読み書きするようになる

環境

Xen: 4.0.0
ゲストOS: Oracle Enterprise Linux 5.4 x86_64

セットアップ手順
dom0にログインし、Xen(4.0.0)でtmemを有効にする。grub.confを編集してカーネル行に「tmem」を追加しdom0を再起動する
[root@vmserver]# vi /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Xen 4.0.0 (2.6.32.11-1.2.97.xendom0.fc12.x86_64)
	root (hd0,0)
	kernel /xen-4.0.gz dom0_mem=1024M loglvl=all guest_loglvl=all tmem
	module /vmlinuz-2.6.32.11-1.2.97.xendom0.fc12.x86_64 ro root=/dev/mapper/vg_x4-lv_root
	module /initramfs-2.6.32.11-1.2.97.xendom0.fc12.x86_64.img

[root@vmserver]# init 6
次にゲストOSにログインしtmemを有効にする。tmemはまだカーネルのメインラインにはマージされていないのでディストリビューションが公開しているカーネルSRPMにtmemパッチ当て、カーネルを再構築する。
tmemパッチ入手先：http://oss.oracle.com/projects/tmem/files/
カーネルSRPM入手先：http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/5/base/x86_64/
公開されているtmemパッチはvanillaカーネル用なのでディストリビューション付属のカーネルに当てるといくつかHunk, Failがでるが手作業で直せるレベルなので手で直す。
[root@guest]# rpm -ivh kernel-2.6.18-194.3.1.0.1.el5.src.rpm
[root@guest]# cd /usr/src/redhat/SPECS
[root@guest]# rpmbuild -bp kernel-2.6.spec
[root@guest]# cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
[root@guest]# patch -p1 &#60; /var/opt/tmem-linux-2.6.18-xen-855-090408.patch
＊4つ程Failするので手作業で直す
[root@guest]# cp configs/kernel-2.6.18-x86_64-xen.config .config
任意だが、わかり易いようにカーネル名を変更しておく
[root@guest]# vi .config
CONFIG_LOCALVERSION="-tmem"
[root@guest]# vi Makefile
EXTRAVERSION = -194.3.1.0.1.el5xen
ビルドする
[root@guest]# make -j8
＊tmemについて有効化するか訊かれるので全て「Y」として有効化する
カーネルモジュールをインストールする
[root@guest]# make modules_install
カーネルをインストールする
[root@guest]# [...]]]></description>
			<content:encoded><![CDATA[<h2>概要</h2>
<ul>
<li>管理者は多かれ少なかれメモリをある程度オーバープロビジョニングする</li>
<li>結果、性能は確保されるものの定常的に使われていないメモリが出てくる</li>
<li>これを特にサーバ仮想化環境で見ると相当量のメモリが「未使用」となり、「もし、メモリ割り当てを最適化できればあと数VM収容できるのに」となる。実際、メモリは現在唯一VMの収容数を絶対的に制限するハードリミットとなっている</li>
<li>この最適化を行うのがTranscendent Memory(以後tmem)。使われていないメモリをかき集めてtmem poolとして再配布可能とする</li>
<li>ゲストOSはtmemを有効にしてビルドされたカーネルで起動することによって、従来のpage cacheに格納していたページをtmemを使って読み書きするようになる</li>
</ul>
<h2>環境</h2>
<ul>
<li>Xen: 4.0.0</li>
<li>ゲストOS: Oracle Enterprise Linux 5.4 x86_64</li>
</ul>
<h2>セットアップ手順</h2>
<p>dom0にログインし、Xen(4.0.0)でtmemを有効にする。grub.confを編集してカーネル行に「tmem」を追加しdom0を再起動する</p>
<pre>[root@vmserver]# vi /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Xen 4.0.0 (2.6.32.11-1.2.97.xendom0.fc12.x86_64)
	root (hd0,0)
	kernel /xen-4.0.gz dom0_mem=1024M loglvl=all guest_loglvl=all <span style="color: #ff0000;">tmem</span>
	module /vmlinuz-2.6.32.11-1.2.97.xendom0.fc12.x86_64 ro root=/dev/mapper/vg_x4-lv_root
	module /initramfs-2.6.32.11-1.2.97.xendom0.fc12.x86_64.img

[root@vmserver]# init 6</pre>
<p>次にゲストOSにログインしtmemを有効にする。tmemはまだカーネルのメインラインにはマージされていないのでディストリビューションが公開しているカーネルSRPMにtmemパッチ当て、カーネルを再構築する。</p>
<p>tmemパッチ入手先：<a href="http://oss.oracle.com/projects/tmem/files/">http://oss.oracle.com/projects/tmem/files/</a></p>
<p>カーネルSRPM入手先：<a href="http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/5/base/x86_64/">http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/5/base/x86_64/</a></p>
<p>公開されているtmemパッチはvanillaカーネル用なのでディストリビューション付属のカーネルに当てるといくつかHunk, Failがでるが手作業で直せるレベルなので手で直す。</p>
<pre>[root@guest]# rpm -ivh kernel-2.6.18-194.3.1.0.1.el5.src.rpm
[root@guest]# cd /usr/src/redhat/SPECS
[root@guest]# rpmbuild -bp kernel-2.6.spec
[root@guest]# cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64
[root@guest]# patch -p1 &lt; /var/opt/tmem-linux-2.6.18-xen-855-090408.patch</pre>
<p>＊4つ程Failするので手作業で直す</p>
<pre>[root@guest]# cp configs/kernel-2.6.18-x86_64-xen.config .config</pre>
<p>任意だが、わかり易いようにカーネル名を変更しておく</p>
<pre>[root@guest]# vi .config
CONFIG_LOCALVERSION="-tmem"</pre>
<pre>[root@guest]# vi Makefile
EXTRAVERSION = -194.3.1.0.1.el5xen</pre>
<p>ビルドする</p>
<pre>[root@guest]# make -j8</pre>
<p>＊tmemについて有効化するか訊かれるので全て「Y」として有効化する</p>
<p>カーネルモジュールをインストールする</p>
<pre>[root@guest]# make modules_install</pre>
<p>カーネルをインストールする</p>
<pre>[root@guest]# make install</pre>
<p>initial ramdiskを作成する</p>
<pre>[root@guest]# mkinitrd -v -f initrd-2.6.18-194.3.1.0.1.el5xen-tmem.img 2.6.18-194.3.1.0.1.el5xen-tmem</pre>
<p>initial ramdiskをインストールする</p>
<pre>[root@guest]# cp initrd-2.6.18-194.3.1.0.1.el5xen-tmem.img /boot/</pre>
<p>新しいカーネルで起動するようにgrub.confを編集する</p>
<pre>[root@guest]# vi /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
<span style="color: #ff0000;">title Enterprise Linux (2.6.18-194.3.1.0.1.el5xen-tmem)</span>
<span style="color: #ff0000;">    root (hd0,0)</span>
<span style="color: #ff0000;">    kernel /vmlinuz-2.6.18-194.3.1.0.1.el5xen-tmem ro root=/dev/VolGroup00/root rhgb quiet</span>
<span style="color: #ff0000;">    initrd /initrd-2.6.18-194.3.1.0.1.el5xen-tmem.img</span>
title Enterprise Linux (2.6.18-164.el5xen)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-164.el5xen ro root=/dev/VolGroup00/root rhgb quiet
    initrd /initrd-2.6.18-164.el5xen.img</pre>
<p>再起動し、新しいカーネルで起動する</p>
<pre>[root@guest]# init 6</pre>
<h2>Demo</h2>
<p><a href="http://nkjmkzk.net/wp-content/uploads/2010/05/tmem.swf"><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://nkjmkzk.net/wp-content/uploads/2010/05/tmem.swf" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="600" height="350" src="http://nkjmkzk.net/wp-content/uploads/2010/05/tmem.swf" allowfullscreen="true"></embed></object><br />
</a></p>
<h2>Reference</h2>
<ul>
<li><a href="http://lists.xensource.com/archives/html/xen-devel/2009-01/msg00253.html">http://lists.xensource.com/archives/html/xen-devel/2009-01/msg00253.html</a></li>
<li><a href="http://oss.oracle.com/projects/tmem/">http://oss.oracle.com/projects/tmem/</a></li>
<li><a href="http://oss.oracle.com/projects/tmem/dist/files/linux-precache-preswap.README.html">http://oss.oracle.com/projects/tmem/dist/files/linux-precache-preswap.README.html</a></li>
<li><a href="http://oss.oracle.com/projects/tmem/dist/documentation/api/tmemspec-v001.pdf">http://oss.oracle.com/projects/tmem/dist/documentation/api/tmemspec-v001.pdf</a></li>
<li><a href="http://oss.oracle.com/projects/tmem/dist/documentation/presentations/TranscendentMemoryXenSummit2010.pdf">http://oss.oracle.com/projects/tmem/dist/documentation/presentations/TranscendentMemoryXenSummit2010.pdf</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nkjmkzk.net/?feed=rss2&amp;p=1162</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
