Захотелось сравнить скорость чтения файла для трех случаев: ramdisk, sdhc карта памяти и nandflash + wearleveling.
На каждом из дисков есть один и тот же файл большого размера.
Читаю в буфер памяти одним куском 1946KB из файла. Примерно так (не показана обработка ошибок и манипулирование с буфером памяти):
Код
const int size = 1946*1024; // ~1.9MB
uint8_t buf[size];
int rd = 0;
TIME_STRUCT tm1, tm2, diff;
MQX_FILE_PTR fd = _io_fopen("bla-bla", "r");
_time_get(&tm1);
rd = _io_read(fd, buf, size);
_time_get(&tm2);
_io_fclose(fd);
_time_diff(&tm1, &tm2, &diff);
TRACE("bytes to read: %d\nbtytes read: %d\ntime: %d.%d\n", size, rd, diff.SECONDS, diff.MILLISECONDS);
uint8_t buf[size];
int rd = 0;
TIME_STRUCT tm1, tm2, diff;
MQX_FILE_PTR fd = _io_fopen("bla-bla", "r");
_time_get(&tm1);
rd = _io_read(fd, buf, size);
_time_get(&tm2);
_io_fclose(fd);
_time_diff(&tm1, &tm2, &diff);
TRACE("bytes to read: %d\nbtytes read: %d\ntime: %d.%d\n", size, rd, diff.SECONDS, diff.MILLISECONDS);
Вот время, затрачиваемое на чтение файла.
ramdisk: 420 мс
Kingston 4GB sdhc, class 10: 311 мс
nandflash MT29F2G08ABAEAH4: 2178 мс !
Я еще могу объяснить разницу времени между ramdisk и картой памяти особенностями форматирования. Но почему так медленно читает nandflash? Дело в медленном wearleveling слое в драйвере? Или что-то еще?