SSD速度回復の続き

1個前の記事で書いたSSDの速度回復スクリプトについて少しだけ説明したいとおもいます。
SteadyWorX SSDの速度回復。 で簡単な説明をしてくれてますが、私の方でも補足しておきます。

このスクリプトを使う際に設定するのは、スクリプト先頭部分の以下の部分となります。
ここで、作業対象のドライブ設定、書込むビット列などを定義しています。

#-------------- 初期設定 --------------
# 作業対象のドライブレターを指定
# 作業対象のSSDドライブを指定してください。
DRV = "C:"

# 領域埋めに使うデータの指定
# SLCは \x00  MLCは \xFF らしいですが詳細は不明です。
# 変更しない方が良いかもしれません。
# 0 Fillする場合は \x00
# 1 Fillする場合は \xFF
CODE = "\x00"

# 書き込み単位(KBytes)
# 通常は変更する必要はありません。
B_SIZE = 256

ここから先のコードがスクリプト本体となります。
ちょっとだけ説明を補足しておきます。

#-------------- 本体 --------------
require 'tempfile'

# ランダムな文字列を生成する関数
# デフォルトでは16文字の文字列を生成します。
def getRandomString (length = 16)
  a = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
  key = Array.new(length){a[rand(a.size)]}.join
  return key
end

# 作業ディレクトリ名の生成
# 既存ディレクトリと重複する可能性の低いランダム文字列を使用
# 作業ディレクトリは既存のディレクトリと重複しない専用のディレクトリが欲しいため
# ランダム文字列を使用してディレクトリ名を定義します。
temp_dir = DRV + "/" + getRandomString

# データブロックを生成
# 初期設定部分で定義したビット列を使用して B_SIZE Kbytesの
# データブロックを用意します。
block = CODE * (B_SIZE * 1024)

# ここからメイン処理なので例外を補足できるようにします。
begin
  # 作業ディレクトリを作成
  # ディレクトリが既に存在する場合は Errno::EEXIST が発生します。
  Dir::mkdir(temp_dir)

  # 作業用ファイルの作成
  # tempfileライブラリを使って一時ファイルを作成します。
  temp = Tempfile::new("tmp",temp_dir)

  # 空き容量が尽きるまでファイルを追記していく
  # 上の処理で作成した一時ファイルにデータブロックを追記します。
  # 無限ループで追記するので空き容量が無くなるまで処理が行われます。
  # 空き容量が無くなると例外が発生するので、無限ループから抜けます。
  while 1
    temp.write(block)
  end

rescue Errno::EEXIST
# 作業ディレクトリと同じ名前のディレクトリが存在した場合は、ここに飛んできます。
  # テンポラリ領域が存在した場合は作業中断
  # エラーメッセージを表示してスクリプトを終了します。
  puts("#{temp_dir}  exists!")
  exit()

rescue
# その他の例外が発生した場合はここに飛んできます。
# ディスクフル以外で例外が発生することは無いはず。

  # 作業に使ったファイルとディレクトリを削除します。
  temp.close(true)
  Dir::rmdir(temp_dir)
end

こんな感じで、空き容量に対して0 Fill(または1 Fill)を行っています。
怪しいことは行ってないので危険性はほとんど無いのではないかと思います。

SSDの速度を回復させる

メインPCで使ってるSSDが最近遅くなってきました。
Win7+trim対応SSDなら速度低下は無いと思っていたのですが甘い考えだったようです。

SSDに0 Fillかければ速度回復するらしいのですが、起動ドライブとして使っているSSDなので
SecureEraseとかを使って0Fillするのは非常に面倒です。

というわけで、空き領域を00hで埋める 0Fillツールを作ってみました。(FFhの 1Fillも出来ます)
Rubyで書いてありますのでRubyがインストールされていれば動作するはずです。
ssd_recover.zip

スクリプトファイルの先頭部分でドライブ名など指定できますので、環境に合わせて変更してください。
動作試験は行なっていますが、使用は自己責任でお願いします。

動作原理は非常に簡単です。
一時ファイルを作って00hのデータをDisk容量が尽きるまで追記していくだけです。

作った本人も本当にこれで良いのか疑問でしたが、実際に実行してみたらSSDの速度が
見事に回復しました。

ツール実行前
———————————————————————–
CrystalDiskMark 3.0 x64 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
———————————————————————–
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

Sequential Read :   242.305 MB/s
Sequential Write :    42.380 MB/s
Random Read 512KB :   103.888 MB/s
Random Write 512KB :    17.735 MB/s
Random Read 4KB (QD=1) :     4.456 MB/s [  1087.9 IOPS]
Random Write 4KB (QD=1) :     1.779 MB/s [   434.3 IOPS]
Random Read 4KB (QD=32) :     0.929 MB/s [   226.8 IOPS]
Random Write 4KB (QD=32) :     1.998 MB/s [   487.7 IOPS]

Test : 1000 MB [ C: 49.2% (29.3/59.6 GB)] (x1)
Date : 2010/10/02 16:39:52
OS : Windows 7  [6.1 Build 7600] (x64)

ツール実行後
———————————————————————–
CrystalDiskMark 3.0 x64 (C) 2007-2010 hiyohiyo
Crystal Dew World : http://crystalmark.info/
———————————————————————–
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

Sequential Read :   244.794 MB/s
Sequential Write :   187.597 MB/s
Random Read 512KB :   157.433 MB/s
Random Write 512KB :   108.759 MB/s
Random Read 4KB (QD=1) :    12.425 MB/s [  3033.4 IOPS]
Random Write 4KB (QD=1) :    15.643 MB/s [  3819.0 IOPS]
Random Read 4KB (QD=32) :    12.859 MB/s [  3139.3 IOPS]
Random Write 4KB (QD=32) :    13.027 MB/s [  3180.3 IOPS]

Test : 1000 MB [ C: 49.2% (29.3/59.6 GB)] (x1)
Date : 2010/10/02 16:55:20
OS : Windows 7  [6.1 Build 7600] (x64)

こんな簡単なスクリプトで速度回復できちゃうもんなんですかね??

NXR-120/C

NXR-120/Cを数日間使ってみた感想です。

アクセスリストの適用順序とかが最初判らなくて悩みましたが、
いったん理解してしまえばACL設定は簡単な機器だと思います。

パフォーマンスなども特に問題なく安定して稼働しているのですが、
2点ほど気になる点があります。

fast-forwarding を有効にするとQoSの設定が出来ません。
fast-forwardingとQoSは排他設定っぽいです。
fast-forwardingを切ると劇的に速度が落ちるので、QoSのためにfast-forwarding offには出来ないです。

次に、IPv6ブリッジが設定できない。
サポートページに書いてある設定例どおりに設定してるのに、IPv6ブリッジの設定を受け付けてくれません。

この2点は問い合わせしたので回答待ちです。
これさえ改善できれば最高なんですが……

CactiでFutureNet NXR-120/C

センチュリー・システムズのFutureNet NXR-120/Cから情報取得するCacti用テンプレートを作ってみました。
たぶん、NXR-130/Cでも使えるのではないかと思います。


こんな感じでセッション数、CPU負荷、メモリ使用量が取得できます。

たいした内容じゃないですが、テンプレートを添付しておきます。
FutureNet-NXR.zip

H.264エンコード・バッチファイル

x264のパラメーター変更したので再公開です。

FEZ-SNSで公開してる動画共有サイト向けのH.264エンコードバッチファイルをココでも公開します。

ゲーム動画の画質と容量の妥協点はこんなもんかな?という設定になっています。

<用意する物>
・Avisynth (Ver.2.5.8にて動作確認)
http://sourceforge.net/projects/avisynth2/
・x264 (r1145にて動作確認)
http://x264.nl/
・Nero AAC Codec (neroAacEnc)
http://www.nero.com/jpn/technologies-aac-codec.html
・WAVI
http://sourceforge.net/projects/wavi-avi2wav/
・MP4box
http://kurtnoise.free.fr/index.php?dir=mp4tools/
・hqdn3d
http://akuvian.org/src/avisynth/hqdn3d/

<インストール方法>
・Avisynthは事前にインストールしておいてください
・用意したファイルは以下のディレクトリ構成で配置してください
\H264encoder
+ \mp4tools
| + mp4box.exe
| + neroAacEnc.exe
| + wavi.exe
| + x264.exe
| + hqdn3d.dll
|
+ h264enc.bat

<エンコード方法>
エンコードしたいファイルをh264enc.batに放り込んでください。
それだけです。
複数のファイルを纏めてドラッグすれば順番にエンコードしてくれます。

<ビットレートとか解像度とかの設定>
h264enc.bat を直接編集してください。

< バッチファイル>
以下がバッチファイルの中身なので、h264enc.batの中身にコピペしてください。

@echo off

rem  Video Bitrate  単位は Kbps
set bitrate_v=1500
rem  Audio Bitrate  単位は bps
set bitrate_a=128000

rem 解像度の設定  リサイズ処理をしない場合は、元ファイルのサイズを設定
rem 元のファイルのアスペクト比に従って設定してください。
set width=640
set height=480

rem 補正のパラメタはAviUtlの色調補正とほぼ互換、 0を基準に±256
rem ガンマ補正   暗く (-)----0----(+) 明るく  補正しない場合は 0を設定
rem 捕捉
rem アマレココでは、ゲーム内のガンマ設定が反映された状態で撮影されてるようです。
rem dxtoryでは、ゲーム内のガンマ設定は未反映な状態で撮影されてるようです。
set gamma=20

rem 上下の黒帯の幅 (ニコニコでは上下左右に黒帯を追加して4:3または16:9にしてください)
rem 黒帯処理を行う場合は、このファイルの57,58行目の設定を確認してください。
set top=32
set bottom=32
set left=0
set right=0

rem 環境変数の設定
set cmddrv=%~d0
set cmddir=%~p0
set toolsdir=%cmddrv%%cmddir%mp4tools
set TemporaryFile=%TEMP%\mp4enc_tmp
set InputAVS=%TEMP%\mp4enc.avs

rem エンコードパラメータの設定
set x264cmd= --preset slow

rem ファイル名の設定
:loop
if "%~1"=="" goto end
set InputFile=%~1
set OutputFile=%~dpn1.mp4

rem Avisynthスクリプトの出力
echo LoadPlugin("%toolsdir%\hqdn3d.dll") > "%InputAVS%"
echo AviSource ( "%InputFile%" ) >> "%InputAVS%"
echo ConvertToYV12()  >> "%InputAVS%"
echo Spline64Resize (%width%,%height%)  >> "%InputAVS%"
echo ColorYUV(gamma_y=%gamma% )   >> "%InputAVS%"
echo hqdn3d(2) >> "%InputAVS%"
rem 黒枠追加を行う場合は ↓のremを外してください。
rem echo AddBorders( %left%, %top%, %right%, %bottom%) >> "%InputAVS%"

echo %InputFile% のエンコードを開始します。

rem 音声の抽出
echo 音声の抽出を開始します。
"%toolsdir%\wavi" "%InputAVS%"  "%TemporaryFile%.wav"
rem AACエンコード  profileはbitrateから自動設定
echo 音声のエンコードを開始します。
"%toolsdir%\neroAacEnc" -br %bitrate_a% -if "%TemporaryFile%.wav" -of "%TemporaryFile%.aac"
del "%TemporaryFile%.wav"

rem H.264エンコード
echo H.264エンコード 1st passを開始します。
"%toolsdir%\x264.exe" --pass 1 --stats "%TemporaryFile%" -B %bitrate_v%  %x264cmd% --output NUL "%InputAVS%"
echo H.264エンコード 2nd passを開始します。
"%toolsdir%\x264.exe" --pass 2 --stats "%TemporaryFile%" -B %bitrate_v%  %x264cmd% --output "%TemporaryFile%.mp4" "%InputAVS%"

rem mux処理
echo 映像と音声のMUXを開始します。
"%toolsdir%\MP4Box" -add "%TemporaryFile%.mp4" -add "%TemporaryFile%.aac" "%OutputFile%"
echo %OutputFile% を作成しました。

del "%TemporaryFile%.aac"
del "%TemporaryFile%.mp4"
del ""%InputAVS%""

shift
goto loop
:end
rem シャットダウンしたい場合は、↓の rem を消す
rem shutdown -s
pause

postfixでSMTP認証が必要なメールサーバーにrelayする

固定IPのISPから普通の個人向けのISPに移行したためOPB25Bの対象となってしまいました。

自宅サーバーからのメールはISPのメールサーバーに単純にRelayすれば良いと甘く考えていたのですが……

新ISPの設定情報を確認したところ……
Submissionポート専用、これは良い。
え? TLS接続のみ?
SMTP認証必須ですか???

困った……

という訳で、postfixでSMTP認証が必要なメールサーバーにrelayする方法を調べてみました。

まず、postfixがsaslとTLSに対応している必要があります。
これに関しては、使いもしないのに対応版でコンパイルしてたので問題なし、OK!です。

機能的には問題ないので、後は設定の問題です。

まず、main.cfに以下の設定を追加

relayhost = smtp.hogehoge.jp:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/authinfo
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = plain, login
smtp_enforce_tls = yes
smtp_tls_enforce_peername = no

/usr/local/etc/postfix/authinfoにsmtp認証のユーザー情報を記述

smtp.hogehoge.jp??? username:password

あとはpostmap /usr/local/etc/postfix/authinfo してからpostfixの再起動

とりあえず、これでTLS接続してSMTP認証してrelay転送が出来ました。

サーバー設定のメモ

このブログ動かしてるlighttpdの設定を追加したので忘れないように
メモしておきます。

#### 画像ファイルへの直接アクセスの制限設定
$HTTP[“referer”] !~ “^http://.*\.splat\.jp” {
url.access-deny = ( “.jpg”, “.jpeg”, “.png” )
}
$HTTP[“referer”] =~ “^$” {
url.access-deny = ( “.jpg”, “.jpeg”, “.png” )
}

ALIXでm0n0wall

PC Engines ALIX.2を購入したので早速m0n0wallを導入してみました。

m0n0wallはFreeBSDベースのファイアウォールアプライアンスソフトウェアです。

こんな感じの管理画面で管理を行うことが出来ます。
FreeBSD6.3でIPFilter+IPNATで動作しています。

ALIX2はCPUがGeodeLXの500MHzと非力ですが、通信時のCPU負荷とかを見た感じではBフレッツ程度ならある程度の余裕を持って捌ける感じです。

外部のFTPサイトから80MbpsでダウンロードしたときのCPU負荷は50%程度でした。(DEVICE_POLLINGがONの値)

PPPoE+NAT+ステートフルインスペクションFWが動作した状態で、80MbpsのCPU負荷 50% はまあ優秀なほうではないでしょうか。
セッションテーブルの上限値は30000(デフォルト状態)ですので、所謂ブロードバンドルーターと呼ばれている物では厳しい環境でも余裕で動作してくれそうです。

ちなみに、GeodeLXには暗号処理のアクセラレータ機能が載っているのですが、m0n0wallでは残念ながら対応していません。
(OSのFreeBSD6が対応していないため)

折角のアクセラレーターが動作しないのは勿体ないので、対応するカーネルに入れ替えてみました。
ちゃんと動くかは知りません(´・ω・`)

起動ログを見るとこんな感じで認識しています。
glxsb0: <AMD Geode LX Security Block (AES-128-CBC,RNG)> mem 0xefff4000-0xefff7fff irq 9 at device 1.2 on pci0