Здравствуйте! Имеется система на Линуксе. Примерная логика части программы такова: программа получает постоянный поток данных от FPGA (64 байта/мс * 12 каналов), если при этом установлено соединение (100Мбит изернет) с GUI, то весь поток должен передаваться туда. Если соединения нет, то поток должен писаться в файл на HDD (EXT3\4). Размер файла может быть до 170Гбайт на канал (30 дней), 12 файлов соответственно. Данные из потока должны передаваться последовательно, т.е. перестановка недопустима. В данный момент собираюсь реализовать это следующим образом: 1) для каждого из каналов создать/открыть файл размером 230Мбайт (1 час данных), отобразить файл в память с mmap(). 2) писать данные в файл в независимости от состояния соединения с GUI как в ФИФО буфер. 3) если соединение установлено - читать данные из файла как из ФИФО буфера, при этом файл не будет превышать первоначального/текущего размера. 4) если соединения нет, продолжать писать в файл, при достижении максимального размера, увеличивать размер файла опять на 230Мбайт (1 час) и делать mremap(). По этой реализации у меня такие вопросы: 1) будет ли это достаточно быстро работать (mmap|mremap)? 2) насколько это все надежно (питание может пропасть в произвольный момент), как делать сброс буфера на диск (как fflush)? 3) что лучше один файл на 30 дней или куча файлов (например 1 час) с точки зрения надежности и быстродействия? 4) какие есть альтернативные варианты?
P.S. Это мой первый проект под Линукс. Подобное ранее не делал. Система на TI OMAPL-138, 128MB DDR, SATA HDD.
|