Доброго дня!
Мне необходимо из программы проверить скорость чтения/записи на 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
Спасибо.
[РЕШЕНО] Тестирование скорости чтения/записи на SD-карту
Модератор: Модераторы разделов
Re: [РЕШЕНО] Тестирование скорости чтения/записи на 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
Не?
Re: [РЕШЕНО] Тестирование скорости чтения/записи на SD-карту
Не пойдёт, всё это должно работать на встраиваемых устройствах с минимум зависимостей.
Но я посмотрю код hdparm, может быть он решит мои проблемы.
Но я посмотрю код hdparm, может быть он решит мои проблемы.
Re: [РЕШЕНО] Тестирование скорости чтения/записи на SD-карту
А чего бы вам не поместить 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)
Во всех случаях (и с hdparm в частности) самопальный код, который вы надёргаете из многократно выверенных проектов, всегда будет хуже чем оригинальная утилита.
Re: [РЕШЕНО] Тестирование скорости чтения/записи на SD-карту
Решил следующим образом, каркас кода не вдаваясь в детали:
Полученные значения - 16MB/s запись и 20MB/s чтение.
Код: Выделить всё
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 чтение.