Intel SSD 750 400GBの性能出し

ブート周りでいろいろあったけど,ようやく750の性能出しができそう.

環境(HWiNFO x64 v5.00-2570読み)

M/B ASRock Z87 Extreme 3
CPU Intel Core i5-4670K @ 3400MHz
Mem Avexir Technologies DDR3-1600 CL9 4GB x4
PCIe1 なし (PCIe 2.0 x1)
PCIe2 NVIDIA GeForce GTX 660 (PCIe 3.0 x8)
SSD(PCIe3) Intel SSD 750 400GB (PCIe 3.0 x4)
Driver Intel(R) Solid-State Drive P3700/P3600/P3500/750 Series Driver Version: 1.2.0.1002
OS Microsoft Windows Server 2012 R2 Standard (x64) Build 9600

チップセットがZ87なので,PCIe 3.0 x16がSSDグラフィックカードにx8ずつ割り振られてる.
グラフィックボードにPCIe 3.0をx16分食われるかと思ったら,BIOSが配慮してくれたみたい.

Crystal Disk Mark 5.0.0 Alpha2 x64 による測定

Intel SSD 750にシステムパーティションがある環境.たまたま,exFATパーティションがあったので,ここを使ってパフォーマンスを測定した.
f:id:sosoru_m:20150719121143p:plain

50MB負荷
f:id:sosoru_m:20150719121804p:plain

4GB負荷
f:id:sosoru_m:20150719121834p:plain

Intel SSD 750 400GBの公称値はシーケンシャルリードが2200MB/s,ライト900MB/s*1なので,大体期待通りの性能が出てる.ちょっとオーバーしてるけど.
このボードには1.25GBのDDR3-1600メモリ*2が乗ってるらしいので,キャッシュが効きそうな50MB負荷の時は,シーケンシャルリード4000MB/sぐらいに張り付いて欲しいもんだけど.もしかしたら,書き込みキャッシュが無効になってるから,テストデータがキャッシュメモリに乗らないのかな?

AS SSD Benchmark 1.7.4739.38088 による測定

上と同様の環境で測定.
f:id:sosoru_m:20150719122753p:plain

Crystal Disk Markと大体同じ?シーケンシャルリードが2000MB/sで張り付いてて,本当にPCIe 3.0なのかちょっと悩んだ.あと,リードのAcc.timeが遅いかな.これは多分レイテンシのことを指してると思うので,20μsecぐらいの値が欲しい.Writeは出てる.

書き込みキャッシュについて

デバイスマネージャで書き込みキャッシュを有効にしようとしても受け付けてくれぬ.なぜだ.
f:id:sosoru_m:20150719160952p:plain

Intel SSD Toolboxで確認すると,それっぽい項目がdisableになってる.
f:id:sosoru_m:20150719161200p:plain

Intel SSD Data Centor Toolsでenableにしようとしても受け付けてくれない.
f:id:sosoru_m:20150719161350p:plain

isdctのマニュアルを見ると,どうやらATAデバイス限定の設定らしい.*3
かといって,NVMe向けの代替オプションがあるわけでもない…困った.とりあえず諦め
f:id:sosoru_m:20150719161627p:plain

**

故 WD5000AACS 儀

7年使ってたハードディスクさんが遂に壊れてしまった.Intel SSD 750を買ったばかりだというのに…勘弁してもらいたい

経緯

昔々,PT3ではなくPV4が出たばかりの頃に購入.アレは1時間番組で20~30GBぐらい食うから,新規増設しないと厳しかった.
録画用途・倉庫用途でほとんど24時間動いてるサーバーマシンにずっと組み込まれてたから,7年持ったのは優秀かな
f:id:sosoru_m:20150718041450p:plain
使用時間を年に直すと6.07年だから,ちょっと少ない.電源投入回数を見ると,割りと24時間運用してない感じが…
そういえば,昔は録画時間が来たら動くようにしてたっけな(遠い目)

状況

7/13ごろ,サーバー機(Linux)のアクセスランプが灯ったままシステムがハング,再起動を試みる.
原因特定のため,各ストレージのSMARTを見るも異常はない.WD5000AACSにbadblocksを走らすと異常な数の不良セクタをはき出す.特定.
再起動をすると,HDD自体をOSが認識しない.もうだめだ.

とりあえず,メイン機(Windows)に入れて確かめてみると正常に認識する.何とかなりそうなのでバックアップを試みる.
すると,いくつかのファイルをコピーした段階で急にHDDがデタッチされる.
f:id:sosoru_m:20150718040431p:plain

バックアップすべきファイルを180GBぐらいに絞っても,10GBも移動しないうちにデタッチされて,OSから見えなくなるので非常に困る.
その上,SATAマザーボードにつなげてたのでいちいち再起動しなきゃいけない.とても面倒くさい.
何回か再起動してるうちに,UEFISATAデバイスの扱いをAHCIモードからIDEモードに切り替えればちょっとは変わるかも?
と根拠のない変更をしたところ,この状況は改善され,デタッチされる代わりに長いI/Oビジーが発生するようになった.(ビジー中はHDDがスピンし始める音が聞こえてきて心臓に悪い)
I/Oビジーなんて普段は冷や汗もんだけど,ここは渡りに船.なんとか楽してバックアップし終えた.

バックアップ出来たのでchkdskにかけるも,全く異常が見つからない.
https://pbs.twimg.com/media/CKHJVhPUAAAvHJC.jpg:large

WD謹製の診断ツールでようやく死亡判定が得られた.
https://pbs.twimg.com/media/CKHOVsDUMAAs6z2.jpg

今回みたいなディスクは壊れてないけど,正常に運用できなくなった障害は初めてだった.普通,HDDが壊れたらもうちょっと悲劇的な結末を迎えるもんだけど.
こいつは何が壊れたんだろなぁ,コントローラ基板が死んでるんかなぁ.

クリップボード上の画像を一時フォルダに保存する

スクリプト

ブログやらTwitterやらに画像をアップロードするとき,クリップボードにある画像を直接貼り付けることは出来ない.
しょうがないので,Windows環境を前提として,クリップボードを一旦TEMPフォルダに保存してやるバッチファイルを作ってみた.

rem savetmpimage.bat

del %TMP%\clipboard.png
convert clipboard:image "%TMP%\clipboard.png"
if %ERRORLEVEL% neq 0 ( 
	echo %ERRORLEVEL%
	pause
)
explorer /select,"%TMP%\clipboard.png"
  • 一応,delで作成するファイルは消しておく(なくてもいい?)
  • convertはImageMagickの一部.こいつは画像ファイル向けのバッチファイルを作るときにとても便利だけど,Windowsだとパスを通さなきゃいけないから面倒だった気がする.
  • clipboard:imageはWindowsじゃないと動かなかった記憶がある.昔,FreeBSDの入った懐古マシンで似たことをしようとして頭を抱えた.今はどうなんだろ.
  • convertのエラーは環境変数%ERRORLEVEL%を見れば分かる*1.エラーが起きたらpauseしてチェック
  • exploerの/selectオプションでclipboard.pngが選択された状態でExplorerが開く*2エクスプローラのプレビューを有効にしておくと楽?

ショートカット編

バッチファイルを実行すると,ちゃんと動いてくれる.良かった.…が,タスクバーに入らない.
仕方ないので,cmd.exeにパッチファイルを起動させるショートカットを作成する.

f:id:sosoru_m:20150718030954p:plain

  • リンク先は「C:\Windows\System32\cmd.exe /c "[バッチファイルのパス]\savetmpimage.bat"」
  • 作業フォルダーに注意.「C:\Windows\System32」とかだとconvertに失敗するので(ユーザー権限の問題?),「C:\」とか身近なパスにする

作ったショートカットをタスクバーに登録すればできあがり

(補足 タスクバーに登録されるのはショートカットのコピーのようで,元のショートカットのリンク先・作業フォルダ等々を弄っても,タスクバーのショートカットには反映されない)

おまけ

f:id:sosoru_m:20150718033346p:plain
バッチファイルよりショートカットの方がファイルサイズが大きい

もっと楽な方法

windows.microsoft.com

すでにWindowsの機能で既にあるじゃないか・・・
Winキー+PrintScreenキーでピクチャフォルダに保存されるようだ.

**

Z87系マザーのUEFIにNVMeドライバをロードした件

2015.07.09追記

UEFI2.3.1以上ならOptionROMのドライバをロードすればいい

 

sosoru.hatenablog.jp

 

 

テスト投稿です.

動機

先週ぐらいにHDD内蔵のPS3で遊んでいて,ロード時間の長さに辟易としていました.ロード中はアクセスランプが点灯していたので,ストレージをSSDに変えればだいぶ改善されそうと考えていました.

ちょうど,メインで使っていたPCのSSDも3年ほど稼働していて,空き容量も逼迫していました.こいつをPS3に流用して,メイン機に入れるSSDを新調すれば,まぁまぁ無駄なく部品を生かせるじゃないかなぁ,と思い,新規にSSDを購入することにしました.

時代はSATAからM.2に移行してきているようなので,新規にSATAは買いたくないなぁと思い,折角なのでPCIExpressなSSDにしてみました.

選択したのが,Intel 750 シリーズの400GB版(SSDPEDMW400G4R5),GB単価もそこまで高いわけではないので,奮発して買ってしまいました.2015年7月8日ぐらいに秋葉原のBUYMORE(元TWOTOP?)で49,980円でした.特価扱いでした.

ここまで,あまり調べずに750を買ってしまったのですが,実はメイン機のZ87マザーはNVMeブートに対応していませんでした.それまで使っていたSSDPS3送りにしたかったので,メインのストレージは750に絞りつつ,何か対応策を考えることになりました.

メイン機の状況

マザーボード ASRock Z87 Extreme3
BIOSバージョン American Megatrends Inc. P2.50, 2014/07/08
UEFIバージョン 2.3.1
旧ストレージ Samsung SSD 830
OS Microsoft Windows Server 2012 R2 Standard
OS2(問題解決・ビルド用) Arch Linux

UEFI向けNVMeドライバーのビルド

対応策は幾つかありますが,この記事ではUEFIにNVMeデバイスをロードすることで解決します.

UEFIのバージョンは2.3.1なのでNVMeドライバを組み込むことが可能なはずです.UEFI向けのNVMeドライバは EDK II に組み込まれているようで,リポジトリをビルドすればドライバが作成されます.

私は Using EDK II with Native GCC · tianocore/tianocore.github.io Wiki · GitHub を参考にビルドしました.詰まった点をいくつか挙げます.

  • 一部のスクリプトがPython2ベースで書かれているので,Python3系が入ってる場合にはシンボリックリンクの修正が必要かもしれません.
  • edksetup.shの実行について,
    bash$ . edksetup.sh BaseTools
    とあります.間違っても./edksetup.sh BaseTools としてはいけません.buildが通らなくなります.
  • NVMeドライバはMdeModulePkg/MdeModulePkg.dscをターゲットにすればビルドされます.私はgcc 5.1.0でビルドしましたが,TOOL_CHAIN_TAGが対応してない(?)ようなので,GCC49を指定してビルドしました.アーキテクチャX64としました.
  • ACTIVE_PLATFORM       = MdeModulePkg/MdeModulePkg.dsc
    TOOL_CHAIN_TAG        = GCC49
    TARGET_ARCH           = X64
    

ビルドするとNvmExpressDve.efiが作成されます.これをEFI ShellでloadすることでNVMeデバイスの認識を試みます.ドライバーをUSBメモリに移動しておきます.

ドライバーのロード

コンピュータを再起動してEFI Shellに入ります.UEFIのブートメニューにShellを起動するメニューがありますが,ファイルを見つけてくれませんでした.とりあえず,Arch LinuxセットアップディスクがEFI Shellの実行ファイルを持っていたので,こいつをUEFIブートしてEFI Shellを起動します.

mapと打って現在認識されているディスクとパーティションを確認します.(ASrock Z87 Extreme3はなんとNTFSを認識するようです.ext4はだめっぽいのに)NVMeデバイス上のパーティションは認識してくれません.

load fs0:\NvmExpressDve.efi のようにドライバをロードします.(fs0はコンピュータの構成によって変わるはずです)

このあと,map -r と打って,NVMeデバイスが認識されているか確認します.パーティションも自動で認識されるはずです.

私はWindowsをブートするために,bcdboot.exeでブートファイルを準備しておきました.diskpartコマンドでお膳立てする必要がありましたので,Windowsインストールディスクのウィザードの途中でNVMeドライバを読み込み,ディスクを認識させました.

無事,EFI Shellでパーティションが認識されたら,fs0:\EFI\Boot\bootx64.efi のようにブートローダーを起動することができます.diskpartでちゃんとドライブ文字やアクティブパーティション等を設定すれば,Windowsをちゃんと起動することが出来ます.(起動時のロゴがおかしいですが)

おわり

Linux環境を起動する場合,カーネルにNVMeドライバを組み込めるので,ブートローダさえ外に置いておけば,UEFIの操作なしに問題なくルートディレクトリとして使うことができます.

Windowsも同様にドライバを組み込めそうですが…よくわかってないです.

調査当初,UEFIのドライバ組み込みは出来ると思ってなかったので,アイデア出しの@baumkuchen_i氏に感謝します.