microSD карта, малая скорость записи и чтения

Здравствуйте.
Подозрительно низкая скорость чтения и записи на SD карту.
железо: Wirenboard 6 (HW 6.5) + WBE3-MICROSD

Порядок действий:

  • Купили SD карту (WD Purple 64GB: microSDXC UHS-I).

  • Вставил карту, настроил WBE3-MICROSD, появилось /dev/mmcblk1

  • Отформатировал раздел (mkfs.ext4 -F /dev/mmcblk1p1)

  • Примонтировал (mount /dev/mmcblk1p1 /mnt/sdcard)

  • Далее произвожу тест записи:
    dd if=/dev/zero of=/mnt/sdcard/test2 bs=20M count=1 oflag=direct

    20971520 bytes (21 MB, 20 MiB) copied, 30.7943 s, 681 kB/s

  • Сбрасываю кэш:
    /sbin/sysctl -w vm.drop_caches=3

  • Тест чтения:
    dd if=/mnt/sdcard/test2 of=/dev/null bs=20M count=1

    20971520 bytes (21 MB, 20 MiB) copied, 28.8253 s, 728 kB/s

Пробовал различные варианты block size и count - значения колеблются вокруг 600-800 Кб/сек, что очень далеко от 4.5-18 МБ/сек, описанных в документации.

Ну и в целом заметно, что операции с картой ооочень долгие.

Подскажите, что я делаю не так?

П.С.
еще одна странность,
Изначально на карте был exFAT, или во что там производители карты форматируют, но после создании файловой системы, вывод утилиты fdisk вот такой:

/dev/mmcblk1p1 32768 124735487 124702720 59.5G 7 HPFS/NTFS/exFAT

а вывод утилиты mkfs вот такой:
/dev/mmcblk1p1 contains a ext4 file system

Почему-то fdisk считает, что на карте все еще HPFS/NTFS/exFAT … О_О

П.П.С.
Проверил скорость этой карты через USB-кардридер в Винде: запись около 15 МБ/сек. Что маловато, но сойдет.
Потом этот же кардридер подключил к Wirenboard и еще раз проделал все вышеописанное, только с устройством /dev/sda1 и получил те же 13-15 МБ/с на чтение и запись.

То есть это модуль WBE3-MICROSD такой медленный? Или с ним что-то не так?

Xexe, добрый день!
Это ошибка в нашей документации, приносим извинения, скорость действительно должна быть примерно такой, как у вас получается. Исправим.

Ясно.
Правильно ли я понимаю, что узкое место - шина между ядром и этим модулем расширения?
Судя по всему, чтение-запись на SD еще и расходует процессор.
Во время непрерывной записи или чтения в топ вылезает процесс mmcqd/0, отъедающий около 30% CPU.

А если использовать USB-флешку или USB-кардридер с той же самой SD-картой, то получаем уже нормальные скорости на уровне 15 МБ/с и небольшую загрузку CPU (8-10%) процессом dd.

Таким образом, можно сделать вывод, что использовать модуль SD в качестве хранилища чего-либо объемного (базы данных, например) нецелесообразно… Лучше использовать USB?.

Да, узкое место – однобитовый интерфейс передачи данных между процессором и картой.
Модуль можно использовать для объемных, но медленнорастущих логов, например. USB-флешка, конечно, обеспечит большую скорость.