Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MQX + wear leveling nandflash
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
shreck
MQX, Kinetis K70;

Захотелось сравнить скорость чтения файла для трех случаев: 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);

Вот время, затрачиваемое на чтение файла.
ramdisk: 420 мс
Kingston 4GB sdhc, class 10: 311 мс
nandflash MT29F2G08ABAEAH4: 2178 мс !

Я еще могу объяснить разницу времени между ramdisk и картой памяти особенностями форматирования. Но почему так медленно читает nandflash? Дело в медленном wearleveling слое в драйвере? Или что-то еще?
_3m
Цитата(shreck @ Sep 5 2014, 08:35) *
почему так медленно читает nandflash? Дело в медленном wearleveling слое в драйвере? Или что-то еще?

Коррекция ошибок нанд выполняется аппаратно или программно процессором ?

shreck
Цитата(_3m @ Sep 5 2014, 14:56) *
Коррекция ошибок нанд выполняется аппаратно или программно процессором ?

Насколько я могу судить, это делается программно процессором. В указанной микросхеме памяти вроде бы нет аппаратного блока для вычисления ECC.

UPD. А вот в микроконтроллере, nandflash контроллер имеет соответствующие аппаратные блоки. Но мне кажется, что драйвер это не использует, т.к. в коде драйвера упоминаются коды Рида-Соломона, а контроллер nandflash кодирует в BCH (коды Боуза—Чоудхури—Хоквингема что-ли это называется).
AlexandrY
Цитата(shreck @ Sep 5 2014, 11:30) *
Насколько я могу судить, это делается программно процессором. В указанной микросхеме памяти вроде бы нет аппаратного блока для вычисления ECC.


Есть там аппаратный ECC.
Семейство Kinetis умеет делать 4/6/8/12/16/24/32 битный ECC.
Конкретно в драйвере wear leveling включена 4-х битная ECC , т.е. в spare области ECC занимает 8 байт.

Скорость у вас где-то в полтора раза хуже чем можно сделать.
Чтение у меня идет со скоростью 1.45 Мб/сек на 150 МГц тактовой процессора и памятью на DDRAM.
Запись где-то 1 Мб/сек

Это, конечно, низковатая скорость.
И драйвер, по видимому, не при чем.
Ускорение тактирования NAND в два раза ( до 37 МГц) приводит к увеличению скорости чтения всего на 7%
Это похоже последствия применения C++ и неудачного алгоритма.

Yaffs 2 на той же NAND и с меньшей частотой тактирования показывало скорость чтения более 10 Мб/сек
shreck
Цитата(AlexandrY @ Sep 11 2014, 19:39) *
Есть там аппаратный ECC.
Семейство Kinetis умеет делать 4/6/8/12/16/24/32 битный ECC.
Конкретно в драйвере wear leveling включена 4-х битная ECC , т.е. в spare области ECC занимает 8 байт.

Скорость у вас где-то в полтора раза хуже чем можно сделать.
Чтение у меня идет со скоростью 1.45 Мб/сек на 150 МГц тактовой процессора и памятью на DDRAM.
Запись где-то 1 Мб/сек

Это, конечно, низковатая скорость.
И драйвер, по видимому, не при чем.
Ускорение тактирования NAND в два раза ( до 37 МГц) приводит к увеличению скорости чтения всего на 7%
Это похоже последствия применения C++ и неудачного алгоритма.

Yaffs 2 на той же NAND и с меньшей частотой тактирования показывало скорость чтения более 10 Мб/сек

Спасибо. Подтвердили мои догадки, основанные на косвенных данных.
А Yaffs у вас под MQX работает? Ваш порт или свободные есть? Все-таки для nandflash хочется использовать файловую систему, заточенную под нее.
AlexandrY
Цитата(shreck @ Sep 12 2014, 05:13) *
Спасибо. Подтвердили мои догадки, основанные на косвенных данных.
А Yaffs у вас под MQX работает? Ваш порт или свободные есть? Все-таки для nandflash хочется использовать файловую систему, заточенную под нее.


Yaffs 2 у меня работает на другом семействе микроконтроллеров и под другой RTOS. Но NAND была по той же схеме подключена.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.