如何解释 SanDisk SDCZ48-064G 的这些 Flashbench 结果?

Joo*_*ook 5 partitioning usb-flash-drive

我已经尝试过 linaro 的 flashbench 工具,但一直在猜测我的耳块大小可能在哪里。如果能就如何解释我的结果提供一些意见,那就太好了。

\n\n

我的 USB 记忆棒是 SanDisk Extreme 64GB SDCZ48-064G,我在 FAT32 SDCard Class10 卡上使用 Lubuntu 14 在 USB3 和 USB2 上进行了测试。

\n\n

这是我用USB3测得的:

\n\n
sudo ./flashbench -a -b=1024 -c 1000 /dev/sdi\n\nalign 17179869184   pre 429\xc2\xb5s   on 438\xc2\xb5s    post 334\xc2\xb5s  diff 56.1\xc2\xb5s\nalign 8589934592    pre 429\xc2\xb5s   on 436\xc2\xb5s    post 334\xc2\xb5s  diff 54.5\xc2\xb5s\nalign 4294967296    pre 431\xc2\xb5s   on 438\xc2\xb5s    post 337\xc2\xb5s  diff 54\xc2\xb5s\nalign 2147483648    pre 455\xc2\xb5s   on 461\xc2\xb5s    post 365\xc2\xb5s  diff 51.1\xc2\xb5s\nalign 1073741824    pre 455\xc2\xb5s   on 461\xc2\xb5s    post 365\xc2\xb5s  diff 51.8\xc2\xb5s\nalign 536870912     pre 451\xc2\xb5s   on 456\xc2\xb5s    post 358\xc2\xb5s  diff 51.7\xc2\xb5s\nalign 268435456     pre 452\xc2\xb5s   on 458\xc2\xb5s    post 359\xc2\xb5s  diff 52.1\xc2\xb5s\nalign 134217728     pre 452\xc2\xb5s   on 459\xc2\xb5s    post 360\xc2\xb5s  diff 52.5\xc2\xb5s\nalign 67108864      pre 451\xc2\xb5s   on 460\xc2\xb5s    post 360\xc2\xb5s  diff 54.3\xc2\xb5s\nalign 33554432      pre 434\xc2\xb5s   on 440\xc2\xb5s    post 339\xc2\xb5s  diff 53.7\xc2\xb5s\nalign 16777216      pre 452\xc2\xb5s   on 460\xc2\xb5s    post 342\xc2\xb5s  diff 63\xc2\xb5s\nalign 8388608       pre 451\xc2\xb5s   on 458\xc2\xb5s    post 359\xc2\xb5s  diff 52.7\xc2\xb5s\nalign 4194304       pre 452\xc2\xb5s   on 458\xc2\xb5s    post 359\xc2\xb5s  diff 52.4\xc2\xb5s\nalign 2097152       pre 437\xc2\xb5s   on 443\xc2\xb5s    post 359\xc2\xb5s  diff 45.1\xc2\xb5s\nalign 1048576       pre 423\xc2\xb5s   on 433\xc2\xb5s    post 340\xc2\xb5s  diff 51.4\xc2\xb5s\nalign 524288        pre 423\xc2\xb5s   on 432\xc2\xb5s    post 341\xc2\xb5s  diff 50.4\xc2\xb5s\nalign 262144        pre 421\xc2\xb5s   on 431\xc2\xb5s    post 308\xc2\xb5s  diff 66.3\xc2\xb5s\nalign 131072        pre 379\xc2\xb5s   on 430\xc2\xb5s    post 321\xc2\xb5s  diff 80\xc2\xb5s\nalign 65536         pre 343\xc2\xb5s   on 358\xc2\xb5s    post 343\xc2\xb5s  diff 14.6\xc2\xb5s\nalign 32768         pre 343\xc2\xb5s   on 358\xc2\xb5s    post 342\xc2\xb5s  diff 15.7\xc2\xb5s\nalign 16384         pre 342\xc2\xb5s   on 356\xc2\xb5s    post 341\xc2\xb5s  diff 14.1\xc2\xb5s\nalign 8192          pre 343\xc2\xb5s   on 356\xc2\xb5s    post 341\xc2\xb5s  diff 14\xc2\xb5s\nalign 4096          pre 340\xc2\xb5s   on 352\xc2\xb5s    post 340\xc2\xb5s  diff 12.3\xc2\xb5s\nalign 2048          pre 340\xc2\xb5s   on 353\xc2\xb5s    post 340\xc2\xb5s  diff 12.4\xc2\xb5s\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所看到的,在 128KiB 处只有一个明显的跳跃。在 4MiB 和 16MiB 处会出现一些不太明显的跳跃。但这些都不是一个清晰的结果,就像您可以在最后的链接页面中找到的示例一样。

\n\n

使用不同块大小进行相同测量的结果:

\n\n
sudo ./flashbench -a -b=$[8*1024] -c 1000 /dev/sdi\n\nalign 17179869184   pre 493\xc2\xb5s   on 484\xc2\xb5s    post 397\xc2\xb5s  diff 38.9\xc2\xb5s\nalign 8589934592    pre 490\xc2\xb5s   on 480\xc2\xb5s    post 396\xc2\xb5s  diff 36.7\xc2\xb5s\nalign 4294967296    pre 493\xc2\xb5s   on 478\xc2\xb5s    post 398\xc2\xb5s  diff 32.6\xc2\xb5s\nalign 2147483648    pre 517\xc2\xb5s   on 505\xc2\xb5s    post 429\xc2\xb5s  diff 31.7\xc2\xb5s\nalign 1073741824    pre 517\xc2\xb5s   on 503\xc2\xb5s    post 425\xc2\xb5s  diff 32.1\xc2\xb5s\nalign 536870912     pre 515\xc2\xb5s   on 502\xc2\xb5s    post 425\xc2\xb5s  diff 31.9\xc2\xb5s\nalign 268435456     pre 515\xc2\xb5s   on 501\xc2\xb5s    post 422\xc2\xb5s  diff 33\xc2\xb5s\nalign 134217728     pre 513\xc2\xb5s   on 500\xc2\xb5s    post 423\xc2\xb5s  diff 32.8\xc2\xb5s\nalign 67108864      pre 514\xc2\xb5s   on 501\xc2\xb5s    post 423\xc2\xb5s  diff 32.8\xc2\xb5s\nalign 33554432      pre 497\xc2\xb5s   on 485\xc2\xb5s    post 403\xc2\xb5s  diff 34.8\xc2\xb5s\nalign 16777216      pre 515\xc2\xb5s   on 503\xc2\xb5s    post 405\xc2\xb5s  diff 42.5\xc2\xb5s\nalign 8388608       pre 513\xc2\xb5s   on 502\xc2\xb5s    post 422\xc2\xb5s  diff 34\xc2\xb5s\nalign 4194304       pre 514\xc2\xb5s   on 501\xc2\xb5s    post 421\xc2\xb5s  diff 33.7\xc2\xb5s\nalign 2097152       pre 505\xc2\xb5s   on 490\xc2\xb5s    post 430\xc2\xb5s  diff 22.2\xc2\xb5s\nalign 1048576       pre 487\xc2\xb5s   on 477\xc2\xb5s    post 405\xc2\xb5s  diff 31\xc2\xb5s\nalign 524288        pre 486\xc2\xb5s   on 475\xc2\xb5s    post 405\xc2\xb5s  diff 29.5\xc2\xb5s\nalign 262144        pre 486\xc2\xb5s   on 475\xc2\xb5s    post 374\xc2\xb5s  diff 45.4\xc2\xb5s\nalign 131072        pre 440\xc2\xb5s   on 470\xc2\xb5s    post 381\xc2\xb5s  diff 59.5\xc2\xb5s\nalign 65536         pre 404\xc2\xb5s   on 406\xc2\xb5s    post 406\xc2\xb5s  diff 1.67\xc2\xb5s\nalign 32768         pre 408\xc2\xb5s   on 409\xc2\xb5s    post 409\xc2\xb5s  diff 735ns\nalign 16384         pre 409\xc2\xb5s   on 411\xc2\xb5s    post 410\xc2\xb5s  diff 2.09\xc2\xb5s\n\n\nsudo ./flashbench -a -b=$[64*1024] -c 1000 /dev/sdi\n\nalign 17179869184   pre 781\xc2\xb5s   on 796\xc2\xb5s    post 742\xc2\xb5s  diff 35.2\xc2\xb5s\nalign 8589934592    pre 786\xc2\xb5s   on 793\xc2\xb5s    post 743\xc2\xb5s  diff 28\xc2\xb5s\nalign 4294967296    pre 787\xc2\xb5s   on 793\xc2\xb5s    post 744\xc2\xb5s  diff 27.3\xc2\xb5s\nalign 2147483648    pre 831\xc2\xb5s   on 829\xc2\xb5s    post 794\xc2\xb5s  diff 16.3\xc2\xb5s\nalign 1073741824    pre 829\xc2\xb5s   on 827\xc2\xb5s    post 791\xc2\xb5s  diff 17.2\xc2\xb5s\nalign 536870912     pre 828\xc2\xb5s   on 825\xc2\xb5s    post 792\xc2\xb5s  diff 15.5\xc2\xb5s\nalign 268435456     pre 827\xc2\xb5s   on 825\xc2\xb5s    post 788\xc2\xb5s  diff 17.7\xc2\xb5s\nalign 134217728     pre 827\xc2\xb5s   on 825\xc2\xb5s    post 789\xc2\xb5s  diff 16.8\xc2\xb5s\nalign 67108864      pre 826\xc2\xb5s   on 826\xc2\xb5s    post 788\xc2\xb5s  diff 19.3\xc2\xb5s\nalign 33554432      pre 798\xc2\xb5s   on 818\xc2\xb5s    post 788\xc2\xb5s  diff 24.9\xc2\xb5s\nalign 16777216      pre 827\xc2\xb5s   on 826\xc2\xb5s    post 798\xc2\xb5s  diff 13.1\xc2\xb5s\nalign 8388608       pre 826\xc2\xb5s   on 824\xc2\xb5s    post 788\xc2\xb5s  diff 17.1\xc2\xb5s\nalign 4194304       pre 828\xc2\xb5s   on 824\xc2\xb5s    post 787\xc2\xb5s  diff 16.4\xc2\xb5s\nalign 2097152       pre 811\xc2\xb5s   on 811\xc2\xb5s    post 787\xc2\xb5s  diff 12\xc2\xb5s\nalign 1048576       pre 799\xc2\xb5s   on 797\xc2\xb5s    post 768\xc2\xb5s  diff 13.9\xc2\xb5s\nalign 524288        pre 801\xc2\xb5s   on 796\xc2\xb5s    post 769\xc2\xb5s  diff 11.2\xc2\xb5s\nalign 262144        pre 798\xc2\xb5s   on 794\xc2\xb5s    post 733\xc2\xb5s  diff 28.4\xc2\xb5s\nalign 131072        pre 764\xc2\xb5s   on 793\xc2\xb5s    post 746\xc2\xb5s  diff 38.5\xc2\xb5s\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了测试擦除块大小,我尝试了 open-au 选项:

\n\n
sudo ./flashbench -O -b=$[8*1024] -e=$[4*1024*1024] -c 100 --open-au-nr=1 /dev/sdi\n\n4MiB    74.2M/s \n2MiB    100M/s  \n1MiB    71.8M/s \n512KiB  91.1M/s \n256KiB  28.7M/s \n128KiB  33.8M/s \n64KiB   27.1M/s \n32KiB   21.9M/s \n16KiB   22.7M/s \n8KiB    12.7M/s \n\nsudo ./flashbench -O -b=$[8*1024] -e=$[8*1024*1024] -c 100 --open-au-nr=1 /dev/sdi\n\n8MiB    77.6M/s \n4MiB    87.9M/s \n2MiB    86.2M/s \n1MiB    68M/s   \n512KiB  78.4M/s \n256KiB  26.5M/s \n128KiB  29.3M/s \n64KiB   22.5M/s \n32KiB   19.9M/s \n16KiB   26.6M/s \n8KiB    14.5M/s \n\n\nsudo ./flashbench -O -b=$[8*1024] -e=$[16*1024*1024] -c 100 --open-au-nr=1 /dev/sdi\n\n16MiB   94.2M/s \n8MiB    123M/s  \n4MiB    112M/s  \n2MiB    95.7M/s \n1MiB    95.9M/s \n512KiB  83.3M/s \n256KiB  30.2M/s \n128KiB  27.7M/s \n64KiB   22.8M/s \n32KiB   15.9M/s \n16KiB   28.5M/s \n8KiB    15.3M/s \n
Run Code Online (Sandbox Code Playgroud)\n\n

比较一个块大小为 1KiB 和一个块大小为 16KiB:

\n\n
sudo ./flashbench -O -b=$[1024] -e=$[16*1024*1024] -c 100 --open-au-nr=1 /dev/sdi\n\n16MiB   111M/s  \n8MiB    114M/s  \n4MiB    124M/s  \n2MiB    101M/s  \n1MiB    97.1M/s \n512KiB  77.7M/s \n256KiB  30.8M/s \n128KiB  27.6M/s \n64KiB   22.3M/s \n32KiB   15.2M/s \n16KiB   33.5M/s \n8KiB    15M/s   \n4KiB    7.47M/s \n2KiB    3.31M/s \n1KiB    1.63M/s \n\n\nsudo ./flashbench -O -b=$[16*1024] -e=$[16*1024*1024] -c 100 --open-au-nr=1 /dev/sdi\n\n16MiB   94.5M/s \n8MiB    98.6M/s \n4MiB    99M/s   \n2MiB    88.8M/s \n1MiB    97.6M/s \n512KiB  78.6M/s \n256KiB  31.6M/s \n128KiB  30.4M/s \n64KiB   22M/s   \n32KiB   14.7M/s \n16KiB   28.4M/s \n
Run Code Online (Sandbox Code Playgroud)\n\n

此外,我还使用不同的擦除值测试了 find-fat 选项:

\n\n
sudo ./flashbench -f -b=$[8*1024] -e=$[4*1024*1024] /dev/sdi\n\n4MiB    90.9M/s  215M/s   169M/s   137M/s   220M/s   150M/s   \n2MiB    86.9M/s  217M/s   169M/s   138M/s   218M/s   119M/s   \n1MiB    87.7M/s  215M/s   214M/s   137M/s   216M/s   125M/s   \n512KiB  85.7M/s  207M/s   162M/s   134M/s   207M/s   146M/s   \n256KiB  85.7M/s  161M/s   201M/s   112M/s   209M/s   121M/s   \n128KiB  48.2M/s  60.5M/s  55.6M/s  55.8M/s  48.5M/s  56.2M/s  \n64KiB   88.1M/s  156M/s   164M/s   112M/s   131M/s   119M/s   \n32KiB   77.7M/s  159M/s   135M/s   117M/s   159M/s   127M/s   \n16KiB   73.3M/s  106M/s   119M/s   97.8M/s  103M/s   98.9M/s  \n8KiB    59.5M/s  67.7M/s  67.8M/s  65M/s    66.3M/s  66.5M/s  \n\n\nsudo ./flashbench -f -b=$[8*1024] -e=$[8*1024*1024] /dev/sdi\n\n8MiB    112M/s   152M/s   143M/s   186M/s   228M/s   170M/s   \n4MiB    131M/s   172M/s   144M/s   147M/s   221M/s   222M/s   \n2MiB    131M/s   172M/s   122M/s   183M/s   228M/s   228M/s   \n1MiB    130M/s   173M/s   144M/s   183M/s   169M/s   227M/s   \n512KiB  118M/s   170M/s   118M/s   180M/s   221M/s   223M/s   \n256KiB  120M/s   152M/s   143M/s   180M/s   193M/s   192M/s   \n128KiB  48.9M/s  57.4M/s  56.2M/s  44.1M/s  61M/s    58.2M/s  \n64KiB   110M/s   135M/s   135M/s   112M/s   165M/s   156M/s   \n32KiB   106M/s   122M/s   149M/s   115M/s   171M/s   156M/s   \n16KiB   93.1M/s  109M/s   113M/s   88.9M/s  116M/s   122M/s   \n8KiB    64.9M/s  66M/s    66.8M/s  64.9M/s  67.9M/s  67.5M/s\n\n\nsudo ./flashbench -f -b=$[8*1024] -e=$[16*1024*1024] /dev/sdi\n\n16MiB   173M/s   131M/s   208M/s   223M/s   205M/s   194M/s   \n8MiB    178M/s   120M/s   221M/s   191M/s   223M/s   169M/s   \n4MiB    175M/s   125M/s   219M/s   191M/s   220M/s   169M/s   \n2MiB    175M/s   124M/s   219M/s   190M/s   219M/s   160M/s   \n1MiB    174M/s   119M/s   215M/s   186M/s   215M/s   163M/s   \n512KiB  168M/s   121M/s   201M/s   198M/s   200M/s   176M/s   \n256KiB  158M/s   121M/s   180M/s   209M/s   181M/s   182M/s   \n128KiB  51.7M/s  51.2M/s  58M/s    58.8M/s  54.5M/s  53.2M/s  \n64KiB   129M/s   111M/s   116M/s   158M/s   148M/s   144M/s   \n32KiB   128M/s   111M/s   146M/s   159M/s   147M/s   145M/s   \n16KiB   98.3M/s  91.1M/s  105M/s   110M/s   106M/s   105M/s   \n8KiB    66.2M/s  64M/s    67.5M/s  67.5M/s  67.5M/s  65.1M/s  \n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

现在我迷路了,你可能也是如此,那么我怎样才能理解这些数据点呢?

\n\n

tl;dr: \n我的猜测是我有 8KiB 页面大小、128KiB 块和 16MiB 段,这也是 EraseBlockSize。有人能够验证这一点或指出我的假设或方法中的错误吗?

\n\n

如有必要,我可以使用不同的参数进行新的测量,但我没有有用的想法。

\n\n
\n\n

对于那些对这一切感兴趣的人来说,有一些链接:

\n\n\n\n

还有一些德语:

\n\n\n

小智 1

我绝不是专家,但无论如何我都会尝试一下。

第一组测试旨在确定设备的页面大小。结论是,在 64KB 边界之前、之后和跨过 64KB 边界执行两次 1KB读取具有相似的成本。这可能意味着页面大小为 128 KB,因为如果闪存控制器无法执行小于页面大小的读取,则跨任何小于 128 KB 的边界读取都会产生类似的成本。

在最初的 lwn 文章中,给定对齐边界处的尖峰被推断为块边界或页边界,因为假设跨块边界的页读取必须产生额外的成本。除了一些特定的 FTL 实现之外,我还没有看到任何解释为什么会出现这种情况。事实上,自述文件提到了这个警告:

“有些卡仅使用具有特定块大小的访问来显示清晰的模式,而其他卡则不显示任何模式,这意味着需要以不同的方式确定数字。”

我想说的是,确定块大小的技巧并不适用于您的设备。

open au 测试旨在找出设备可以处理的并行顺序流的数量,而不会造成流相互干扰。在您的情况下,您仅使用 open au = 1 进行了测试,因此测试不会告诉您有关闪存参数的任何信息,而是测量执行小型 IO 与执行大型 IO 对吞吐量的影响。小 IO 会导致每一层的开销,从而导致更大的延迟和更少的吞吐量。