「 2011年02月 」一覧

ESXiでPX-W3PEを使う(まとめ)


今までの経緯をまとめてみました。
若干不安定ですが、1チューナー運用でしばらく使っていけそうな感じです。

ハードウェア情報

VT-dが使えるESXi環境を準備します。
自分の環境では以下のハードウェア構成で行いました。
*1

録画仮想マシン以外は QNAPのNASに格納してあります。
録画仮想マシンはローカルのSATA HDDに仮想ディスクを格納するようにしてあります。

そのほか必要なもの

  • PX-W3PE
  • BCAS用カードリーダ
    • SCR3310-NTTCom 定番ですね

*1 : ハードウェアについてはきちんと公開している情報もないので、誰かの参考になれば

ESXi側環境準備

vSphere Clientを用いて、PX-W3PEのデバイスのパススルー構成を設定しておきます。
また、録画用仮想マシンに対して、PCIデバイスの追加を行っておきます。
このPCIデバイスの追加でPX-W3PEのデバイスを接続する形となります。
そして、メモリは比較的多めに割り当てを行っておきます。(2GBほど割り当てています)

なお、後述するようにBonCasLinkのために別の仮想環境にUSBデバイスパススルーも
この段階で準備しておくとよいかもしれません。

環境準備

録画仮想マシンとしては Windows7 Ultimate x86版を用いました。
一応Vistaでも録画してtsファイルがなんとなく出来るところまでは確認しました。

一方でうまく動作させることが出来なかったのがWindowsXPです。
どうも ksproxy.ax 関連で失敗する模様です。

今回PT1の録画環境が別に存在し、BCASカードは1つしかないため、
全ての環境で使えるようにするため、別の仮想マシンでBonCasLinkを動かすことにしました。

これらのことからPX-W3PEの録画環境に導入するソフト群は以下のようになります。

  • BonCasLink のクライアント
  • tvrock
    • tvtest, rectest等含む環境一式
  • PX-W3PE公式ドライバ 1.01
  • BonDriver PX-W3PE用
    • BonDriver_W3PE(up0537.zip)
    • up0550の中から、Interface_W3PE.dllを取り出しておく

手順

  1. PX-W3PE公式ドライバをインストールし、仮想マシンを再起動する。
  2. tvrockのインストール
    1. 詳しい手順は割愛。必要なデータを適当なフォルダに正しく配置していく。
    2. 自分は ここをみながら導入しました。
  3. tvrockを配置した場所のtvtestと同じ場所にBonDriverの必要なファイルを配置

tvrockの設定 補足

安定動作のためにはデータの書き出しをtvrockによる書き出しを選択すると良いようです。
手元の環境では、128MBほどのバッファを持つように設定してあります。

仮想マシンとはいえ、録画用となるとそこそこ潤沢なリソースを割り当ててあげる
必要がありそうで、今のところメモリを2G割り当てています。

ESXiの設定

tvrockによる録画ということで、ある程度のリアルタイム性が要求されます。
他の仮想マシンとは違いESXiでのリソース割り当て設定を変更してあげる必要がありそうです。

今回以下のような設定を行っています。

仮想マシン リソース
録画用 CPUリソース 1.5GHzほど予約。シェアは高
録画用 メモリリソース 2GB予約。シェアは高
録画用 ディスク シェアは高
BonCasLinkのサーバー CPUリソース 700MHzほど予約.

まとめ

ESXiのうえでは、仮想マシンが8個ほど動作させています。
このうちの2つが今回説明した録画用の仮想マシンです。

仮想マシンで録画をさせるとなると、
システムトータルでのパフォーマンスを考え、リソースを割り当てる必要があります。
また仮想マシンのどれかの負荷が高まることで、正常な録画を維持できなくことが
よくおこります。

安定した録画を行うためには、物理マシンを用意した方が遥かに楽です。
仮想マシンは今回のような目的のためにはあまり使えないような気がします。

今後の課題

物理的に4コア以上持つような状況で、
録画に関しては、コアを占有させる形にしてみたら改善するかもしれません。
また、チューナーの記録先を仮想ディスクではなく、ネットワークや、ドライブを分散させるなどの方法も試してみる価値はあるのかもしれないです。

今回のネタは割と長期的にがんばった感じでした。
途中、諦めそうになりましたが、何とか1チューナーを運用できていけそうなのが救いです。
保存を考えなければ、単純視聴を考えるなら2チューナーでドロップを気にしないという運用はありだろうなと思っています。


色々と試してみて分かったこと。


どうやら実験に使っていたアンテナ端子が悪い模様。
W3PEでもMTVHDUSFでも同じようにドロップが発生。
試しにMTVHDUSFを別の部屋のアンテナ端子に指してみて録画実験してみたところ、
正常にドロップもなく完了した。そしてこの悪環境の中で、PX-W3PEを試してみて分かったことがある。
どうも2チューナーめが感度が弱い・・・。
そして1つめもまた、その2つめの影響を受けて受信データをドロップする傾向にある(ようだ)。

Wチューナーでまともに使おうと思ったらPCの場所変えないと…。

そんな中、色々と試してみたら、
EpgTimerCap_Bonで録画する方が tvrock(rectest.exe)で録画するよりも
ドロップする確率が低いようだ。
機能を絞ってコンパクトにしているrectestより正常成功率が高いことが不思議。

MTVHDUSFについて

比較のためにHDUS環境を構築してみた(ただし借り物)。
これで分かったことは、内蔵のカードリーダは使えない模様。
外付けのカードリーダーを用意すれば、正常に使うことが出来た。
(うちの環境ではBonCasLinkで外付けの代わりにした)

みると”HDUSFではカードリーダとして使えない”とのこと。
せっかく内蔵を持っているのに使えないってのはちょっと残念。

PX-W3PEについて

ドロップ関連を調べていたら色々と分かった。
アンテナのゲインコントロールがどうやら悪さをすることがあるらしい。
そのためにもまずこれをオフにすることところから始めるといい。

レジストリの HKEY_LOCAL_MACHINESOFTWAREASICENLNASettingB06_0001_PEを開く。
すると以下の項目があるので、これらを書き換えて調節する。

  • External_LNA_ON 0を設定することでOFF
  • Internal_LNA_Level 0-0x17の値を設定可能。内蔵レベルのブースター設定値?
  • LNA_AUTO_CTRL 0を設定することで自動ゲインコントロールをOFFに。

PX-W3PE続報-不具合中-


現在作業中のため、メモ日記です

どうもPX-W3PEの録画で若干失敗することが多い。
ここでいう失敗とは、録画の真っ最中にドロップが発生してしまうことを指す。

検索してみて、ドロップする可能性として以下のものがあげられる。

  • PCの処理能力不足
    • CPUの処理、HDDの記録能力
  • アンテナ系の問題

とりあえず改善すべく以下のことをやってみた。
それでも解決できてなかったりするけど。

  1. ドライバ(BonDriver)の変更
    1. 1月末の Interface_W3PE.dllを用い、kuma版のBonDriverを使用中
    2. ドロップ発生
  2. BIOSでC1Eステートを無効化した
    1. 相変わらずDROP出る

他に処理能力奪われてるのか?と思い、
B25のデコードを行わないようにしてみた。

→ ドロップ発生。

うーん、謎だ・・・。さてどうするか。

その他

TBSがチャンネルスキャンしても出てこない。
そういうこと(一部チャンネルが未検出)はよくあることらしいので
検索すると解決方法が簡単に見つかった。

EpgDataCap_Bonの設定で、
受信レベルを考慮するってチェックを外すことでうまくいくとのこと。
これを試してみたところ、あっさり解決できた。

そうやって検出した状態でも、録画も出来ているし問題もなさそう。


RealTekなNICをESXiで使う


VMware vSphere HypervisorではIntelのNICを使うのが
もはや定番となっていますが、それでもRealTekチップを搭載した環境で使いたいこともあります。
この場合にはちょっとだけ手間をかけてあげることで対応可能です。

前提条件

  • 使うのはvSphere Hypervisor4.1
  • USBメモリに展開したESXi(vSphere Hypervisor)

HDDにインストールしたタイプでも出来るとは思いますが、
別システムからのファイル置き換えを出来るようにがんばる必要があります。

準備するもの

  • Windows PC
    • DD for Windows
  • VMware Player
    • CentOS 5.5を入れて使います

そのほか、RealTek NICに必要なドライバを下記の場所からダウンロードしておきます。
(ここで、”RTL8111_8168_P55_integr_SATA_Ctrl.(AHCI).oem.tgz”を取得します。)

CentOSを必要とする理由は ESXiシステムがインストールされたUSBにアクセスし、
中身のファイルを置き換えることが目的です。
これが出来るシステムならば他のディストリビューションでも問題ありません。

ESXiをUSBメモリに展開

vSphere Hypervisorのisoファイルの中から imagedd.bz2 を展開します。
展開すると1GB弱のデータができあがります。
続いてこれを “DD for Windows”を用いてUSBメモリに書き戻しを行います。

なお、Windows Vista以降の環境では、”DD for Windows”の起動において、
“管理者として実行”を選択しての実行が必要となっています。

これでESXiシステムが入ったUSBメモリが完成します。

ファイルの置き換え

CentOSの環境でこのUSBメモリをマウントします。
その中で “Hypervisor1″という名前がついたボリュームで、oem.tgz というファイルが見つかります。
これを一旦別ファイルとして保管することとし、
先ほどダウンロードした”RTL8111_8168_P55_integr_SATA_Ctrl.(AHCI).oem.tgz”を、
oem.tgzとしてファイルをUSBメモリにコピーしておきます。

この後、vSphere Hypervisorを再起動させるとNICが認識されます。
使う場合には、vSwitchの追加作業を行う必要があるので、この点には注意すべきです。

余談

通常では認識しないRealTekの使い方ですが、
このようなカスタムのドライバを入れること以外にも、
VT-dを使用して、仮想マシンから直接操作させるという方法も考えられます。
使い道という点では模索していないですが、パススルーで動作させることは出来た(過去日記参照)なので、おもしろい使い方がまだ隠れていそうな気はします。


新 「ゲームプログラマになる前に覚えておきたい技術」 VS2010対応


「ゲームプログラマになる前に覚えておきたい技術」に付属しているソース類で、
VisualC++2010用に変換したプロジェクトおよびソースコードを用意してみました。手元の環境でデバッグ/リリース構成のビルドを確認しています。2011/02/09 にファイル群を更新しました。
2011/07/08 にファイル群を更新しました。
Windows Vista/7上でのヒープ破壊メッセージに対する対処を入れてあります。

プロジェクト変換について

  • ライブラリの全体最適化を無効化してあります。
  • ワーニングレベルを3に落としたものがいくつかあります。
  • 算術関連(sin,cos,tan,など)を名前空間付きに変更しました。

サンプルコードによっては、全体最適化適用による不具合のため、
exe用のプロジェクトでも無効化してあるものがあります。

なお、変換に用いたのはVisulStudio2010Professionalです。
ですが、expressエディションでも開くことは可能かと思われます。

■使用方法

CDROM内にある、VisualStudio2008用のソースコードを展開した後、
srcフォルダでダウンロードしたファイルを上書きで展開してください。

書籍で解説されている各サンプルをVisualStudio2010環境で使うには、
さらに以下の手順による準備が必要です。

*VS2010用に準備する!

src/GameLibs内の各フォルダにある *.slnファイルらを
DebugとReleaseの両方でリビルドします。
ただこれには順番も関係しており、以下の手順でリビルドを行っていきます。

  1. Modulesフォルダ内 Modules.slnを開きます
    1. メニューからビルド → バッチビルドを選択
    2. “全て選択”ボタンを押す。全てにチェックが入ります
    3. “リビルド”ボタンを押します。
      1. リビルドが開始されます。
  2. それ以外のそれぞれのフォルダのGameLib.slnを開いて、ライブラリをビルドしていきます。
    1. 2DActionGame
    2. 2DGraphics1
    3. 2DTransform
    4. 3DCollision1
    5. 3DGraphics1
    6. 3DHardware1
    7. InputDevices
    8. Loading
    9. RealTime
    10. Sequence1
    11. Sound1
    12. Sound2
    13. Final

これでそれぞれのサンプルプログラムを開いて、
書籍で説明されているステップを進めていくことが出来るようになります。

注意事項

公開しているアーカイブの再配布を禁止します。
また、公開したアーカイブを使用したことによる損害については、
筆者および公開した私自身がその責務を負いません。
利用する際には、自己責任でご利用下さい。

ダウンロード

ゲームプログラマになる前に覚えておきたい技術 2010対応 注意事項に同意の上、ダウンロードしてください。

2012/09/02現在 VisualStudio 2012版のプロジェクトも用意しました。
それはこちらになります。  → http://blog.techlab-xe.net/archives/1296

動作確認環境

  • Windows7 Ultimate x64環境
  • VisualStudio2010Professional/VC2010 Express
  • PentiumDualCore E6500, Core i7 860
  • Geforce9800GT, RADEON HD 5450

この環境で、含まれるサンプルソースコードの実行等を確認しております。
少なくともこのプロジェクト類を用いて 64bit環境での動作を確認できております。

エラーメッセージについて

このようなエラーメッセージが出た場合には、
そのサンプルプログラムが必要とするGameLib.lib, GameLib_d.lib が
VisualStudio2010でビルドされていないことが理由です。

前に説明したリビルドの部分を確認してみてください。


登録済みiSCSIターゲットの削除


CentOSでiSCSIイニシエータを設定して、
iSCSIディスクをマウントして使っています。しかし自動検知されてしまった他のターゲットまで、登録されてしまった。

という状況が発生してしまいました。

やりたいこととしては、目的のiSCSIターゲットを1つCentOS側でマウントしたい、これだけです。
他のターゲットは他の環境用のものなので…。
そこで、既に登録されてしまったターゲットを削除する方法を探していました。

使えるようにするまでの設定は検索すれば見あたるのですが、
削除の方法は少なめなので、防備録をかねて書いてみます。

こんな感じで、削除オプションを立てて、削除するターゲットを記述します。

分かってしまえば問題ないくらい簡単ですね。


あ・・・


『ゲームプログラマになる前に覚えておきたい技術』の
VisualStudio2010対応で一部不完全だったので近日中に直して再公開しておく予定

ghettoVCB.shで圧縮バックアップの罠


先日から ghettoVCB.shを使ってのバックアップというものを試してみています。
日本語の検索で簡単にわかる使い方での使用方法だと問題が出ないのですが、
圧縮機能を有効にしてのバックアップを使用すると問題が出てきます。

結論からいえば、圧縮機能に関しては制限事項があるために、
常に使用することは不可能です。

圧縮機能を有効にする

ghettoVCB.shファイルを開くと、40数行目に、ENABLE_COMPRESSION という変数があります。
デフォルトでは0が設定されており、圧縮が無効化されています。
これを1にすることにより、tar.gz形式による圧縮が使用可能となります。

問題点

圧縮機能を有効にした際に、特定のVMのバックアップが出来ないという症状に見舞われました。
tar.gzファイルが出来るのですが、数KBしかない異常な状態になっていました。
なお、圧縮を無効化していたときには正常にバックアップが動いていたのを確認済みです。

調べてみると、これはESXi側のtarの制限のようです。
次に示すようなエラーが出てくるので、tarの何らかの制限にかかっているとは予想していましたが。

tar: cannot store file ‘MyVirtualMahineA/MyVirtualMahineA-flat.vmdk’ of size 68719476736, aborting

調べてみると海外のサイトで出来ない理由が書いてありました。
ESXi3.5では4GB, 4.0以降は 8GBというサイズを超えるtar.gzが出来るようだと、
この圧縮機構が失敗する、ということです。

この結果から、VMのディスク書き込み内容によっては、
圧縮バックアップが失敗するという状況が出てくることになってしまうため、
有効にしたままには出来ないという結論に至りました。

追記

どうも4G,8Gってだけが理由じゃないような感じです。
現に 20G程度の gzファイルが出来ていることを確認しました。

成功・失敗を決めるのは一体何なのか、未だに原因つかめずです。


スナップショット削除(ESXi)


VM Explorerでバックアップしたものをリストアしてみると、
バックアップ時のスナップショットも一緒にリストアされるようです。

そしてこのスナップショットがあると、ghettoVCB.sh*1でのバックアップが出来ないようです。

さらには、たまにスナップショット削除で、永遠に処理が返ってこないこともあったりと大変でした。
強引に再起動したのですが、スナップショットファイルは残っているという。

*1 : オンラインバックアップを可能にしてくれるスクリプト

対処法

強引ですが、マウントされているディスク(おそらく000x.vmdkなんてものがマウントされているはず)に対して、ディスクのクローニングを行って、そのディスクをハードディスクとして再追加しました。
とりあえずはこれでスナップショットを削除しても良さそうです。

vmkfstoolsで、正しい操作ができるのかもしれませんが、ちょっと分かりませんでした。

またスナップショットの削除と全削除とでは、マージされ方が違うらしいので要注意。