Upload
hiyohiyo
View
37.679
Download
3
Embed Size (px)
Citation preview
[1]
NVMe で (*´Д`) しようハァハァよ
hiyohiyoTwitter: @openlibsys
http://crystalmark.info/
Sapporo.cpp / 札幌 C++ 勉強会 #10@クリプトン・フューチャー・メディア
[2]
発表内容自己紹介NVMe とは?ベンチマークNVMe の秘密まとめ
[3]自己紹介
[4]
自己紹介名前: hiyohiyo/ ひよひよ年齢: 37 歳家族:妻 , 愛娘 , 愛息子趣味:ソフトウェア開発 ( 約 17 年 )住所:北海道札幌市
代表作 : CrystalDiskInfo, CrystalDiskMark 他(通称 Crystal シリーズ)パソコンがもっと好きになるソフトウェアを一貫して開発しています
Microsoft MVP・ Visual C++ (Jan. 2014 – Sep. 2015) ・ Visual Studio and Development Technologies (Oct. 2015 -)
[5]
CrystalMark 2004ランキング対応ベンチマーク
[6]
CrystalCPUIDCPU 情報ツール
[7]
CrystalDiskMark 5 Shizuku Edition新世代ディスクベンチマーク
ベンチマーク結果なんておまけです www
通常版
[8]
CrystalDiskInfo 6 Shizuku Edition
HDD や SSD の健康状態を音声で教えてくれる !!
新世代ディスク情報ツール
通常版
[9]
[10]
【宣伝】第二世代萌え駆動開発
http://www.slideshare.net/hiyohiyo/mddwin32
ソフトウェア開発で一番大切なことを紹介しています !!
[11]NVMe とは?
[12]
NVMe とは
NVM Express (NVMe) はホストソフトウェアと不揮発性メモリ (Non-volatile memory) のインターフェースです。
NVMe は PCI Express で接続されるエンタープライズ向け SSD およびクライアント向け SSD に最適化されています。
SSD 向け次世代インターフェース
[13]
NVMe @PCIe 3.0x4
SATA/600
SATA/300
SATA/150
UDMA/100
UDMA/66
UDMA/33
0 500 1000 1500 2000 2500 3000 3500 4000
転送レート (MB/s)
[14]
AHCI vs NVMeベンチマーカー視点での最重要ポイント
AHCI NVMe
Queue 1 65536Commands/Queue 32 65536
1x1 32x1 32x8
SAMSUNG SSD 950 PRO 512GB のランダムリードベンチマーク結果 (MB/s)
[15]
Intel SSD 750 1.2TB
[16]
SAMSUNG SSD 950 PRO 512GB
NVMe 調査のためだけに購入
[17]
SAMSUNG SSD 950 PRO vs Intel SSD 750
SAMSUNG SSD
950 PRO
Intel SSD750
※Microsoft 標準ドライバ
[18]
Intel SSD 750 ドライバ比較
Intel NVMe Driver
Microsoft標準ドライバ
[19]NVMe の秘密 1
[20]
突然ですがクイズです!
???
NVMe SSD はストレージであると同時に○○○ デバイスです。
[21]
ヒント 1
Intel 製品の Vendor ID は
8086h
[22]
ヒント 2
○○○ Express
[23]
実は・・・
PCI Express デバイスでもあるのです !!
[24]
と、なると・・・
PCI コンフィギュレーション空間には何か有用な情報があるはず !!
[25]
PCI Express デバイスとしてチェック
出典 : http://www.nvmexpress.org/wp-content/uploads/NVM-Express-1_2a.pdf
Intel※ リトルエンディアン
拡張機能へのポインタ
[26]
PCI Express デバイスとしてチェック
出典 : http://www.nvmexpress.org/wp-content/uploads/NVM-Express-1_2a.pdf
Address Capability ID Next Address
40h 01h 50h
50h 11h 60h
60h 10h ----
CLS Link Speed
1h 250MB/s, 2.5GT/s (8B10)
2h 500MB/s, 5.0GT/s (8B10)
3h 1000MB/s, 8.0GT/s (128B130B)
NLW Link Width
1h x1
2h x2
4h x4
[27]
素朴な疑問
PCI にどうすればアクセス出来るの?
[28]
WinRing0 ( 終了プロジェクト ) の紹介
諸事情により公開終了しています。
マニュアル完備
[29]
WinRing0.dll (WinRing0x64.dll)
WinRing0.vxd
WinRing0.sys WinRing0x64.sys
ユーザーモードRing3
カーネルモード
Ring0
WinRing0 の構成
[30]
1. OpenLibSys.cs をプロジェクトに加えます。 2. using OpenLibSys; 文をソースコードに加えます。 3. Ols ols = new Ols(); などで Ols クラスのオブジェクトを
生成します。4. オブジェクトを介してライブラリの機能を呼び出します。
使用方法
using OpenLibSys;public partial class WinRing0Sample : Form{ private void Form1_Load(object sender, EventArgs e) { uint freq = 1193180000 / 440000; // 440Hz Ols ols = new Ols(); // Beep 音を鳴らします。 ols.WriteIoPortByte(0x43, 0xB6); ols.WriteIoPortByte(0x42, (byte)(freq & 0xFF)); ols.WriteIoPortByte(0x42, (byte)(freq >> 9)); // 以下省略 }}
hogehoge.cs
WinRing0 の使用方法
[31]
// Host Bridgeaddress = ols.FindPciDeviceByClass(0x06, 0x00, 0x00, 0);if (address != 0xFFFFFFFF){ str += "[PCI Confguration Space Dump] HostBridge\r\n"; str += " 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\r\n"; str += "---------------------------------------------------\r\n"; for (int i = 0; i < 256; i+= 16) { str += i.ToString("X2") + "|"; for (int j = 0; j < 16; j++) { str += “ ” + (ols.ReadPciConfigByte(address, (byte)(i + j))).ToString("X2"); } str += "\r\n"; }}
PCI コンフィギュレーション空間のダンプ
[32]NVMe の秘密 2
[33]
NVMe のコマンド体系
標準コマンド必須 3 種類
Admin コマンド
必須 10 種類
[34]
S.M.A.R.T. 情報の取得 (NVMe の場合 )
Microsoft 製 NVMe Driver
NVMe SSDs
Get Log Page
Admin コマンドが通らない !!
S.M.A.R.T. にアクセスするためのコマンド
標準コマンド Admin コマンド
ReadFile() Win32API※
Read ※NVMe 標準コマンド
[35]
S.M.A.R.T. 情報の取得 (ATA の場合 )
Microsoft 製 ATA Driver
ATA HDD/SSD
S.M.A.R.T. にアクセスするためのコマンドReadFile()
Win32API※
READ **** ※ATA コマンド
SMART READ DATAATA PASS THROUGH という仕組
みを使って直接 ATA コマンドを送る
[36]
S.M.A.R.T. 情報の取得 (USB の場合 )
[37]
どうしたら・・・
NVMe SSD の S.M.A.R.T. 情報が
Windows 上から読めない !!!!!!!!!!
NVMe \ (^o^)/オワタ
[38]
神降臨
日本語の (*´Д`) ハァハァツイートに韓国の神から反応が !!
グローバルな活動が呼んだ奇跡か !?
[39]
神降臨
http://naraeon.net/
https://github.com/ebangin127/nvmetools
[40]
S.M.A.R.T. 情報の取得 (SAMSUNG)
Microsoft 製 NVMe Driver
SAMSUNG SSD 950 PRO (限定 )
Security Command (SCSI)
Get Log Page
ReadFile() Win32API※
READ ※NVMe コマンド
秘密の裏口からアクセ
ス
[41]
::ZeroMemory(&sptwb, sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS24));
sptwb.Spt.Length = sizeof(SCSI_PASS_THROUGH);sptwb.Spt.PathId = 0;sptwb.Spt.TargetId = 0;sptwb.Spt.Lun = 0;sptwb.Spt.SenseInfoLength = 24;sptwb.Spt.DataTransferLength = IDENTIFY_BUFFER_SIZE;sptwb.Spt.TimeOutValue = 2;sptwb.Spt.DataBufferOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS24, DataBuf);sptwb.Spt.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS24, SenseBuf);
sptwb.Spt.CdbLength = 16;sptwb.Spt.Cdb[0] = 0xB5; // SECURITY PROTOCOL INsptwb.Spt.Cdb[1] = 0xFE; // SAMSUNG PROTOCOLsptwb.Spt.Cdb[3] = 6; // Get Log Pagesptwb.Spt.Cdb[9] = 0x40; // Transfer Lengthsptwb.Spt.DataIn = SCSI_IOCTL_DATA_OUT;sptwb.DataBuf[0] = 2;sptwb.DataBuf[4] = 0xFF;sptwb.DataBuf[5] = 0xFF;sptwb.DataBuf[6] = 0xFF;sptwb.DataBuf[7] = 0xFF;
length = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS24, DataBuf) + sptwb.Spt.DataTransferLength;
bRet = ::DeviceIoControl(hIoCtrl, IOCTL_SCSI_PASS_THROUGH, &sptwb, length, &sptwb, length, &dwReturned, NULL);
SAMSUNG SSD 950 PRO へアクセス一部抜粋
Magic Number: これ以外の値だと動かない
[42]
暫定版公開中 !!
[43]
S.M.A.R.T. 情報の取得 (Intel)
Intel 製 NVMe Driver
Intel SSD 750(限定 )
ReadFile() Win32API※
READ ※NVMe コマンド
Get Log Page
S.M.A.R.T. にアクセスするためのコマンド
Admin コマンド
NVMe PASS THROUGH (Intel 専用 )
を使って直接 NVMe コマンドを送る
[44]
NVMe SSD も見えるようになりました !!
地獄の個別対応が……
[45]
S.M.A.R.T. の形式が全然違う !!SAMSUNG SSD 830 512GB (SATA) SAMSUNG SSD 950 PRO 512GB (NVMe)
S.M.A.R.T. 形式の比較
[46]
S.M.A.R.T. の形式が全然違う !!SAMSUNG SSD 830 512GB (SATA) SAMSUNG SSD 950 PRO 512GB (NVMe)
S.M.A.R.T. 形式の比較
[47]
神プロジェクトは Delphi 製だった……ステップ実行のため体験版ゲット !!
余談
[48]まとめ
[49]
まとめ
NVMe SSD 今すぐ買いに走りましょ
う !!
[50]
まとめ
• オープンソースで公開するととても良いことが
起きることもある。
• テスト用機材は多少高くても買う。
⇒ 実機なしの開発は地獄。
• 今回の発表がきっかけで NVMe 対応出来ました。
⇒ この機会がなければかなり先になっていた !?• ハードウェア関連ソフトの開発は楽しいです。
⇒ (*´Д`) ハァハァ
[51]参考文献
[52]
• nvmexpress.orghttp://www.nvmexpress.org/
• NVM Express 1.2a Specificationhttp://www.nvmexpress.org/wp-content/uploads/NVM-Express-1_2a.pdf
• Naraeon NVMe Toolshttps://github.com/ebangin127/nvmetools
参考文献
[53]
ご清聴ありがとうございました