write read generado funcion ficheros ejemplos directorios archivos abortado c++ c linux memory io

read - C/C++ Linux: escritura más rápida de un fragmento fijo de memoria a archivo(1 Hz)



funcion read en c (2)

En un sistema Linux, tengo un pedazo de memoria de 7MB de tamaño fijo (sin crecimiento) cuyo contenido actualizo en una aplicación en tiempo real.

Necesito escribir esta porción de memoria en el disco (mismo archivo) una vez por segundo.

Teniendo en cuenta las CPU y discos duros modernos (finales de 2011), ¿cuál es la forma más eficiente de implementar esta funcionalidad? No me importa si la escritura en realidad lleva tiempo, pero como se trata de una aplicación en tiempo real, necesito volver a la aplicación en ejecución lo antes posible.

¿Qué metodologías debería intentar?

Mi línea base es una línea de base estándar fopen (), binario fwrite (), fclose () ciclo.

He leído que mmap () podría ser útil. Tal vez la E / S asincrónica? ¿Hay otras metodologías que debería ser una evaluación comparativa? Fuera de la cabeza, ¿qué metodología crees que sería la más rápida?


Combinaría los dos enfoques mencionados: Usaría mmap para asignar la memoria al archivo, luego configuraría un hilo separado (con menor prioridad) para msync cada segundo. (En este caso, los argumentos reales para msync no son demasiado importantes; no necesita MS_ASYNC , ya que no estará bloqueando el hilo principal).

Otra alternativa que quizás valga la pena probar sería IO asíncrona. No tengo claro de mi documentación lo que sucede si nunca recuperas los resultados, sin embargo, entonces puedes necesitar algún tipo de código de cosecha para evitar la pérdida de recursos. (IO asincrónico parece bastante poco especificado en Posix, que en mi humilde opinión es una buena razón para evitarlo).


mmap(2) es el camino a seguir. Simplemente llame a msync(2) con MS_ASYNC cuando quiera escribirlo.