カテゴリー別アーカイブ: Windows

Intel Smart Response Technology(ISRT)をOS on SSDで利用する

Intel Smart Response Technology (ISRT)とはいわゆるSSDキャッシュで、SSDをHDDのキャッシュに利用することでHDDへのアクセスを高速化するもの。
まあ設定の仕方とか技術詳細については今更な話なのでいいだろう。

で、HDDとSSDがあったら、SSDにシステムを入れて、HDDをデータ置き場として利用ってのがオーソドックスな使い方だと思う。
んで、ISRTの問題点というか致命的な部分があって、SSDにOS入れてると、そのSSDをキャッシュドライブとして利用できないっていうのがある。

パーツの犬のISRTの記事より

特徴や注意点は以下の通りです。
・キャッシュ設定時はSSDの全容量が初期化されます。
容量変更時は、キャッシュをリセットする必要があり、やはり全データが消えます。
データボリュームに保存してあるデータはバックアップを忘れずに。
・ISRTはオンボードSATA接続のドライブのみ有効。
Marvell等の別チップSATA接続ドライブは高速化出来ません。
ただし、OS用ドライブはMarvell、ISRT用のSSDとハードディスクはオンボードSATA、
という構成は問題ありません。
・1つのマザーボードで高速化可能なハードディスクは1台です。
ハードディスクやSSDを2台ずつ接続しても、ISRT可能なのは1セットだけです。
・SSDは高速化できません。
1台のSSDをキャッシュにしてもう1台のSSDを高速化は不可。
OSインストール済みのSSDはキャッシュ用に選択できません。
間違って消す心配が無いのでご安心を。

2chのISRTスレ

8 :Socket774:2011/05/13(金) 22:20:05.21 ID:8GuN8b06

SSDのパーティション分割して、 OS を SSD、 データを HDD (+ISRT) に出来ない これ、致命的すぎ。 どうにかして出来ないものか。

9 :Socket774:2011/05/13(金) 22:59:06.50 ID:ecF/OX4+

>>8 OSはHDDにインストールする必要があるらしいな 総合的には速くなると思うが、OSの起動が遅くなるのは痛い

10 :Socket774:2011/05/13(金) 23:30:51.11 ID:yEB96Qeb

SSD OS SSD+HDD データ と言う構成は無理なのか?

11 :Socket774:2011/05/14(土) 00:40:32.62 ID:Tg1cdQ+z

>>10 >>8

12 :Socket774:2011/05/14(土) 08:25:49.23 ID:S4TSXzpq

まじかw

ということで、なんかいまいちISRTがはやってないのってこれがでかいと思うわけです。
んだけど、過去にISRTを利用して動作の仕組みとかなんとなく把握した感じ、ああすれば出来るんじゃないかなーみたいなのは頭にあって、でもめんどくさいから試してなかったんですが、先日試してみたら案の定できたんでかきかき。
ああ、ちなみにSSDを複数用意出来る人は、別にこれから紹介するようなめんどくさいことやらないでも、単純にOS用のSSDとキャッシュ用のSSDを別にすればいいだけです。

前提とする構成

ISRT対応してるチップセットのっけてるマザー
ISRT対応してるOS(とりあえずWindows7とかWindows8を想定)
HDD一本、SSD一本

ざっくりした手順

HDDにOSインストール
ISRT設定
SSDにOSインストール
ワッショイ

これでわかる人はわかると思う。

もうちょっと詳しい手順

まず、HDDにOSをインストール。
SATAモードはRAIDで。
すでにインストールしててSSDを追加購入した人でSATAモードもRAIDって人はこのステップはスキップ。
AHCIでOSいれちゃったって人は入れなおすかなんとかしてRAIDで起動するようにしてください。
Windows7とか8とかはIRST(Intel Rapid Storage Technology)入れてレジストリいじればできるぽい。
やり方はググろう。

次に、IRSTをインストール。
そしてISRTを有効化。
SSD繋げばIRSTの設定画面に高速化ボタンがニョキっと出てきてるはずなのでそれポチッとすればOK。
Windows8でUEFIで高速ブートしたいとかいう人は、この時点でSSDはGPT形式にしておくこと。
高速化ボタンが出てこない場合はSSD初期化しよう。
SSDのファームウェアを更新したら出てきたとかいう話もある。
SSDがSSDじゃなくてHDD認識されてるとかいうトラップもあるらしくそれはもう違うSSDにしてね。
うちだとなぜかUEFI+GPTでWindows8をHDDにインストールすると、そのディスクは高速化できない罠が発動したので、そういう場合はとりあえずBIOS+MBRで一旦インストールしてあとでどうにかしましょう。
とにかく、ここではISRTを一旦有効にして、SSDをキャッシュ+データディスク化することが目的。
そこまでいければHDDの高速化自体は一旦無効化しようとHDDのデータをぶっとばそうとも構わない。
SSだとSSD 2個あるしHDDも2個あるやんとかは見なかったことに。
ちゃんとHDDとSSD1つずつの環境でも試したし、このSSはキャッシュ+データ利用しているSSDに入れているWindows8からとってる。

この状態にしたら、次にSSDにOSを入れる。
この際、Intel Rapid Storage Technologyのドライバが必要となる。
ないとディスクが見えない。
USBメモリなりCD-RなりDVD-Rなりフロッピーディスクなりまあなんでもいいんだけど、OSのインストール中に読み込むためのドライバ(IRSTのF6ドライバってやつ)を予め用意して、インストール先のパーティションを選択するときに読み込む。
するとSSDのデータ領域が見えるようになるので、そこにOSをインストールする。
ブートマネージャの絡みとかあるからHDDは一旦引っこ抜いたほうが面倒はないかもね。
まあそのへんは各自ご自由に。

 

 

 

SSだとこのドライブにWindowsをインストールすることはできませんって書いてるけど、次へボタンがグレーアウトしてなければ無視してクリックすればインストールできる。
UEFIモードでインストーラ起動してるのにSSDがMBR形式だったりBIOSブートでGPT形式だったりするとグレーアウトしてクリックできないのでそのへんはちゃんと目的に応じてよしなにしてください。
これでキャッシュ+データ利用化されたSSDにOSをインストールすることに成功。
あとは、そのSSDのデータ領域にインストールしたOSを起動して、IRSTをインストール、ISRTを有効にすれば完了。
HDDのメタデータがどうのこうのとか言われて高速化ができなかったけど、その場合はメタデータを一旦クリアすればOK。
別にメタデータのクリアではHDDのデータは飛ばない(責任は持てません)。

Brother DCP-J925NでControlCenter4が起動しない

いい塩梅にハマったのでメモ。

症状としては、ControlCenter4を起動しようとしても何も起きない。
起動しないしエラーもでない。
それだけならまだしも、複合機側から操作してもちゃんとPCが認識できないらしくてスキャンとか無理ゲー。

この時点で実施していること
DCP-J925NをUSB接続して、公式サイトのサポートからフルパッケージダウンロードしてインストール。
あ、ちなみに使ってるOSはWindows8 pro x64。
ちなみに無線LANでつないでも変わらず。

とりあえずまあ色々と調べてみて、なんか怪しいログを発見した。

“C:Program Files (x86)ControlCenter4BrCtrlCntr.exe” のアクティブ化コンテキストの生成に失敗しました。 従属アセンブリ Microsoft.VC80.OpenMP,processorArchitecture=”x86″,publicKeyToken=”xxxxxxxxxxxxx”,type=”win32″,version=”8.0.50727.6195″ が見つかりませんでした。 詳細な診断を行うには sxstrace.exe を実行してください。

ということで、Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ MFC のセキュリティ更新プログラムをインストール。
動いた。

で、なんでこんなことが起きていたのかというと、どうもユーザ名がマルチバイト文字を含んでいたからっぽい。
ユーザ名にマルチバイト文字とか使うなよksgって言うかもしれないが、まあおれもわざわざそんなことしようとは思わないわけなんだけども、Windows8にしてからアカウントはWindows Liveアカウントを使うようにしたわけで、そうするとアカウントのプロフィールで設定している名をユーザ名として利用するようで、まあプロフィールで設定していた名前とか全力日本語だったと。
んで、DCP-J925Nのドライバのフルパッケージのインストーラでは、どうもVisual C++ 2005の再頒布可能パッケージもインストールようになっている(ControlCenter4をインストールしないようにした場合は入れないのかもしれない)ようなんだけど、ユーザ名にマルチバイト文字が含まれているとインストールに失敗することがあるらしく、まあ、なんか[Command line option syntax error.Type Command /? for Help.]的なエラーが出現してたから多分これだと思う。

つまり、 DCP-J925Nをマルチバイト文字含むアカウントで利用する場合は、予めMicrosoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ MFC のセキュリティ更新プログラムをインストールしておこね、っていうことでした。
x64なOSの場合はx86版とx64版両方入れとこね。

あるいは、半角英数字なユーザ作ってそっちで入れるとかでもいいのかもね。
例えばコマンドプロンプトから secpol って叩いて ローカルポリシー>セキュリティオプション>アカウント:Administratorアカウントの状態>有効 にして、フルパッケージドライバインストーラをshift+右クリックして別のユーザとして実行でadministratorで実行してインストールしてもいけるかもね。

CraftBukkitをソースからビルドする

環境はWindows7 64bit。

まず、JDKとEclipseをダウンロードする。
JDKはとりあえず最新のやつ、Eclipseはhttp://www.eclipse.org/のdownloadsからEclipse IDE for Java Developersを選んだ。
gitとmavenが使えるならなんでもいい。
使えなかったら適当にプラグインで追加しよか。

次に軽く日本語化する。
いらない人はスキップ。
とりあえず公式のinternationalizationのBabelを使おうとしたが、Unable to read repositoryとかエラーが出るので、Pleiadesを導入することにした。
Pleiades All in Oneは32bitなのでやめた。
余計なもんもくっついて来すぎて重いし。
Pleiadesの導入は

  1. Pleiades本体をDLして展開
  2. 中身をEclipseのフォルダにつっこむ
  3. eclipse.iniの最終行に以下を記述
    -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
  4. eclipseを-cleanオプション付きで起動する

標準JREを変更する。
ウィンドウ>設定>Java>インストール済みのJREでさっきいれたJDKを指定。
JRE(Java Runtime Environment)じゃなくてJDK(Java Development Kit)な。
じゃないとMaven実行時にこける。

WS000172

んで、gitの準備。
環境変数HOMEを設定。
値は%USERPROFILE%でよいでしょう。
Eclipse>ウィンドウ>設定>チーム>Git>複製リポジトリー>デフォルト・リポジトリ・フォルダーを好きなところに設定。

gitでBukkitとCraftBukkitを持ってくる。

ウィンドウ>パースペクティブを開く>Gitリポジトリエクスプローラ

WS000164
GITリポジトリの複製でBukkitのソースを持ってくる。
URIはhttps://github.com/Bukkit/Bukkit.git
WS000165

とりあえず両方

WS000157

適当に保存場所設定

WS000158

同じパターンでCraftBukkitもやる。
CraftBukkitのURIは

https://github.com/Bukkit/CraftBukkit.git

になる。

Gitからソースの取得ができたら、プロジェクトを作る。
ファイル>Import>Maven>Existing Maven Projects

WS000166

ルートディレクトリにGitでとってきたBukkitのソースがあるディレクトリを指定する。

WS000167

CraftBukkitもやる。

実行>実行構成>Mavenビルド>新規で基底ディレクトリにGitで拾ってきたBukkitのアドレスを指定して、ゴールにclean installを指定して実行。

WS000170

CraftBukkitでもやる。

できました。

WS000171

Minecraftサーバの導入

例のごとくWindowsではなくてLinuxの話です。
まあ管理ツールの使い方なんかはWindowsでも参考になるかもしれない。

導入環境は以下の感じ

OS: Debian GNU/Linux sid
kernel: 3.2.0-1-amd64
CPU: Intel(R) Core(TM)2 Duo CPU E6850  @ 3.00GHz
memory: 4GB
jre: sun-java6-jre 6.26-3

なお、このマシンはxenで仮想化した64bitゲストOSだけど普通にいけた。

ということで、まずインストール先ディレクトリを決める。
今回は /usr/local/minecraft をインストール先ディレクトリにした。

ということでサーバ本体をダウンロードしてそこに配置。
この辺においてある。
exeじゃなくてjarを拾ってこよね。

で、これでjre入ってればサーバ起動できるんだけど、色々とそれだと制御に難があるので、シェルスクリプトを導入する。
screenコマンドを使っているので、もし入ってなかったら入れること。
元はhttp://www.minecraftwiki.net/wiki/Server_startup_scriptのものなんだけど、ちょっと問題点を修正してあるのが以下。
-Djava.net.preferIPv4Stack=trueを入れていないとIPv6でバインドされて接続できなかった。

#!/bin/bash
# /etc/init.d/minecraft
# version 0.3.6 2011-10-17 (YYYY-MM-DD)
 
### BEGIN INIT INFO
# Provides:   minecraft
# Required-Start: $local_fs $remote_fs
# Required-Stop:  $local_fs $remote_fs
# Should-Start:   $network
# Should-Stop:    $network
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description:    Minecraft server
# Description:    Starts the minecraft server
### END INIT INFO
 
#Settings
SERVICE='minecraft_server.jar'
OPTIONS='nogui'
USERNAME='minecraft'
WORLD='world'
MCPATH='/usr/local/minecraft'
BACKUPPATH='/usr/local/minecraft/backup'
CPU_COUNT=1
INVOCATION="java -Xmx1024M -Xms1024M -Djava.net.preferIPv4Stack=true -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE $OPTIONS"
 
ME=`whoami`
as_user() {
  if [ $ME == $USERNAME ] ; then
    bash -c "$1"
  else
    su - $USERNAME -c "$1"
  fi
}
 
mc_start() {
  if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    cd $MCPATH
    as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
    sleep 7
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is now running."
    else
      echo "Error! Could not start $SERVICE!"
    fi
  fi
}
 
mc_saveoff() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running... suspending saves"
    as_user "screen -p 0 -S minecraft -X eval 'stuff "say SERVER BACKUP STARTING. Server going readonly..."15'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff "save-off"15'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff "save-all"15'"
    sync
    sleep 10
  else
    echo "$SERVICE is not running. Not suspending saves."
  fi
}
 
mc_saveon() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running... re-enabling saves"
    as_user "screen -p 0 -S minecraft -X eval 'stuff "save-on"15'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff "say SERVER BACKUP ENDED. Server going read-write..."15'"
  else
    echo "$SERVICE is not running. Not resuming saves."
  fi
}
 
mc_stop() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Stopping $SERVICE"
    as_user "screen -p 0 -S minecraft -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..."15'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff "save-all"15'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff "stop"15'"
    sleep 7
  else
    echo "$SERVICE was not running."
  fi
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Error! $SERVICE could not be stopped."
  else
    echo "$SERVICE is stopped."
  fi
}
 
mc_update() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running! Will not start update."
  else
    MC_SERVER_URL=http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"`
    as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
    if [ -f $MCPATH/minecraft_server.jar.update ]
    then
      if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null`
      then
        echo "You are already running the latest version of $SERVICE."
      else
        as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
        echo "Minecraft successfully updated."
      fi
    else
      echo "Minecraft update could not be downloaded."
    fi
  fi
}
 
mc_backup() {
   echo "Backing up minecraft world..."
   if [ -d $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"` ]
   then
     for i in 1 2 3 4 5 6
     do
       if [ -d $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`-$i ]
       then
         continue
       else
         as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`-$i"
         break
       fi
     done
   else
     as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
     echo "Backed up world"
   fi
   echo "Backing up $SERVICE"
   if [ -f "$BACKUPPATH/minecraft_server_`date "+%Y.%m.%d_%H.%M"`.jar" ]
   then
     for i in 1 2 3 4 5 6
     do
       if [ -f "$BACKUPPATH/minecraft_server_`date "+%Y.%m.%d_%H.%M"`-$i.jar" ]
       then
         continue
       else
         as_user "cd $MCPATH && cp $SERVICE "$BACKUPPATH/minecraft_server_`date "+%Y.%m.%d_%H.%M"`-$i.jar""
         break
       fi
     done
   else
     as_user "cd $MCPATH && cp $SERVICE "$BACKUPPATH/minecraft_server_`date "+%Y.%m.%d_%H.%M"`.jar""
   fi
   echo "Backup complete"
}
 
mc_command() {
  command="$1";
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    pre_log_len=`wc -l "$MCPATH/server.log" | awk '{print $1}'`
    echo "$SERVICE is running... executing command"
    as_user "screen -p 0 -S minecraft -X eval 'stuff "$command"15'"
    sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
    # print output
    tail -n $[`wc -l "$MCPATH/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.log"
  fi
}
 
#Start-Stop here
case "$1" in
  start)
    mc_start
    ;;
  stop)
    mc_stop
    ;;
  restart)
    mc_stop
    mc_start
    ;;
  update)
    mc_stop
    mc_backup
    mc_update
    mc_start
    ;;
  backup)
    mc_saveoff
    mc_backup
    mc_saveon
    ;;
  status)
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is running."
    else
      echo "$SERVICE is not running."
    fi
    ;;
  command)
    if [ $# -gt 1 ]; then
      shift
      mc_command "$*"
    else
      echo "Must specify server command (try 'help'?)"
    fi
    ;;
 
  *)
  echo "Usage: $0 {start|stop|update|backup|status|restart|command "server command"}"
  exit 1
  ;;
esac
 
exit 0

 

minecraft実行用のユーザを作成する。(useradd minecraftで上等)

minecraftインストール先ディレクトリのパーミッションもそのユーザに変えておこう。

#Settingsの部分を自分の環境に合わせて /etc/init.d/minecraft に配置して chmod 755 minecraft。

これで

# /etc/init.d/minecraft start

とか

# /etc/init.d/minecraft restart

とかできるようになる。

できなかったらなんかができてない。

で、あとはサーバ起動/終了時に自動で起動/停止するようにサービス登録。

debian系なら

# update-rc.d minecraft defaults

cronで定期バックアップなんかもできる。

/etc/init.d/minecraft backupを登録すればいい。

このスクリプトを通してサーバコマンドを打つこともできる。

# /etc/init.d/minecraft command list

みたいな。

 

で、あとはServer.propertiesの編集。

デフォルトでかかれている以上のものがあるんで、http://www.minecraftwiki.net/wiki/Server.propertiesを参照した方が良い。

訳してもいいけどわかんないんだったら日本のwikiでも大体乗ってる。

で、一通り設定が終わったら、サーバ管理でスクリプト経由でコマンドをうてるっていっても、いちいち端末起動して接続してsuしてコマンド打ってってやっぱ面倒なので、普段はrcon使いましょ。

あ、普段使ってるデスクトップがLinuxでそのLinuxでminecraftをうごかしているっていうのは例外です。

ということで

enable-rcon=true

rcon-passwordはお任せ。

これはいいって感じではないんだけど、まあとりあえずうごくレベルのは転がってたから、無いよりはきっとましなので一応紹介。

http://www.minecraftforum.net/topic/852452-minecraft-rcon-tool-by-r3b0rn/

http://www.minecraftforum.net/topic/842376-minecraft-server-rconquery-utility/

これいいよ!っていうrconツールあったら教えてほしいです。

あとは各種ポート解放(通常ゲームポート 25565, rconポート 25575)をFirewallおよびルータで実行。

たぶんこんな感じでおっけーなはず。

おつかれさまでございます。

nVidiaのスケーリング問題が解消されていた

以前というかもう2年も前になるんだけども、nVidiaのドライバはHDMI接続の場合、スケーリングをドライバ側で行うことが出来ないと言ったんだけど、なんかつい最近確認してみたらできるようになってた。
nVidiaコントロールパネルを開いて、ディスプレイ>デスクトップのサイズと位置の調整>スケーリングでGPUが選べる。

WS000153

。。。えーと、ただそれだけです。

nVidiaコントロールパネルの設定をいじってゲームを快適にしてみるテスト

最近WizardryOnlineってなゲームやってるんですけど、なんか重いんですよね。
いや、別に重いっていってもフレームレートが10とかになっちゃうってわけじゃなくて、こう、ヌルサクじゃない感じ。

うちのCPUとグラボは結局色々あったものの2600KとGTX295に帰ってきてて、でまあWizってべつにちょー重い感じのゲームじゃないんですよね、やってる感じ。
だから設定次第じゃ普通に60FPSでてもおかしくないと思うんだけど、なんかそういう感じがしない。
戦闘中でエフェクトが重いとかっていう時じゃなくて、街中で誰もいないような場所にいてもそんなにFPSが出てる感じがしない。

ということで設定を色々いじって、FPSをとにかくはじき出して、そっから画質も調整という流れにしてみようかと。

まずはなんも設定していない状態で1chの露店街のど真ん中でFPS計測。
おそらくこのゲームで一番重い場所はココだ。

でまあFPSは15-25FPS。
SSモードにして25くらいか。

次に、nVidiaのコントロールパネルで、

3D設定>3D設定の管理>プログラム設定>1.カスタマイズするプログラムを選択する>追加

ということでWizardryOnline.exeを追加。

さて、とりあえず画質は犠牲にしてひたすら軽くしていくか。

  • CUDA – すべて
  • AA トランスペアレンシー – オフ
  • スレッドした最適化 – オン
  • TF クオリティ – ハイパフォーマンス
  • TF トリリニア最適化 – オン
  • TF ネガティブLODバイアス – 許可
  • TF 異方性サンプル最適化 – オン
  • トリプルバッファリング – オン

25-30くらいまで向上。
SSモードで35-40くらい。

で、うちのカードはGTX295なんで内部的にSLIなんで、その辺もいじってみる。
ついでにディスプレイもデュアルディスプレイで運用していて、場合によってはSLI構成を解除して一時的にトリプルディスプレイにしたりもする感じなんで、マルチディスプレイ/ミックス GPU アクセラレーションあたりもいじってみる。

まずマルチGPUレンダリングモードから攻める。

とりあえず現在がNVIDIA推奨設定。
シングルGPUはさすがにないのでとばす。
フレームのレンダリングを強制的に交互にする1 – 25-30FPS
フレームのレンダリングを強制的に交互にする2 – 27-32FPS

GPUの負荷具合みていると、推奨設定およびAFR1ではGPU Bしかほとんど負荷がかかっておらず、AFR2だと双方のGPUに負荷がかかっていることと、微妙にFPSがあがっていることから、今回のケースではAFR2が良さそう。

次にマルチディスプレイ/ミックス GPU アクセラレーション。
マルチ ディスプレイ パフォーマンス モードがデフォルトで設定されているんだけども、その他いくつかあるけど、まあ結論から言うとどれもあんまり変わらなかった。
ので、推奨とされているデフォルトのまんまにしておくことに。

とまあなんかいろいろやってたら、まあ人が多いところ以外はわりと60FPS出る感じになったみたい。
画質も別に気にならないしこんな感じでしばらくやってみよう。

WesternDigital春のRMA祭り

さて、今年もやって参りましたRMA祭りの開催です。
今回はサーバ機で2本、個人用マシンで1本、いずれもWesternDigital社製ハードディスクに異常が検出されました。

いい加減にしろよくそがおいこのゴミカスマジで紀伊店のか。

あ、すいません、思わず心の声が聞こえてしまったようで。
お気になさらず先へ進みましょう。

いつからでしょうか、そう遠くない頃合いに、サーバ機のrootあてにsmartctlからメールが届いていました。
smartctlからのメールなんて良いことが書いてあるわけがないわけでして、案の定SMART値に異常があるよというお話でした。
でまあ確認してみたところ

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       90%      2317         17715224

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
197 Current_Pending_Sector  0x0032   195   195   000    Old_age   Always       -       1461

おい、Current_Pending_Sector 1461ってどこまで深刻化してから通知よこすんだよ、もうこんなディスクつかえねーから。
そして一通りディスクをしらべてみると、別のディスクでも144でてる。
こいつも交換対象だな。

だがサーバ機ははRAID5で運用しているので、二本同時に引っこ抜くのは当然できない。
どう見ても重度な方のディスクをとりあえず引っこ抜いて、縮退モードで運用し、RMA申請して帰ってきたら再構築、そしたら次に危ない子を引っこ抜いて。。。という流れで対処しようと思う。
金持ちじゃないんで、代替ディスクを用意してすぐに交換するなんてことはしません。

で、デスクトップの方ですが、こちら2Tのディスクを2本使っているうちの1本で不良セクタが発生。
最近なんか調子悪かったのでRAID0を解除してデータを整理してスキャンディスクしたら判明。
一本は元気なようで、とりあえずはその一本で間に合うので、調子の悪い子はサーバ機のHDDのRMAが終わってからRMAすることに。

ということで、それぞれのディスクがRMA申請できるか保証をチェック
したところ、一匹できないのがまざってた。
デスクトップのやつ。

CFDでRMA申請を可能にする申請をだす

こいつはまあどうせ後回しだし。
別の二台のRMAが終わった頃にはRMAできるようになってるでしょ。

ということで、一番重傷な子をとりあえずRMA申請。

んじゃ、取り外そう。

。。。てどのディスクなんだっけ。
いや、諸々の問題からDom0上でRAID5を構築しているわけではなく、DomUで構築しておりまして。
んと、Dom0では/dev/sdeだから。。。DomUでは。。。/dev/xvdb4らしい。
xm conでDomUにコンソール接続して。。。

# mdadm /dev/md3 --fail /dev/xvdb4
[1799713.802196] md/raid:md3: Disk failure on xvdb4, disabling device.
[1799713.802198] md/raid:md3: Operation continuing on 4 devices.
mdadm: set /dev/xvdb4 faulty in /dev/md3

# mdadm /dev/md3 --remove /dev/xvdb4
[1799899.247128] md: unbind<xvdb4>
[1799899.247142] md: export_rdev(xvdb4)
mdadm: hot removed /dev/xvdb4 from /dev/md3

# mdadm -D /dev/md3
*snip*
          State : clean, degraded
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

*snip*

    Number   Major   Minor   RaidDevice State
       6     202       17        0      active sync   /dev/xvdb1
       1     202       18        1      active sync   /dev/xvdb2
       2     202       19        2      active sync   /dev/xvdb3
       3       0        0        3      removed
       4     202       21        4      active sync   /dev/xvdb5

さて、xenのDomUの設定ファイルのストレージの記述からも外して、物理的にHDDを引っこ抜く。

前SeagateのRMAで返送されたときの箱をとってあるので、それにHDDをつっこむ。
RMA手順指示書を二部プリントアウトして、一部は二カ所ほど署名をして箱に同梱。
一部は郵便局で送り状やらインボイスやらを記入するときの参考資料として持って行く。
RMA labelは張った方が早くなるらしいといわれているけど、張って1ヶ月、張らずに2週間を経験してるので面倒だからもう張らないことにした。
Western Digitalの人と直接やりとりしたときも、ラベルつくって張ってね、とか一言も言われなかったし。

じゃ、郵便局行ってくるか。
おかげで英語で住所書くの慣れた。

ホームシアター的なものを考えてみる

うちね、DVDプレイヤーとかないんですよね。
いや、あるっちゃあるんですけど、うごくかどうかわからないようなレベルの代物で。
CDプレイヤーとかもないし、まあメディアの再生は基本的にPCで行うわけです。

で、PCには普段使いのディスプレイ2枚に、ヘッドセットと2.1.chスピーカーを接続しています。
んで、それとは別に42型のプラズマテレビ(TH-P42S2)と5.1chサラウンドシステム(HTP-S333)も用意してます。
となると、ブルーレイとか録画したTSとかみるときは映像はディスプレイじゃなくてテレビで見たいし、音も5.1chのサラウンドで鑑賞したい、となりますよね。

で、グラボからの映像出力ですが、今使っているのがGTX295で、DVI * 2 と HDMIの出力。
マザーボードのS/PDIF OUTをグラボのS/PDIF INを接続してやれば、HDMIで映像と音声を同時にとばせるので、そうすると、

マザー – [S/PDIF] – GTX295 – [HDMI] – S333 – [HDMIパススルー] – P42S2

としてやることで音声と映像をそれぞれのデバイスにとばすことができるな、と。
この場合の音声デバイスは普段使っていないオンボードのRealtek High Definition Audioになるので、その点は注意。
通常はSE200-PCI LTDを使っている。

んで、問題はマザーとグラボをつなぐS/PDIFケーブルが無いこと。
GF-SPDIFってのが玄人思考から出てたんだけどすでに生産中止。
同等品もちとみあたらなくて正直困った。

それじゃあ、グラボからHDMIで渡すのは映像だけにしておいて、音声は音声で渡しましょう、という方向で考える。

映像
GTX295 – [HDMI] – P42S2

音声
Realtek – [S/PDIF] – S333

まあ特に問題なく構成できる。

が、プレイヤーの音声再生デバイスが、普段はSE200なんだけども、映画鑑賞したいときはRealtekを使わねばならないので、切り替えるのがめんどくさい。
ということで、前のエントリのようなことをして、Realtekで流れる音声をSE200にも流すことで、いちいち出力デバイスを変更しないでもいいようにしたわけです。

が、ここに来て気づいてしまった。

HDMIで映像と音声の同時出力をしないのであれば、Realtekで音声出力する必要はないと。
オンボードのサウンドチップを持ち出したのは、そもそもグラボのS/PDIF INに流し込む口がマザーのS/PDIF OUTしかなかったから。
仕様上はSE200のS/PDIF OUTからつなげるのかもしれないけど、ただでさえマイナーなS/PDIF 2pin端子と光角形の接続ケーブルが商品としてこの世に存在する気がしない。
ということで、つまりは、普通にSE200とS333をS/PDIF接続すればいいだけではないか。

ということでもろもろひっくるめて書いてみるとこんな感じでよろしいか。

映像
GTX295 - [DVI] - W241DG
       - [DVI] - U2211H
       - [HDMI] - P42S2

音声
SE200 - [ステレオRCA] - i-TRiGUE 3600
      - [ステレオミニプラグ] - ATH-770COM
      - [S/PDIF] - S333

Realtekとか完全になかった。
アマミキ!もさようなら。

ちなみに、みなさんご存じの通りGeforceのグラボは一般的には同時出力が2つまで。
なので、鑑賞会をしたいときはサブディスプレイを無効にして、テレビを有効にしてソファーによこになります。
PCリモコンマウス2くそ便利です。
3画面同時出力のためにRadeon HD 5870買いましたが、ドライバがゴミカスすぎて不安定になりまくって同時出力がどうとかそういうの以前すぎてストレスマッハで引っこ抜いて今やどこにあるのかわかんね。
音声は自前でサウンドチップ持ってるし、三画面同時出力できるしで、まともにうごくならいいんですけどね。
少なくともうちじゃまともにうごかない完全なるゴミカス。
まあそういうことで、グラボを一本追加したいのですが、今のマザーボード、PCI-E x16レーンが一個しかなかった。
ということで、考えた選択肢は以下の通り。

  1. PCIのグラボを買う
  2. マザーボードを買う
  3. RADEON引っ張り出す
  4. 使うときに使うディスプレイをオンオフ切り替えて3画面同時は捨てる

とりあえずしばらくは4で。
PCIのグラボって結構高いんですよ。
需要が微妙すぎるんでしょうね。
マザーは正直パーツを全部引っこ抜いて刺し直す作業がめんどくさすぎるのでいやだし。
RADEONはもう正直さわりたくない。
でまあ、3画面同時に必要になるときって基本ないんで。
鑑賞会するときはきほんそっち集中だし、ながらでやるときもおそらく追加一画面あれば足りるだろし。
PCIでDVI出力できてフルHD対応しているグラボが間違った値段で流れてくるか、マザーを交換する日がくるまではこんな感じで運用しようと思います。

一つのソースの音声を複数のデバイスに同時出力する

一つのソースの音声を複数のデバイスに同時出力するということをしたい。
もっと具体的にいうと、Media Player Classic Home Cinemaでの再生音声を、SE200-PCI LTDとオンボードのサウンドデバイスの両方に流したい。

とりあえず、サウンド関係のデバイスの接続状況。

SE200-PCI LTD - ヘッドフォン
              - AT-MA2 - マイク
              - 2.1ch スピーカ
オンボ Realtek - 5.1ch サラウンドシステム

で、とりあえずステレオミックスを使っていけないか考える。
Windows7だと、録音デバイスに「このデバイスを聴く」というオプションがある。
Realtekで再生 -> ステレオミックス -> このデバイスを聴く -> SE200
として、MPCHCでのオーディオ出力デバイスにRealtekを指定してやれば、どちらのデバイスでも音声出力されるはず。

ということでやってみるけど、音が出ない。
しらべてみると、既定のデバイスがスピーカー(アナログ)じゃないとステレオミックスが動作しないらしい。
とりあえず今回はこのルートはパスすることに。

とりあえず

MPCHC -> Realtek -> なんかで録音 -> SE200

って流れを作ればいいんだよなーということで、次に、アマミキ!を使う方法を考えてみる。

live_setupでライブ機能をインストール。
amamix.exeたたいてshift+enterでアマミキ!を起動。
録音デバイスにAmaRec Core Audio Captureを指定して、Realtekの出力をとる。

再生デバイスは既定のデバイスのまま。
S/PDIF Envy24 Family Audio Controllerを直接指定してもいいけど、既定のデバイスがそれだからわざわざいじってはいない。

メイン画面で再生にチェックを入れる。

MPCHCで再生デバイスにRealtekを指定して、適当に動画を再生。

お、いけてる。

とりあえずこれでいいんだけど、仮想デバイス+猿ちぃを使う方法も試してみた。

まず、仮想サウンドデバイスをインストール。
Voice Changer Software Diamond EditionNETDUETTO βを利用。
仮想デバイスの録音側のマイク設定で、「このデバイスを聴く」にチェックを入れて、再生デバイスにSE200を指定。

猿ちぃ++で同じく仮想デバイスの録音側のマイクをRealtekへとばす。

とするとどうなるか。

仮想デバイス向けの出力が、方やSE200へ、方やRealtekへと流れることになる。
つまり、この仮想デバイスをMPCHCで出力先デバイスに設定すればよいということになる。

仮想デバイス再生 -> 仮想デバイス録音 -> Windowsの機能でSE200へ
                   -> 猿ちぃ++の機能でRealtekへ

んだが、猿ちぃ++がいちいちstartとかstopとかついてるのがちょっと邪魔っていうか面倒というか。
なんだかんだアマミキ使う方向でよいかなあとかおもう昨今。

追記
Windows Media Playerだとアマミキを使う方法だとなぜか音が出ない、っていうかアマミキがエラー起こす。
WMPでやりたいなら仮想デバイスかませる方が良さそうだ。