[РЕШЕНО] Тестирование скорости чтения/записи на SD-карту

Модератор: Модераторы разделов

Ответить
IMB
Сообщения: 2559
ОС: Debian

[РЕШЕНО] Тестирование скорости чтения/записи на SD-карту

Сообщение IMB »

Доброго дня!
Мне необходимо из программы проверить скорость чтения/записи на SD-карту, мои действия:
- открываю устройство с флагом O_RDWR
- получил размер раздела используя ioctl BLKGETSIZE64
- сохранил отметку времени
- записал буфер извесного размера используя pwrite
- сохранил отметку времени
- вычислил разницу между отметка
- повторил процедуру для чтения используя pread
- сравнил. что записанный буфер идентичен считанному
Проблема в том, что я получаю какие-то нереальные значения скорости - до 900 MB/s для чтения и до 400 MB/s для записи (20 MB/s для записи при добавлении флагом O_SYNC).
Тест проводится на карте SanDiskUltra 64GB microSD XC I, карта быстрая, но скорости выглядят нереальными.
Для NAND аналогичные действия дают разумный результат, но там я дополнительно выполняю ioctl для очистки текущей области и пишу блоками равными erasesize.
Для MMC я не нашёл ioctl для очистки, хотя в списках рассылки это проходит, и я не знаю как получить preferd_erase_size, аналог erasesize для NAND, не обращаясь к /sys.
Вопрос:
- какой ioctl надо использовать для получения preferd_erase_size
- какой ioctl надо использовать для очистки области MMC
- надо ли предварительно выполнять очистку области, аналогично MEMERASE для NAND
Спасибо.
Спасибо сказали:
Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX
Контактная информация:

Re: [РЕШЕНО] Тестирование скорости чтения/записи на SD-карту

Сообщение Olej »

IMB писал(а):
01.07.2016 13:05
Мне необходимо из программы проверить скорость чтения/записи на SD-карту,

Код: Выделить всё

[olej@dell SNMP]$ sudo hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   12314 MB in  2.00 seconds = 6162.14 MB/sec
 Timing buffered disk reads: 192 MB in  3.00 seconds =  63.92 MB/sec

Не? :drinks:
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: [РЕШЕНО] Тестирование скорости чтения/записи на SD-карту

Сообщение IMB »

Не пойдёт, всё это должно работать на встраиваемых устройствах с минимум зависимостей.
Но я посмотрю код hdparm, может быть он решит мои проблемы.
Спасибо сказали:
Аватара пользователя
Olej
Сообщения: 659
ОС: Fedora, Mint, Debian, QNX
Контактная информация:

Re: [РЕШЕНО] Тестирование скорости чтения/записи на SD-карту

Сообщение Olej »

IMB писал(а):
01.07.2016 13:50
Не пойдёт, всё это должно работать на встраиваемых устройствах с минимум зависимостей.

А чего бы вам не поместить hdparm в ваше встраиваемое устройство?
Нет там никаких особых зависимостей:

Код: Выделить всё

olej@nvidia ~ $ ldd /sbin/hdparm
    linux-gate.so.1 =>  (0xb776b000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb759a000)
    /lib/ld-linux.so.2 (0xb776c000)

IMB писал(а):
01.07.2016 13:50
Но я посмотрю код hdparm, может быть он решит мои проблемы.

Во всех случаях (и с hdparm в частности) самопальный код, который вы надёргаете из многократно выверенных проектов, всегда будет хуже чем оригинальная утилита.

Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: [РЕШЕНО] Тестирование скорости чтения/записи на SD-карту

Сообщение IMB »

Решил следующим образом, каркас кода не вдаваясь в детали:

Код: Выделить всё

fd = open(cfg->device, O_RDWR);
ioctl(fd, BLKGETSIZE64, &device_len);
close(fd);

fd = open(cfg->device, O_WRONLY | O_SYNC);
len = pwrite(fd, buf, data_len, offset);
close(fd);

fd = open(cfg->device, O_RDONLY);
len = pread(fd, rbuf, data_len, offset);
close(fd);

Полученные значения - 16MB/s запись и 20MB/s чтение.
Спасибо сказали:
Ответить