[operation:2489] Re: Hudson で DB2 のテスト失敗

Jun Futagawa [E-MAIL ADDRESS DELETED]
2009年 11月 12日 (木) 15:17:28 JST


ふたがわ (jfut) です。

On 2009/11/02 12:15, Jun Futagawa wrote:

> ただ、以下のページにDB2と仮想化環境の組み合わせがあり、
> これによると今の環境はサポートされていない環境でした(ごめんなさい)。
> RHEL 5.x 64bit + Paravirtual guest + file + DB2 v9.5.0.2 x86_64 (beta)
> http://www.ibm.com/developerworks/wikis/display/im/DB2+Virtualization+Support
> http://www.ibm.com/developerworks/wikis/display/im/Red+Hat+Enterprise+Linux+%28RHEL%29+5+-+DB2+9.5
> 
> ・Guest VMs must be HVM mode and 64bit Linux. Paravirtual guests are not supported by DB2 at this time. 
> ・Disk I/O access must be through the 'phy:' mechanism which is used to export devices or logical volumes to the guest (therefore, no file based devices). The mechanism can be set in your xen guest's configuration file. Other access modes such as 'file:' and 'tap:aio:' are not supported by DB2 at this time. 
> 
> 他で検索してもサポートされていない理由が見当たらなかったので、
> パフォーマンスやサポート体制の問題なのか、
> 致命的な問題があるのかは判りませんでした。
> 
> 別に検証環境が用意できたら完全仮想化 + CPU Affinityなしでどうなるか試します。

いくつか検証環境で試した結果、Hudsonの構成マトリックスのジョブ設定で、
オプション「各設定を順次起動」を有効にすることで解決するようです。

本番環境の s2container-2.4-s2jdbc-it ジョブで、この設定を有効にしておきました。
これでCPU固定有り、無しに関わらず失敗しないようになると思います。

原因は、ジョブ実行時に JDK-1.5用 と JDK-1.6用 が同時に実行されると、DB2の
currentSchema + currentFunctionPath が異なるにも関わらず、互いのSchema
空間に影響を与えることがあるようです(DB2の問題?)。

CPUを固定すると失敗しなくなったように見えたのは、それにより同時に実行される
タイミングがずれることが多くなり、成功率が高くなっていただけだったようです。

以下、試した内容と結果です。

それぞれ本番環境の s2container-2.4-s2jdbc-it ジョブと同様、
DB2に対するジョブ実行を JDK-1.5用 と JDK-1.6用 を用意し、
十分な間隔を空けて他にジョブが実行されていない状態で50回実行させました。

1. Xen完全仮想化 + CPU固定無 + 他VM x 1起動
 50回中: [成功] 40 [失敗] 10
2. Xen完全仮想化 + CPU固定有 + 他VM x 1起動
 50回中: [成功] 43 [失敗] 7
3. Xen完全仮想化 + CPU固定有 + 他VM停止
 50回中: [成功] 44 [失敗] 6
4. 物理マシン 通常Kernell + 「各設定を順次起動」を無効
 50回中: [成功] 43 [失敗] 7
5. 物理マシン 通常Kernel + 「各設定を順次起動」を有効
 50回中: [成功] 50 [失敗] 0
6. Xen完全仮想化 + CPU固定無 + 「各設定を順次起動」を有効
 50回中: [成功] 50 [失敗] 0
7. Xen完全仮想化 + CPU固定無 + 「各設定を順次起動」を無効
 + JDK-1.5用ジョブ と JDK-1.6用ジョブ を別々のジョブで作成し、同時時刻に実行
 50回中: [成功] 50 + 50 [失敗] JDK-1.5用ジョブ 4 + JDK-1.6用ジョブ 3

* 仮想化環境: IBMの資料でサポートとなっている完全仮想化 + logical volume
* VM: CentOS 5.4 x86_64
 xen-3.0.3-94.el5_4.2, kernel-xen-2.6.18-164.2.1.el5
 vcpu: 4、mem: 2048MB
* DB2 Express-C 9.7 x86_64

結果より、DB2で同一DB内で異なる currentSchema + currentFunctionPath を
指定すれば、互いのSchema間に影響しないことを期待するも、実際にはタイミング
によって影響し合うことがあるように見えました。

DB2に詳しい方がいましたら、これはDB2のバグなのか仕様なのか
聞いてみると良いと思います。

よろしくお願いします。

-- 
Jun Futagawa


operation メーリングリストの案内