Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:4
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:8
Форум » starterkit.ru » Embedded Linux
Снова вопрос по SD
sasamy
Добавлено 19.02.2010 13:36 Сообщение: 41
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Кстати sysinfo в поле freeram считает буферы/кэши занятой памятью, реально к этому полю нужно прибавлять поле bufferram, буферы и кеши это _свободная_ память.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 19.02.2010 14:02 Редактировалось 19.02.2010 14:03 Сообщение: 42
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Цитата
файл открывается на добавление - объем записываемых данных там и там одинаков.


Ок - я не обратил внимание. Тогда мне тоже не совсем понятен результат вашего теста.

# cat f1.c
#include <stdio.h>

int main()
{
char buf[1000000];
FILE *f =fopen("test1", "a+b");
int i;

for (i = 0; i < 100; i++) {
fwrite(buf, sizeof(buf), 1, f);
}

fclose(f);

return 0;
};

# cat f2.c
#include <stdio.h>

int main()
{
char buf[1000000];
int i;

for (i = 0; i < 100; i++) {
FILE *f =fopen("test2", "a+b");
fwrite(buf, sizeof(buf), 1, f);
fclose(f);
}

return 0;
};
# gcc f1.c && time ./a.out

real 0m0.367s
user 0m0.000s
sys 0m0.367s
# gcc f2.c && time ./a.out

real 0m0.888s
user 0m0.000s
sys 0m0.347s

При повторном запуске время попеременно меняется то в пользу одного то другого варианта и колеблется примерно около одной величины.

ps это на большом linux i386 а не на плате.
Спуститься к концу Подняться к началу
Персональная информация
Valentinus
Добавлено 19.02.2010 14:04 Сообщение: 43
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
Цитата
Кстати sysinfo в поле freeram считает буферы/кэши занятой памятью, реально к этому полю нужно прибавлять поле bufferram, буферы и кеши это _свободная_ память.

спасибо, буду в курсе.

но все-таки, не учитывать буферы и кэши в realtime-приложении как-то ссыкотно. вот к примеру кэш забит данными отложенными на запись. если мне срочно понадобилась память, и ее выделение потребовало освобождение этого кэша, то нужно будет ждать пока данные будут записаны. то есть возникнет задержка.
Спуститься к концу Подняться к началу
Персональная информация
Valentinus
Добавлено 19.02.2010 14:06 Редактировалось 19.02.2010 14:10 Сообщение: 44
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
Цитата
Цитата
файл открывается на добавление - объем записываемых данных там и там одинаков.


Ок - я не обратил внимание. Тогда мне тоже не совсем понятен результат вашего теста.

...

При повторном запуске время попеременно меняется то в пользу одного то другого варианта и колеблется примерно около одной величины.

ps это на большом linux i386 а не на плате.

вот в чем и собака порылась. на ББ-то я и сам был в этом уверен, а на ARM видимо реализация драйвера или stdlib какая-то иная или с ошибкой.

не поймите превратно, копать причину я вряд ли буду - я тут эти рассуждения затеял лишь чтобы если кто-то столкнется с моей проблемой (необходимостью быстрой записи на SD), то знал что есть решение. и не более того.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 19.02.2010 14:18 Сообщение: 45
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Цитата
вот к примеру кэш забит данными отложенными на запись. если мне срочно понадобилась память, и ее выделение потребовало освобождение этого кэша, то нужно будет ждать пока данные будут записаны. то есть возникнет задержка.


Данные не откладываются на запись - они записываются, просто буферы не разрушаются. Пример для чего это нужно - попробуй запустить "тяжелое" приложение типа ОО или ФФ - первый раз оно будет запускаться оочень медленно, но зато второй раз практически мгновенно потому что данные осели в буфере. Системе ничего не стоит отдать эту память при первом же запросе, просто эти ФФ и ОО запустятся так как будто в первый раз. Это очень эфективный подход к использованию памяти.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 20.02.2010 02:16 Редактировалось 20.02.2010 02:41 Сообщение: 46
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Цитата

вот в чем и собака порылась. на ББ-то я и сам был в этом уверен, а на ARM видимо реализация драйвера или stdlib какая-то иная или с ошибкой.

не поймите превратно, копать причину я вряд ли буду - я тут эти рассуждения затеял лишь чтобы если кто-то столкнется с моей проблемой (необходимостью быстрой записи на SD), то знал что есть решение. и не более того.


Я проверил на плате - результаты аналогичные большому linux.

# time ./f1
real 0m 54.68s
user 0m 0.00s
sys 0m 10.18s

# time ./f2
real 0m 59.40s
user 0m 0.01s
sys 0m 10.01s

# ls -l
-rwxr-xr-x 1 root root 7561 Feb 19 2010 f1
-rwxr-xr-x 1 root root 7561 Feb 19 2010 f2
-rw-r--r-- 1 root root 100000000 Dec 31 17:01 test1
-rw-r--r-- 1 root root 100000000 Dec 31 17:01 test2

Так что ищите у себя ошибки а не в системе :)

ЗЫ карточка mmc kingston, скорость записи получается в районе 1,6 MiB/с

ЗЗЫ с показаниями свободная память/буферы действительно непонятно. free какую-то ерунду показывает.

# free
total used free shared buffers
Mem: 29876 28484 1392 0 3248
Swap: 0 0 0
Total: 29876 28484 1392
Спуститься к концу Подняться к началу
Персональная информация
Valentinus
Добавлено 25.02.2010 22:08 Сообщение: 47
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
Цитата

Так что ищите у себя ошибки а не в системе :)

ЗЫ карточка mmc kingston, скорость записи получается в районе 1,6 MiB/с


со стыдом бью себя по лбу клавиатурой ! действительно странности наблюдались при открытии файла на "w+b", а на "a+b" показания одинаковые. вот до чего доводит работа по ночам! приношу Глубочайшие извинения!


PS карточка Трансценд SD 2Gb, скорость записи на уровне 1Mb/c :-(
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 27.02.2010 17:54 Сообщение: 48
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Для примера сегодня запустил те же самые тесты на microsdhc kingmax class6 4 GB. Результат удручающий:
# time ./f1
real 3m 37.88s
user 0m 0.00s
sys 0m 5.27s
# time ./f2
real 3m 31.10s
user 0m 0.01s
sys 0m 6.04s
Спуститься к концу Подняться к началу
Персональная информация
Valentinus
Добавлено 27.02.2010 21:57 Сообщение: 49
Valentinus
4

Пункты: 2138
Регистрация: 23.01.2010
Пол: Мужчина
Цитата
Для примера сегодня запустил те же самые тесты на microsdhc kingmax class6 4 GB. Результат удручающий:
# time ./f1
real 3m 37.88s
user 0m 0.00s
sys 0m 5.27s
# time ./f2
real 3m 31.10s
user 0m 0.01s
sys 0m 6.04s

а монтируете в синхронном режиме, или асинхронном?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 27.02.2010 22:18 Сообщение: 50
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Это на диске c корневой фс - async. (фс - ext2)
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux