Кстати sysinfo в поле freeram считает буферы/кэши занятой памятью, реально к этому полю нужно прибавлять поле bufferram, буферы и кеши это _свободная_ память.
но все-таки, не учитывать буферы и кэши в realtime-приложении как-то ссыкотно. вот к примеру кэш забит данными отложенными на запись. если мне срочно понадобилась память, и ее выделение потребовало освобождение этого кэша, то нужно будет ждать пока данные будут записаны. то есть возникнет задержка.
вот в чем и собака порылась. на ББ-то я и сам был в этом уверен, а на ARM видимо реализация драйвера или stdlib какая-то иная или с ошибкой.
не поймите превратно, копать причину я вряд ли буду - я тут эти рассуждения затеял лишь чтобы если кто-то столкнется с моей проблемой (необходимостью быстрой записи на SD), то знал что есть решение. и не более того.
вот к примеру кэш забит данными отложенными на запись. если мне срочно понадобилась память, и ее выделение потребовало освобождение этого кэша, то нужно будет ждать пока данные будут записаны. то есть возникнет задержка.
Данные не откладываются на запись - они записываются, просто буферы не разрушаются. Пример для чего это нужно - попробуй запустить "тяжелое" приложение типа ОО или ФФ - первый раз оно будет запускаться оочень медленно, но зато второй раз практически мгновенно потому что данные осели в буфере. Системе ничего не стоит отдать эту память при первом же запросе, просто эти ФФ и ОО запустятся так как будто в первый раз. Это очень эфективный подход к использованию памяти.
вот в чем и собака порылась. на ББ-то я и сам был в этом уверен, а на 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 какую-то ерунду показывает.
ЗЫ карточка mmc kingston, скорость записи получается в районе 1,6 MiB/с
со стыдом бью себя по лбу клавиатурой ! действительно странности наблюдались при открытии файла на "w+b", а на "a+b" показания одинаковые. вот до чего доводит работа по ночам! приношу Глубочайшие извинения!
PS карточка Трансценд SD 2Gb, скорость записи на уровне 1Mb/c :-(
Для примера сегодня запустил те же самые тесты на 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
Для примера сегодня запустил те же самые тесты на 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
а монтируете в синхронном режиме, или асинхронном?