Обычный пользователь, когда возникает необходимость приобрести карту памяти формата microSD, особо не задумывается. Пользователь идет в магазин электроники и говорит «дайте мне карту памяти microSD». Какую? Да все равно, карту памяти и все тут.
Но на самом деле характеристики карт памяти одного и того же формата могут быть весьма различны — думаю, на Geektimes это объяснять не нужно. Но это если карты разных классов. А что, если взять равные по классу карты? Давайте посмотрим на результаты бенчмарка различных карт памяти (список небольшой, всего 5 штук). Понятно, что сравнивать карты различных классов было бы некорректно, поэтому взят Class 10.
Сам тест проводился пользователем сайта о «малинках» вот здесь.
Как и какие тесты проводились?
Для того, чтобы обеспечить каждой карте равные условия, был взят десктопный ПК под управлением Windows 7, ноутбук с Ubuntu и Raspberry Pi 2. На десктопе использовалась утилита CrystalDiskMark. На ноутбуке — штатный инструмент «Disks». На Pi 2 — командная строка и тест, описанный здесь.
Последовательность:
- 1. Форматирование под Windows с использованием SDFormatter;
- 2. Проверка при помощи H2testw;
- 3. Бенчмарк CrystalDiskMark на декстопе;
- 4. Бенчмарк на Ubuntu;
- 5. Запись Raspbian c использованием Win32DiskImager;
- 6. Загрузка Pi и работа с командной строкой.
Проверка оригинальности модели тоже выполнялась, поскольку на рынке сейчас очень много карт памяти от ноунейм производителей с удручающими характеристиками, но с нанесенной маркировкой известных компаний.
Для того, чтобы убедиться в том, что карта именного того производителя, который заявлен, использовалась утилита H2testw 1.4.
Вот, что получилось:
Результаты работы с CrystalDiskMark:
Official Raspberry Pi NOOBs 8GB, Class 10
Kingston 16 GB Class 10
Samsung EVO 16GB, Class 10
SanDisk Ultra 16 GB, Class 10
Toshiba 16GB, Class 10
Результаты сведены в единую табличку:
Ubuntu Disk
Raspbian
Финальный тест проводился с командной строкой ОС Rasbian и рядом команд.
Для чтения CID карты использовалась такая команда:
cd /sys/class/mmc_host/mmc?/mmc?:*
echo «man:$(cat manfid) oem:$(cat oemid) name:$(cat name) hwrev:$(cat hwrev) fwrev:$(cat fwrev)»
Проверка записи:
sync; dd if=/dev/zero of=~/test.tmp bs=500K count=1024
Проверка чтения:
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
sync; time dd if=~/test.tmp of=/dev/null bs=500K count=1024
Удаление временного файла, созданного при выполнении предыдущих команд:
rm ~/test.tmp
Заключение
Исходя из результатов всех трех тестов, мы наблюдаем следующую картину (места от 1 по 5):
1. SanDisk Ultra 16GB
2. Toshiba 16GB
3. Official NOOBs (SanDisk 8GB)
4. Samsung EVO 16GB и Kingston 16GB
Производительность карты памяти практически не зависит от цены карты. Зачем платить больше?
С Kingston случились проблемы при тестировании под Убунту, поэтому результаты в этом тесте получить не удалось;
Карта SanDisk Ultra заняла первое место только потому, что разница скорости чтения с Toshiba в Убунту была значительной.
Комментарии (12)
rPman
12.12.2015 15:20а еще более важно вопрос надежности, только тестировать сложно, ведь помимо количества перезаписей может глючить банально электроника.
evgeny_boger
12.12.2015 20:14+2К сожалению, это не тест, а ерунда. Для линукса и ext3/4 важные параметры это скорость произвольного чтения/записи и количество allocation unit-ов (грубо говоря, количество одновременных потоков линейной записи). У большинства консьюмерских карточек с этим очень грустно, потому что они сделаны для всяких фотоаппаратов.
Мы когда подбирали для наших контроллеров карточки в комплект, протестировали штук 20 карточек, и с тех пор тестировали каждую партию: всего 30 разных карточек. Прикладных результата два:
1) в двух оригинальных карточках с одним названием могут оказаться два очень разных контроллера, поэтому тестировать нужно каждую партию
2) внезапно Transcend и SamsungrPman
12.12.2015 22:06было бы очень интересно посмотреть на результаты ваших тестов.
p.s. можно ли узнать информацию о производителе чипов карточки программным способом?evgeny_boger
12.12.2015 22:13Всё никак не соберусь написать. Результаты особого практического интереса не представляют, потому что даже конкретное название и вид упаковки не гарантируют, что внутри будут нужные карточки. Во-первых есть подделки, во-вторых сами производители постоянно меняют контроллеры. У нас последнее время был алгоритм такой: купить 5 одинаковых карточек в проверенном магазине, протестировать все, если всё ок — покупать партию. Последния партия была с маркировокой «TS8GUSDHC10 (premium, 93-3622, v1.6)».
Про производителя: скорее нет, чем да. В посте есть команда, которая выводит служебную информацию о карточке. Там, в частности, есть дата производства, название карты и код производителя. Но никакой корреляции с характеристиками карточки я не заметил, эти значения просто забиваются при прошивке контроллеров карточек.
Raegdan
13.12.2015 12:08Узнать можно, только информативность этих данных стремится к нулю. Флешка ответит то, что вбито в её контроллер. Если хитрый китаец в подвальном цеху на задворках Шанхая забьёт туда «Samsung» — флешка скажет вам, что она Samsung, и попробуйте доказать обратное.
Indemsys
13.12.2015 11:13+1Не могли бы расшифровать вот это —
это скорость произвольного чтения/записи и количество allocation unit-ов (грубо говоря, количество одновременных потоков линейной записи).
AU это всего лишь размер кластера, насколько понимаю. И почему надо говорить грубо? Напишите точно, как это на SD карту что либо можно писать одновременно?evgeny_boger
13.12.2015 14:52+2Прошу прощения за резкость, просто в тесте действительно измеряют не те параметры, которые важны.
AU — это не размер кластера, это примерно соответствует erase block.
Я говорил не о количестве AU как таковом, а о максимальном количестве одновременно открытых AU. Карточки делают wear leveling внутри вот этого AU, и получается, что операции чтения/записи работают быстрее внутри того блока, который сейчас открыт контроллером. Одновременность тут в том смысле, что вы можете попеременно писать условно в пределах пяти блоков (fat, журнал, ещё что-нибудь) и контроллер будет держать все 5 блоков «открытыми» если вы попытаетесь начать писать ещё и в шестое место, а у контроллера max open AU = 5, то скорость резко просядет. Соответственно, если вы нарвались на карточку, у которой max open AU < 5, то журналируемая ФС будет тормозить. Судя по нашим тестам, у нормальных карточек это число точно больше семи, и возможно в них вообще этого эффекта нет.
Вообще тема это очень сложная, и я в ней разбираюсь очень поверхностно. Подробная информация есть тут:
wiki.linaro.org/WorkingGroups/KernelArchived/Projects/FlashCardSurvey
и в докладе Arnd Bergmann(слайды).
Есть отличная утилита flashbench, которая всё это меряет.
Наши тесты — это враппер вокруг flashbench, dd и прочего, скрипты и результаты тут.
Maslukhin
15.12.2015 12:10Шутки-шутками, но у меня Sandisk стабильно по тестам на первое место выходят. Даже если кому-то уступают по скорости, то вырываются по соотношению цена/скорость
swelld
16.12.2015 00:21У меня уже 3 карты умерло на малинке. Подозреваю, что причина либо в непредвиденном отключении питания, либо в исчерпании циклов чтения-записи.
А usb-hdd напрямую к малине не подключить — не хватает питания. В итоге приходится какой-то колхоз городить =(
aik
Бывают проблемы с совместимостью. У меня, к примеру, raspberry pi B не грузилась с полностью рабочей microsd transcend 16gb, но загрузилась с какой-то старинной qumo 16gb.
Да и в «hcl» достаточно много про проблемные карты написано.