2

Я экспериментировал с инструментом flashbench от linaro и застрял в догадках, где может быть мой размер блока уха. Было бы очень приятно получить некоторую информацию о том, как интерпретировать мои результаты.

Моя флешка USB - это SanDisk Extreme 64 ГБ SDCZ48-064G, которую я тестировал на USB3 и USB2 с Lubuntu 14 на карте FAT32 SDCard Class10.

Вот что я измерил с USB3:

sudo ./flashbench -a -b=1024 -c 1000 /dev/sdi

align 17179869184   pre 429µs   on 438µs    post 334µs  diff 56.1µs
align 8589934592    pre 429µs   on 436µs    post 334µs  diff 54.5µs
align 4294967296    pre 431µs   on 438µs    post 337µs  diff 54µs
align 2147483648    pre 455µs   on 461µs    post 365µs  diff 51.1µs
align 1073741824    pre 455µs   on 461µs    post 365µs  diff 51.8µs
align 536870912     pre 451µs   on 456µs    post 358µs  diff 51.7µs
align 268435456     pre 452µs   on 458µs    post 359µs  diff 52.1µs
align 134217728     pre 452µs   on 459µs    post 360µs  diff 52.5µs
align 67108864      pre 451µs   on 460µs    post 360µs  diff 54.3µs
align 33554432      pre 434µs   on 440µs    post 339µs  diff 53.7µs
align 16777216      pre 452µs   on 460µs    post 342µs  diff 63µs
align 8388608       pre 451µs   on 458µs    post 359µs  diff 52.7µs
align 4194304       pre 452µs   on 458µs    post 359µs  diff 52.4µs
align 2097152       pre 437µs   on 443µs    post 359µs  diff 45.1µs
align 1048576       pre 423µs   on 433µs    post 340µs  diff 51.4µs
align 524288        pre 423µs   on 432µs    post 341µs  diff 50.4µs
align 262144        pre 421µs   on 431µs    post 308µs  diff 66.3µs
align 131072        pre 379µs   on 430µs    post 321µs  diff 80µs
align 65536         pre 343µs   on 358µs    post 343µs  diff 14.6µs
align 32768         pre 343µs   on 358µs    post 342µs  diff 15.7µs
align 16384         pre 342µs   on 356µs    post 341µs  diff 14.1µs
align 8192          pre 343µs   on 356µs    post 341µs  diff 14µs
align 4096          pre 340µs   on 352µs    post 340µs  diff 12.3µs
align 2048          pre 340µs   on 353µs    post 340µs  diff 12.4µs

Как вы можете видеть, есть только один четкий скачок на 128 КБ. И некоторые не очень четкие скачки происходят на 4MiB и 16MiB. Но ничто из этого не является хорошим ясным результатом, как в примерах, которые вы можете найти на связанных страницах в конце.

Результаты одного и того же измерения с разными размерами блоков:

sudo ./flashbench -a -b=$[8*1024] -c 1000 /dev/sdi

align 17179869184   pre 493µs   on 484µs    post 397µs  diff 38.9µs
align 8589934592    pre 490µs   on 480µs    post 396µs  diff 36.7µs
align 4294967296    pre 493µs   on 478µs    post 398µs  diff 32.6µs
align 2147483648    pre 517µs   on 505µs    post 429µs  diff 31.7µs
align 1073741824    pre 517µs   on 503µs    post 425µs  diff 32.1µs
align 536870912     pre 515µs   on 502µs    post 425µs  diff 31.9µs
align 268435456     pre 515µs   on 501µs    post 422µs  diff 33µs
align 134217728     pre 513µs   on 500µs    post 423µs  diff 32.8µs
align 67108864      pre 514µs   on 501µs    post 423µs  diff 32.8µs
align 33554432      pre 497µs   on 485µs    post 403µs  diff 34.8µs
align 16777216      pre 515µs   on 503µs    post 405µs  diff 42.5µs
align 8388608       pre 513µs   on 502µs    post 422µs  diff 34µs
align 4194304       pre 514µs   on 501µs    post 421µs  diff 33.7µs
align 2097152       pre 505µs   on 490µs    post 430µs  diff 22.2µs
align 1048576       pre 487µs   on 477µs    post 405µs  diff 31µs
align 524288        pre 486µs   on 475µs    post 405µs  diff 29.5µs
align 262144        pre 486µs   on 475µs    post 374µs  diff 45.4µs
align 131072        pre 440µs   on 470µs    post 381µs  diff 59.5µs
align 65536         pre 404µs   on 406µs    post 406µs  diff 1.67µs
align 32768         pre 408µs   on 409µs    post 409µs  diff 735ns
align 16384         pre 409µs   on 411µs    post 410µs  diff 2.09µs


sudo ./flashbench -a -b=$[64*1024] -c 1000 /dev/sdi

align 17179869184   pre 781µs   on 796µs    post 742µs  diff 35.2µs
align 8589934592    pre 786µs   on 793µs    post 743µs  diff 28µs
align 4294967296    pre 787µs   on 793µs    post 744µs  diff 27.3µs
align 2147483648    pre 831µs   on 829µs    post 794µs  diff 16.3µs
align 1073741824    pre 829µs   on 827µs    post 791µs  diff 17.2µs
align 536870912     pre 828µs   on 825µs    post 792µs  diff 15.5µs
align 268435456     pre 827µs   on 825µs    post 788µs  diff 17.7µs
align 134217728     pre 827µs   on 825µs    post 789µs  diff 16.8µs
align 67108864      pre 826µs   on 826µs    post 788µs  diff 19.3µs
align 33554432      pre 798µs   on 818µs    post 788µs  diff 24.9µs
align 16777216      pre 827µs   on 826µs    post 798µs  diff 13.1µs
align 8388608       pre 826µs   on 824µs    post 788µs  diff 17.1µs
align 4194304       pre 828µs   on 824µs    post 787µs  diff 16.4µs
align 2097152       pre 811µs   on 811µs    post 787µs  diff 12µs
align 1048576       pre 799µs   on 797µs    post 768µs  diff 13.9µs
align 524288        pre 801µs   on 796µs    post 769µs  diff 11.2µs
align 262144        pre 798µs   on 794µs    post 733µs  diff 28.4µs
align 131072        pre 764µs   on 793µs    post 746µs  diff 38.5µs

Чтобы проверить размер блока стирания, я экспериментировал с опцией open-au:

sudo ./flashbench -O -b=$[8*1024] -e=$[4*1024*1024] -c 100 --open-au-nr=1 /dev/sdi

4MiB    74.2M/s 
2MiB    100M/s  
1MiB    71.8M/s 
512KiB  91.1M/s 
256KiB  28.7M/s 
128KiB  33.8M/s 
64KiB   27.1M/s 
32KiB   21.9M/s 
16KiB   22.7M/s 
8KiB    12.7M/s 

sudo ./flashbench -O -b=$[8*1024] -e=$[8*1024*1024] -c 100 --open-au-nr=1 /dev/sdi

8MiB    77.6M/s 
4MiB    87.9M/s 
2MiB    86.2M/s 
1MiB    68M/s   
512KiB  78.4M/s 
256KiB  26.5M/s 
128KiB  29.3M/s 
64KiB   22.5M/s 
32KiB   19.9M/s 
16KiB   26.6M/s 
8KiB    14.5M/s 


sudo ./flashbench -O -b=$[8*1024] -e=$[16*1024*1024] -c 100 --open-au-nr=1 /dev/sdi

16MiB   94.2M/s 
8MiB    123M/s  
4MiB    112M/s  
2MiB    95.7M/s 
1MiB    95.9M/s 
512KiB  83.3M/s 
256KiB  30.2M/s 
128KiB  27.7M/s 
64KiB   22.8M/s 
32KiB   15.9M/s 
16KiB   28.5M/s 
8KiB    15.3M/s 

А для сравнения один с размером блока 1 КБ, а другой с 16 КБ:

sudo ./flashbench -O -b=$[1024] -e=$[16*1024*1024] -c 100 --open-au-nr=1 /dev/sdi

16MiB   111M/s  
8MiB    114M/s  
4MiB    124M/s  
2MiB    101M/s  
1MiB    97.1M/s 
512KiB  77.7M/s 
256KiB  30.8M/s 
128KiB  27.6M/s 
64KiB   22.3M/s 
32KiB   15.2M/s 
16KiB   33.5M/s 
8KiB    15M/s   
4KiB    7.47M/s 
2KiB    3.31M/s 
1KiB    1.63M/s 


sudo ./flashbench -O -b=$[16*1024] -e=$[16*1024*1024] -c 100 --open-au-nr=1 /dev/sdi

16MiB   94.5M/s 
8MiB    98.6M/s 
4MiB    99M/s   
2MiB    88.8M/s 
1MiB    97.6M/s 
512KiB  78.6M/s 
256KiB  31.6M/s 
128KiB  30.4M/s 
64KiB   22M/s   
32KiB   14.7M/s 
16KiB   28.4M/s 

Далее я протестировал опцию find-fat с различными значениями стирания:

sudo ./flashbench -f -b=$[8*1024] -e=$[4*1024*1024] /dev/sdi

4MiB    90.9M/s  215M/s   169M/s   137M/s   220M/s   150M/s   
2MiB    86.9M/s  217M/s   169M/s   138M/s   218M/s   119M/s   
1MiB    87.7M/s  215M/s   214M/s   137M/s   216M/s   125M/s   
512KiB  85.7M/s  207M/s   162M/s   134M/s   207M/s   146M/s   
256KiB  85.7M/s  161M/s   201M/s   112M/s   209M/s   121M/s   
128KiB  48.2M/s  60.5M/s  55.6M/s  55.8M/s  48.5M/s  56.2M/s  
64KiB   88.1M/s  156M/s   164M/s   112M/s   131M/s   119M/s   
32KiB   77.7M/s  159M/s   135M/s   117M/s   159M/s   127M/s   
16KiB   73.3M/s  106M/s   119M/s   97.8M/s  103M/s   98.9M/s  
8KiB    59.5M/s  67.7M/s  67.8M/s  65M/s    66.3M/s  66.5M/s  


sudo ./flashbench -f -b=$[8*1024] -e=$[8*1024*1024] /dev/sdi

8MiB    112M/s   152M/s   143M/s   186M/s   228M/s   170M/s   
4MiB    131M/s   172M/s   144M/s   147M/s   221M/s   222M/s   
2MiB    131M/s   172M/s   122M/s   183M/s   228M/s   228M/s   
1MiB    130M/s   173M/s   144M/s   183M/s   169M/s   227M/s   
512KiB  118M/s   170M/s   118M/s   180M/s   221M/s   223M/s   
256KiB  120M/s   152M/s   143M/s   180M/s   193M/s   192M/s   
128KiB  48.9M/s  57.4M/s  56.2M/s  44.1M/s  61M/s    58.2M/s  
64KiB   110M/s   135M/s   135M/s   112M/s   165M/s   156M/s   
32KiB   106M/s   122M/s   149M/s   115M/s   171M/s   156M/s   
16KiB   93.1M/s  109M/s   113M/s   88.9M/s  116M/s   122M/s   
8KiB    64.9M/s  66M/s    66.8M/s  64.9M/s  67.9M/s  67.5M/s


sudo ./flashbench -f -b=$[8*1024] -e=$[16*1024*1024] /dev/sdi

16MiB   173M/s   131M/s   208M/s   223M/s   205M/s   194M/s   
8MiB    178M/s   120M/s   221M/s   191M/s   223M/s   169M/s   
4MiB    175M/s   125M/s   219M/s   191M/s   220M/s   169M/s   
2MiB    175M/s   124M/s   219M/s   190M/s   219M/s   160M/s   
1MiB    174M/s   119M/s   215M/s   186M/s   215M/s   163M/s   
512KiB  168M/s   121M/s   201M/s   198M/s   200M/s   176M/s   
256KiB  158M/s   121M/s   180M/s   209M/s   181M/s   182M/s   
128KiB  51.7M/s  51.2M/s  58M/s    58.8M/s  54.5M/s  53.2M/s  
64KiB   129M/s   111M/s   116M/s   158M/s   148M/s   144M/s   
32KiB   128M/s   111M/s   146M/s   159M/s   147M/s   145M/s   
16KiB   98.3M/s  91.1M/s  105M/s   110M/s   106M/s   105M/s   
8KiB    66.2M/s  64M/s    67.5M/s  67.5M/s  67.5M/s  65.1M/s  

И теперь я заблудился, и вы тоже можете, так как я могу понять эти точки данных?

tl; dr: Я предполагаю, что у меня есть страничный размер 8 КБ, блоки 128 КБ и 16 МБ сегментов, что также является EraseBlockSize. Кто-нибудь может проверить это или указать на ошибку в моем предположении или методе?

При необходимости я могу сделать новые измерения с другими параметрами, но у меня нет идей, которые были бы полезны.


Некоторые ссылки для тех, кто интересуется, что это все о:

И некоторые на немецком языке:

1 ответ1

1

Я ни в коем случае не эксперт, но в любом случае я сделаю удар.

Первый набор тестов предназначен для определения размера страницы устройства. Вывод состоит в том, что выполнение двух операций чтения по 1 КБ до, после и за границей 64 КБ имеет одинаковую стоимость. Это может означать, что размер страницы составляет 128 КБ, потому что если контроллер флэш-памяти не может выполнять чтение меньше размера страницы, тогда чтение через любую границу менее 128 КБ имеет аналогичную стоимость.

В оригинальной lwn статье скачок на данной границе выравнивания выводится как граница блока или страницы, так как предполагается, что чтение страницы через границу блока должно повлечь за собой дополнительные расходы. Я не видел никакого объяснения, почему это должно иметь место, за исключением некоторой конкретной реализации FTL. На самом деле README упоминает следующее предупреждение:

«Некоторые карты показывают четкий шаблон, используя доступ с определенными размерами блоков, другие карты не показывают никакого шаблона, что означает, что числа должны быть определены по-другому».

Я бы сказал, что взлом для определения размера блока не относится к вашему устройству.

Тесты open au предназначены для определения количества параллельных последовательных потоков, которые устройство может обрабатывать, не мешая другим потокам. В вашем случае вы тестировали только с открытым au = 1, поэтому тесты ничего не говорят о параметрах флеш-памяти, а скорее измеряют влияние на пропускную способность выполнения небольших операций ввода-вывода по сравнению с выполнением больших операций ввода-вывода. Небольшие операции ввода-вывода приводят к накладным расходам на каждом уровне, следовательно, большая задержка и меньшая пропускная способность.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .