Skip to content
Crane Chu edited this page May 12, 2020 · 8 revisions

Buffer对象为NVMe命令提供可用于DMA操作的内存空间,pynvme底层的SPDK NVMe驱动会为Buffer生成PRP。Buffer和下面要讲到的Qpair类提供了对NVMe协议第4章相关内容的支持。我们在上一个例子中见到过Buffer类,我们现在来看更多例子。

def test_buffer_read_write(nvme0, nvme0n1):  #L1
    buf = d.Buffer(512, 'ascii table')  #L2
    logging.info("physical address of buffer: 0x%lx" % buf.phys_addr)  #L3
    
    for i in range(512):
        buf[i] = i%256  #L6
    print(buf.dump(128))  #L7
    
    buf = d.Buffer(512, 'random', pvalue=100, ptype=0xbeef)  #L9
    print(buf.dump())
    buf = d.Buffer(512, 'random', pvalue=100, ptype=0xbeef)  #L11
    print(buf.dump())

    qpair = d.Qpair(nvme0, 10)  #14
    nvme0n1.write(qpair, buf, 0).waitdone()  #15
    nvme0n1.read(qpair, buf, 0).waitdone()  #16
    print(buf.dump())
  • L1. 依然定义一个pytest测试函数。我们后面会省略import部分。
  • L2. 建立一个大小为512字节的Buffer对象,并给一个名字“ascii table"。
  • L3. Buffer具有固定的物理地址,不会被OS换出。
  • L6. 逐个字节填充Buffer对象。
  • L7. 打印Buffer的前面128字节。
  • L9. 创建一个512字节随机数据的Buffer对象。
  • L11. 创建另一个512字节随机数据的Buffer对象。从测试结果可以看到两份随机数据是完全不同的。
  • L14. 创建一个深度为10的IO队列。
  • L15. 发送一个IO写命令,将L11定义的随机数据Buffer写入LBA0。
  • L16. 发送一个IO读命令,将LBA0的数据读到Buffer中,并打印出来。

运行测试,可以看到Buffer的具体数据如下。由此,我们可以构造任意数据写入SSD。但是需要注意的是,pynvme自带LBA地址和数据检查的功能,所以pynvme驱动在写数据时,用64bit LBA地址覆盖Buffer的前8个字节。另外,为了保证每一笔写入数据都不一样,pynvme会用一个单增的64bit token覆盖LBA数据的最后8字节。在读数据的时候,pynvme会检查这些数据的正确性。

在这个例子中,我们在最后的输出中能看到LBA0开头的8字节填入LBA地址0,结尾的8字节被填入token值1。token是从1开始单调递增的64bit整数,用来保证每个写入的LBA都有不同的数据,用来暴露出某些数据版本错误的问题。

laptop:~/pynvme▶ sudo python3 -m pytest scripts/cookbook.py::test_buffer_read_write --pciaddr=3d:00.0 -s
================================= test session starts =================================
platform linux -- Python 3.8.2, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
rootdir: /home/cranechu/pynvme, inifile: pytest.ini
plugins: cov-2.8.1
collected 1 item                                                                      

scripts/cookbook.py::test_buffer_read_write 
----------------------------------- live log setup ------------------------------------
[2020-05-11 00:39:16.880] INFO pciaddr(55): running tests on DUT 3d:00.0
[2020-05-11 00:39:16.884983] INFO driver.c(633) probe_cb: Attaching to NVMe Controller at 0000:3d:00.0
[2020-05-11 00:39:16.885228] INFO intr_mgt.c(174) msix_intc_init: vector_num 19
[2020-05-11 00:39:16.897] INFO script(68): setup random seed: 0xdf0ea740
[2020-05-11 00:39:17.239974] NOTICE driver.c(1049) ns_table_init: memory is not large enough to keep CRC32 table.
[2020-05-11 00:39:17.240012] NOTICE driver.c(1050) ns_table_init: Data verification is disabled!
------------------------------------ live log call ------------------------------------
[2020-05-11 00:39:17.240] INFO test_buffer_read_write(28): physical address of buffer: 0x17f998000
00000000  00 01 02 03 04 05 06 07  08 09 0a 0b 0c 0d 0e 0f  ................
00000010  10 11 12 13 14 15 16 17  18 19 1a 1b 1c 1d 1e 1f  ................
00000020  20 21 22 23 24 25 26 27  28 29 2a 2b 2c 2d 2e 2f   !"#$%&'()*+,-./
00000030  30 31 32 33 34 35 36 37  38 39 3a 3b 3c 3d 3e 3f  0123456789:;<=>?
00000040  40 41 42 43 44 45 46 47  48 49 4a 4b 4c 4d 4e 4f  @ABCDEFGHIJKLMNO
00000050  50 51 52 53 54 55 56 57  58 59 5a 5b 5c 5d 5e 5f  PQRSTUVWXYZ[\]^_
00000060  60 61 62 63 64 65 66 67  68 69 6a 6b 6c 6d 6e 6f  `abcdefghijklmno
00000070  70 71 72 73 74 75 76 77  78 79 7a 7b 7c 7d 7e 7f  pqrstuvwxyz{|}~.

00000000  d1 3f f7 ea 1c 81 a7 38  b2 2f e8 7c 43 b8 8c 6d  .?.....8./.|C..m
00000010  f8 85 30 ad d5 6c ba b6  60 55 b8 cc 18 72 f1 9d  ..0..l..`U...r..
00000020  79 95 b7 09 88 dd ea eb  83 37 34 f9 fc 67 1d 00  y........74..g..
00000030  45 11 27 25 fe ef 8f 10  e5 68 a3 b8 a5 08 91 92  E.'%.....h......
00000040  c4 e8 51 51 ba bd 1e 0f  f8 bd 25 bc 24 d1 2d 8b  ..QQ......%.$.-.
00000050  66 37 dc 7d df a2 01 7a  53 b8 46 12 4f 3b 55 73  f7.}...zS.F.O;Us
00000060  f3 af 7e ee 1a 8e 4e 8e  a4 9b ce 9a f0 cd bc 79  ..~...N........y
00000070  28 e8 d6 b7 51 97 b6 9b  ac 5a e9 12 52 1d 0b 42  (...Q....Z..R..B
00000080  97 79 de ce 71 82 f0 35  4c ec f3 66 3f 00 74 2b  .y..q..5L..f?.t+
00000090  aa da cf 6e 14 06 e1 a0  0d ed 04 c1 10 f5 ed 4f  ...n...........O
000000a0  ba 07 b6 e2 c2 32 97 73  32 10 e3 22 ad 73 72 e9  .....2.s2..".sr.
000000b0  9e 5e 15 6c 2a e8 73 4f  9f 0c 82 9a 1b 45 c8 ff  .^.l*.sO.....E..
000000c0  13 a0 10 4f 51 35 81 47  93 56 03 79 8f 13 b3 46  ...OQ5.G.V.y...F
000000d0  4b f8 db 95 8f df 3b e7  93 23 2e 09 3a 2a 73 18  K.....;..#..:*s.
000000e0  cd fd 5a 52 32 c8 9b d8  93 58 ac 09 b6 92 d2 58  ..ZR2....X.....X
000000f0  70 31 52 29 12 75 ee f3  83 45 e6 00 55 7d 62 12  p1R).u...E..U}b.
00000100  03 e9 0a 7c 6d fe ed a6  eb 90 18 01 01 f5 e1 cb  ...|m...........
00000110  c8 66 f1 7a 39 88 76 68  17 e1 42 c9 ef 72 f9 7e  .f.z9.vh..B..r.~
00000120  4d 0a 43 19 7d b9 59 62  5b cb 2d 75 fa eb 49 8e  M.C.}.Yb[.-u..I.
00000130  40 13 81 68 77 1b 4d ad  9c 2c dc bd 81 42 bd 7e  @..hw.M..,...B.~
00000140  1b b9 37 db 6e de 66 af  c4 5f 65 e3 4c 98 53 20  ..7.n.f.._e.L.S 
00000150  ae 5c 94 32 a4 bb db fd  3e da b7 e8 1a 57 ab 8a  .\.2....>....W..
00000160  a0 d9 0f e6 2a f8 f9 7e  89 07 f1 c7 92 4b 42 3e  ....*..~.....KB>
00000170  34 7d 5b b0 43 49 8b 1e  18 2b e2 f7 d9 0a b4 72  4}[.CI...+.....r
00000180  c0 b8 b7 09 f6 8f 7f d8  1c f4 97 81 17 c3 2d fc  ..............-.
00000190  f6 45 02 83 1b 91 ba 92  1e 01 af 62 43 63 ba f3  .E.........bCc..
000001a0  ff 71 a6 b9 af 09 e1 a0  37 dd 7d d0 1d ca 0c 18  .q......7.}.....
000001b0  af 35 2f 2c 15 77 84 49  8a d7 52 75 6c bc 2c 69  .5/,.w.I..Rul.,i
000001c0  f7 c2 59 db 81 0d 31 5a  12 23 f2 9a 34 2e 65 dd  ..Y...1Z.#..4.e.
000001d0  0e a8 ee cd 7d 96 4b 58  22 1b 0b f1 ac 45 51 41  ....}.KX"....EQA
000001e0  ab 88 d4 5a 8e d3 9b da  b0 43 85 17 94 ed 6d a3  ...Z.....C....m.
000001f0  46 c0 ee d8 cf 9a af 02  13 68 05 76 ec 7c 45 a3  F........h.v.|E.

00000000  be b3 68 b2 02 40 22 9f  02 b1 fd 5f 99 7d 4c e9  ..h..@"...._.}L.
00000010  03 a0 bb 57 b7 d8 a2 fa  b6 e1 dd f4 02 11 b9 11  ...W............
00000020  ad e8 56 c3 e5 76 ca c8  60 31 7b 31 0c e7 b3 5d  ..V..v..`1{1...]
00000030  6e 26 a1 83 45 b4 4c fb  e4 b2 a7 1d 53 8d f4 c2  n&..E.L.....S...
00000040  e8 72 ce 74 8d a7 0b fb  fb d2 1f c7 81 8a 57 78  .r.t..........Wx
00000050  b1 16 48 67 67 d9 ac 07  04 a2 6b 91 dd 1e 55 7d  ..Hgg.....k...U}
00000060  48 23 27 70 fa 62 12 7b  ff ff 18 e6 ab 40 32 90  H#'p.b.{.....@2.
00000070  9f 19 a5 0e dc 3b 9c 1c  82 23 55 18 23 3c b2 43  .....;...#U.#<.C
00000080  6d 03 30 1e 6f 19 01 a1  1d eb c9 4b 5c 5a da 09  m.0.o......K\Z..
00000090  2f 82 d8 af ef b6 6b 00  c9 df c3 1b 88 77 05 58  /.....k......w.X
000000a0  11 3a 81 e6 3b a6 5c c7  a5 3c 5e 37 a3 20 af 0d  .:..;.\..<^7. ..
000000b0  0b 38 68 97 49 c7 6c 2b  38 17 37 c0 2e 6b 3a 31  .8h.I.l+8.7..k:1
000000c0  cd 0a 71 84 71 c6 db e5  ab 95 89 ed ac f0 b8 68  ..q.q..........h
000000d0  2a 68 92 b1 fa 05 e9 10  ab d3 79 15 12 93 3c 20  *h........y...< 
000000e0  be 9c 08 96 f3 7c c4 78  72 36 6a 11 03 ee 53 5c  .....|.xr6j...S\
000000f0  11 7d c1 e3 36 ac 0e 48  78 d3 e1 75 2b 01 ba fc  .}..6..Hx..u+...
00000100  43 e3 f0 a6 e3 33 98 7c  60 18 b1 7f 75 5b 55 36  C....3.|`...u[U6
00000110  fa 7f 42 6c 11 66 57 4d  ba d4 41 7c a3 ec 37 c9  ..Bl.fWM..A|..7.
00000120  9e 38 66 71 49 61 05 b9  e2 f4 7d 78 d6 32 33 2e  .8fqIa....}x.23.
00000130  c8 b1 f7 ad a3 35 b5 9b  55 76 fb 50 34 5f d3 0f  .....5..Uv.P4_..
00000140  c7 c2 a6 66 68 3b ed a1  95 05 d5 2d bc 08 8a 6e  ...fh;.....-...n
00000150  b2 04 6a 7e d5 2e 5c 9b  3f 15 a1 3f 01 7b 2f 05  ..j~..\.?..?.{/.
00000160  8b bc 79 54 ce fe 63 47  10 63 18 02 5e c6 a4 63  ..yT..cG.c..^..c
00000170  91 83 fe 18 26 61 f5 0d  7c 42 2b 55 ab 0e 93 a4  ....&a..|B+U....
00000180  c7 a9 27 86 46 4d 97 0b  f4 91 f0 95 1b 7d eb f3  ..'.FM.......}..
00000190  b6 e3 e2 8f c7 92 29 28  e5 44 51 b1 c2 48 57 dc  ......)(.DQ..HW.
000001a0  4b 62 8f 64 cb 43 fc 36  00 99 14 9e 23 57 04 ab  Kb.d.C.6....#W..
000001b0  da d3 7a 1b 42 07 c0 7c  6d b6 57 e0 31 6a e2 c5  ..z.B..|m.W.1j..
000001c0  81 6e 06 4e bc f2 b4 49  08 25 85 2a 27 b1 52 1d  .n.N...I.%.*'.R.
000001d0  a1 ca b6 56 15 1d 01 6e  52 5d 97 90 f4 43 28 37  ...V...nR]...C(7
000001e0  b2 87 a9 e9 88 76 ab ea  ea a4 76 3f 4c 63 5b ef  .....v....v?Lc[.
000001f0  fe 10 31 31 a0 31 2b f4  c5 c6 67 11 65 ae 0b c7  ..11.1+...g.e...

00000000  00 00 00 00 00 00 00 00  02 b1 fd 5f 99 7d 4c e9  ..........._.}L.
00000010  03 a0 bb 57 b7 d8 a2 fa  b6 e1 dd f4 02 11 b9 11  ...W............
00000020  ad e8 56 c3 e5 76 ca c8  60 31 7b 31 0c e7 b3 5d  ..V..v..`1{1...]
00000030  6e 26 a1 83 45 b4 4c fb  e4 b2 a7 1d 53 8d f4 c2  n&..E.L.....S...
00000040  e8 72 ce 74 8d a7 0b fb  fb d2 1f c7 81 8a 57 78  .r.t..........Wx
00000050  b1 16 48 67 67 d9 ac 07  04 a2 6b 91 dd 1e 55 7d  ..Hgg.....k...U}
00000060  48 23 27 70 fa 62 12 7b  ff ff 18 e6 ab 40 32 90  H#'p.b.{.....@2.
00000070  9f 19 a5 0e dc 3b 9c 1c  82 23 55 18 23 3c b2 43  .....;...#U.#<.C
00000080  6d 03 30 1e 6f 19 01 a1  1d eb c9 4b 5c 5a da 09  m.0.o......K\Z..
00000090  2f 82 d8 af ef b6 6b 00  c9 df c3 1b 88 77 05 58  /.....k......w.X
000000a0  11 3a 81 e6 3b a6 5c c7  a5 3c 5e 37 a3 20 af 0d  .:..;.\..<^7. ..
000000b0  0b 38 68 97 49 c7 6c 2b  38 17 37 c0 2e 6b 3a 31  .8h.I.l+8.7..k:1
000000c0  cd 0a 71 84 71 c6 db e5  ab 95 89 ed ac f0 b8 68  ..q.q..........h
000000d0  2a 68 92 b1 fa 05 e9 10  ab d3 79 15 12 93 3c 20  *h........y...< 
000000e0  be 9c 08 96 f3 7c c4 78  72 36 6a 11 03 ee 53 5c  .....|.xr6j...S\
000000f0  11 7d c1 e3 36 ac 0e 48  78 d3 e1 75 2b 01 ba fc  .}..6..Hx..u+...
00000100  43 e3 f0 a6 e3 33 98 7c  60 18 b1 7f 75 5b 55 36  C....3.|`...u[U6
00000110  fa 7f 42 6c 11 66 57 4d  ba d4 41 7c a3 ec 37 c9  ..Bl.fWM..A|..7.
00000120  9e 38 66 71 49 61 05 b9  e2 f4 7d 78 d6 32 33 2e  .8fqIa....}x.23.
00000130  c8 b1 f7 ad a3 35 b5 9b  55 76 fb 50 34 5f d3 0f  .....5..Uv.P4_..
00000140  c7 c2 a6 66 68 3b ed a1  95 05 d5 2d bc 08 8a 6e  ...fh;.....-...n
00000150  b2 04 6a 7e d5 2e 5c 9b  3f 15 a1 3f 01 7b 2f 05  ..j~..\.?..?.{/.
00000160  8b bc 79 54 ce fe 63 47  10 63 18 02 5e c6 a4 63  ..yT..cG.c..^..c
00000170  91 83 fe 18 26 61 f5 0d  7c 42 2b 55 ab 0e 93 a4  ....&a..|B+U....
00000180  c7 a9 27 86 46 4d 97 0b  f4 91 f0 95 1b 7d eb f3  ..'.FM.......}..
00000190  b6 e3 e2 8f c7 92 29 28  e5 44 51 b1 c2 48 57 dc  ......)(.DQ..HW.
000001a0  4b 62 8f 64 cb 43 fc 36  00 99 14 9e 23 57 04 ab  Kb.d.C.6....#W..
000001b0  da d3 7a 1b 42 07 c0 7c  6d b6 57 e0 31 6a e2 c5  ..z.B..|m.W.1j..
000001c0  81 6e 06 4e bc f2 b4 49  08 25 85 2a 27 b1 52 1d  .n.N...I.%.*'.R.
000001d0  a1 ca b6 56 15 1d 01 6e  52 5d 97 90 f4 43 28 37  ...V...nR]...C(7
000001e0  b2 87 a9 e9 88 76 ab ea  ea a4 76 3f 4c 63 5b ef  .....v....v?Lc[.
000001f0  fe 10 31 31 a0 31 2b f4  01 00 00 00 00 00 00 00  ..11.1+.........

PASSED
---------------------------------- live log teardown ----------------------------------
[2020-05-11 00:39:17.243] INFO script(70): test duration: 0.346 sec


================================== 1 passed in 0.39s ==================================

Clone this wiki locally