forked from pynvme/pynvme
-
Notifications
You must be signed in to change notification settings - Fork 0
Buffer
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 ==================================