Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

of

NVMe でハァハァしようよ #sapporocpp  Slide 1 NVMe でハァハァしようよ #sapporocpp  Slide 2 NVMe でハァハァしようよ #sapporocpp  Slide 3 NVMe でハァハァしようよ #sapporocpp  Slide 4 NVMe でハァハァしようよ #sapporocpp  Slide 5 NVMe でハァハァしようよ #sapporocpp  Slide 6 NVMe でハァハァしようよ #sapporocpp  Slide 7 NVMe でハァハァしようよ #sapporocpp  Slide 8 NVMe でハァハァしようよ #sapporocpp  Slide 9 NVMe でハァハァしようよ #sapporocpp  Slide 10 NVMe でハァハァしようよ #sapporocpp  Slide 11 NVMe でハァハァしようよ #sapporocpp  Slide 12 NVMe でハァハァしようよ #sapporocpp  Slide 13 NVMe でハァハァしようよ #sapporocpp  Slide 14 NVMe でハァハァしようよ #sapporocpp  Slide 15 NVMe でハァハァしようよ #sapporocpp  Slide 16 NVMe でハァハァしようよ #sapporocpp  Slide 17 NVMe でハァハァしようよ #sapporocpp  Slide 18 NVMe でハァハァしようよ #sapporocpp  Slide 19 NVMe でハァハァしようよ #sapporocpp  Slide 20 NVMe でハァハァしようよ #sapporocpp  Slide 21 NVMe でハァハァしようよ #sapporocpp  Slide 22 NVMe でハァハァしようよ #sapporocpp  Slide 23 NVMe でハァハァしようよ #sapporocpp  Slide 24 NVMe でハァハァしようよ #sapporocpp  Slide 25 NVMe でハァハァしようよ #sapporocpp  Slide 26 NVMe でハァハァしようよ #sapporocpp  Slide 27 NVMe でハァハァしようよ #sapporocpp  Slide 28 NVMe でハァハァしようよ #sapporocpp  Slide 29 NVMe でハァハァしようよ #sapporocpp  Slide 30 NVMe でハァハァしようよ #sapporocpp  Slide 31 NVMe でハァハァしようよ #sapporocpp  Slide 32 NVMe でハァハァしようよ #sapporocpp  Slide 33 NVMe でハァハァしようよ #sapporocpp  Slide 34 NVMe でハァハァしようよ #sapporocpp  Slide 35 NVMe でハァハァしようよ #sapporocpp  Slide 36 NVMe でハァハァしようよ #sapporocpp  Slide 37 NVMe でハァハァしようよ #sapporocpp  Slide 38 NVMe でハァハァしようよ #sapporocpp  Slide 39 NVMe でハァハァしようよ #sapporocpp  Slide 40 NVMe でハァハァしようよ #sapporocpp  Slide 41 NVMe でハァハァしようよ #sapporocpp  Slide 42 NVMe でハァハァしようよ #sapporocpp  Slide 43 NVMe でハァハァしようよ #sapporocpp  Slide 44 NVMe でハァハァしようよ #sapporocpp  Slide 45 NVMe でハァハァしようよ #sapporocpp  Slide 46 NVMe でハァハァしようよ #sapporocpp  Slide 47 NVMe でハァハァしようよ #sapporocpp  Slide 48 NVMe でハァハァしようよ #sapporocpp  Slide 49 NVMe でハァハァしようよ #sapporocpp  Slide 50 NVMe でハァハァしようよ #sapporocpp  Slide 51 NVMe でハァハァしようよ #sapporocpp  Slide 52 NVMe でハァハァしようよ #sapporocpp  Slide 53
Upcoming SlideShare
Ansible 入門 #01 (初心者向け)
Next
Download to read offline and view in fullscreen.

7 Likes

Share

Download to read offline

NVMe でハァハァしようよ #sapporocpp

Download to read offline

20151226 に開催された Sapporo.cpp / 札幌C++勉強会 #10
http://sapporocpp.connpass.com/event/22616/
にて、NVMe の魅力について熱く紹介させていただきました。

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

NVMe でハァハァしようよ #sapporocpp

  1. 1. [1] hiyohiyo Twitter: @openlibsys http://crystalmark.info/ Sapporo.cpp / 札幌C++勉強会 #10 @クリプトン・フューチャー・メディア
  2. 2. [2] 発表内容 自己紹介 NVMe とは? ベンチマーク NVMe の秘密 まとめ
  3. 3. [3] 自己紹介
  4. 4. [4] 自己紹介 名前:hiyohiyo/ひよひよ 年齢:37歳 家族:妻, 愛娘, 愛息子 趣味:ソフトウェア開発 (約17年) 住所:北海道札幌市 代表作: CrystalDiskInfo, CrystalDiskMark 他(通称 Crystal シリーズ) パソコンがもっと好きになるソフトウェアを一貫して開発しています Microsoft MVP ・Visual C++ (Jan. 2014 – Sep. 2015) ・Visual Studio and Development Technologies (Oct. 2015 -)
  5. 5. [5] CrystalMark 2004 ランキング対応ベンチマーク
  6. 6. [6] CrystalCPUID CPU情報ツール
  7. 7. [7] CrystalDiskMark 5 Shizuku Edition 新世代ディスクベンチマーク ベンチマーク結果なんておまけですwww 通常版
  8. 8. [8] CrystalDiskInfo 6 Shizuku Edition HDDやSSDの健康状態を音声で教えてくれる!! 新世代ディスク情報ツール 通常版
  9. 9. [9]
  10. 10. [10] 【宣伝】第二世代萌え駆動開発 http://www.slideshare.net/hiyohiyo/mddwin32 ソフトウェア開発で一番大切 なことを紹介しています!!
  11. 11. [11] NVMe とは?
  12. 12. [12] NVMe とは NVM Express (NVMe) はホストソフトウェアと不揮発性 メモリ(Non-volatile memory)のインターフェースです。 NVMe は PCI Express で接続されるエンタープライズ向け SSD およびクライアント向け SSD に最適化されています。 SSD 向け次世代インターフェース
  13. 13. [13]0 500 1000 1500 2000 2500 3000 3500 4000 NVMe @PCIe 3.0x4 SATA/600 SATA/300 SATA/150 UDMA/100 UDMA/66 UDMA/33 転送レート (MB/s)
  14. 14. [14] AHCI vs NVMe ベンチマーカー視点での最重要ポイント AHCI NVMe Queue 1 65536 Commands/Queue 32 65536 1x1 32x1 32x8 SAMSUNG SSD 950 PRO 512GB の ランダムリードベンチマーク結果 (MB/s)
  15. 15. [15] Intel SSD 750 1.2TB
  16. 16. [16] SAMSUNG SSD 950 PRO 512GB NVMe 調査のためだけに購入
  17. 17. [17] SAMSUNG SSD 950 PRO vs Intel SSD 750 SAMSUNG SSD 950 PRO Intel SSD 750 ※Microsoft 標準ドライバ
  18. 18. [18] Intel SSD 750 ドライバ比較 Intel NVMe Driver Microsoft 標準ドライバ
  19. 19. [19] NVMe の秘密 1
  20. 20. [20] 突然ですがクイズです! ??? NVMe SSD はストレージであると 同時に○○○ デバイスです。
  21. 21. [21] ヒント 1 Intel 製品の Vendor ID は 8086h
  22. 22. [22] ヒント 2 ○○○ Express
  23. 23. [23] 実は・・・ PCI Express デバイスでもあるのです!!
  24. 24. [24] と、なると・・・ PCI コンフィギュレーション空間 には何か有用な情報があるはず!!
  25. 25. [25] PCI Express デバイスとしてチェック 出典: http://www.nvmexpress.org/wp-content/uploads/NVM-Express-1_2a.pdf Intel ※リトルエンディアン 拡張機能へのポインタ
  26. 26. [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. 27. [27] 素朴な疑問 PCI にどうすれば アクセス出来るの?
  28. 28. [28] WinRing0 (終了プロジェクト) の紹介 諸事情により公開終了しています。 マニュアル完備
  29. 29. [29] ユーザーモード Ring3 カーネルモード Ring0 WinRing0 の構成
  30. 30. [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. 31. [31] // Host Bridge address = ols.FindPciDeviceByClass(0x06, 0x00, 0x00, 0); if (address != 0xFFFFFFFF) { str += "[PCI Confguration Space Dump] HostBridgern"; str += " 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0Frn"; str += "---------------------------------------------------rn"; 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 += "rn"; } } PCI コンフィギュレーション空間のダンプ
  32. 32. [32] NVMe の秘密 2
  33. 33. [33] NVMe のコマンド体系 標準コマンド 必須3種類 Admin コマンド 必須10種類
  34. 34. [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. 35. [35] S.M.A.R.T. 情報の取得 (ATAの場合) Microsoft 製 ATA Driver ATA HDD/SSD S.M.A.R.T. にアクセス するためのコマンドReadFile() ※Win32API READ **** ※ATA コマンド SMART READ DATA ATA PASS THROUGH という仕組み を使って直接 ATA コマンドを送る
  36. 36. [36] S.M.A.R.T. 情報の取得 (USBの場合)
  37. 37. [37] どうしたら・・・ NVMe SSD の S.M.A.R.T. 情報が Windows 上から読めない!!!!!!!!!! NVMe \(^o^)/オワタ
  38. 38. [38] 神降臨 日本語の (*´Д`)ハァハァ ツイートに 韓国の神から反応が!! グローバルな活動が呼んだ奇跡か!?
  39. 39. [39] 神降臨 http://naraeon.net/ https://github.com/ebangin127/nvmetools
  40. 40. [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. 41. [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 IN sptwb.Spt.Cdb[1] = 0xFE; // SAMSUNG PROTOCOL sptwb.Spt.Cdb[3] = 6; // Get Log Page sptwb.Spt.Cdb[9] = 0x40; // Transfer Length sptwb.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. 42. [42] 暫定版公開中!!
  43. 43. [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. 44. [44] NVMe SSDも 見えるように なりました!! 地獄の個別対応が……
  45. 45. [45] S.M.A.R.T. の形式が全然違う!! SAMSUNG SSD 830 512GB (SATA) SAMSUNG SSD 950 PRO 512GB (NVMe) S.M.A.R.T. 形式の比較
  46. 46. [46] S.M.A.R.T. の形式が全然違う!! SAMSUNG SSD 830 512GB (SATA) SAMSUNG SSD 950 PRO 512GB (NVMe) S.M.A.R.T. 形式の比較
  47. 47. [47] 神プロジェクトは Delphi 製だった…… ステップ実行のため体験版ゲット!! 余談
  48. 48. [48] まとめ
  49. 49. [49] まとめ NVMe SSD 今すぐ買いに走りましょう!!
  50. 50. [50] まとめ • オープンソースで公開するととても良いことが 起きることもある。 • テスト用機材は多少高くても買う。 ⇒ 実機なしの開発は地獄。 • 今回の発表がきっかけでNVMe対応出来ました。 ⇒ この機会がなければかなり先になっていた!? • ハードウェア関連ソフトの開発は楽しいです。 ⇒ (*´Д`)ハァハァ
  51. 51. [51] 参考文献
  52. 52. [52] • nvmexpress.org http://www.nvmexpress.org/ • NVM Express 1.2a Specification http://www.nvmexpress.org/wp-content/uploads/NVM-Express-1_2a.pdf • Naraeon NVMe Tools https://github.com/ebangin127/nvmetools 参考文献
  53. 53. [53] ご清聴ありがとうございました
  • ShuhoKoyama

    Nov. 2, 2017
  • toshiyukihiraka9

    Mar. 5, 2016
  • furuya02

    Feb. 22, 2016
  • ishisaka

    Feb. 6, 2016
  • picosleep

    Jan. 27, 2016
  • ayokura

    Jan. 1, 2016
  • matarillo

    Dec. 28, 2015

20151226 に開催された Sapporo.cpp / 札幌C++勉強会 #10 http://sapporocpp.connpass.com/event/22616/ にて、NVMe の魅力について熱く紹介させていただきました。

Views

Total views

43,227

On Slideshare

0

From embeds

0

Number of embeds

32,784

Actions

Downloads

31

Shares

0

Comments

0

Likes

7

×