Estoy escribiendo una pequeña aplicación, que consiste en escribir imágenes jpeg a una velocidad constante en una tarjeta SD. Elijo un sistema de archivos EXT3, pero el mismo comportamiento se observó con un sistema de archivos EXT2.Rendimiento de escritura de la tarjeta SD
Mi lazo de la escritura se parece a esto:
get_image()
fwrite()
fsync()
O así:
get_image()
fopen()
fwrite()
fsync()
fclose()
que también muestran algunas estadísticas de tiempo, y puedo ver mi programa se bloquea en algún momento durante varios segundos. La tasa promedio sigue siendo buena, porque si conservo las imágenes entrantes en una fifo, entonces escribiré muchas imágenes en un corto período de tiempo después de dicha pérdida. ¿Sabes si es un problema con el sistema operativo o si está relacionado con la tarjeta SD en sí? ¿Cómo podría acercarme más a tiempo real? No necesito un fuerte tiempo real, pero estar estancado durante varios segundos no es aceptable.
Un poco de precisión: Sí, es necesario hacer fsync después de cada archivo, porque quiero que la imagen esté en el disco, no en algún usuario o en el búfer del kernel. Sin fsyncing, tengo mucho mejor rendimiento, pero todavía inaceptable. No creo que sea un problema de búfer, ya que el primer bloqueo ocurre después de que se escribieron 50 Mbytes. Y de acuerdo con la página man, fsync está aquí precisamente para garantizar que no haya datos almacenados en búfer.
precisión con respecto a la tasa promedio de escritura: me escribo a un ritmo que es sostenible por la tarjeta que estoy utilizando. Si apilo la imagen entrante mientras espero que se complete una fsync, después de esta parada la tasa de transferencia de escritura aumentará y rápidamente volveré a la tasa promedio. La tasa de transferencia promedio es de alrededor de 1,4 MBytes/s.
El Systeme es un moderno ordenador portátil con Ubuntu 8.04 con la acción Kee (2.6.24.19)
pleaes nota JFFS y similares no son una buena idea para algunos dispositivos flash, como CompactFlash, que hacen su propia nivelación de desgaste. – Hasturkun
¿Son una mala idea o la nivelación de desgaste de CompactFlash simplemente niega los beneficios de JFFS? Es una pregunta honesta, no tengo idea. Estoy de acuerdo en que sin duda es una mejor opción para dispositivos flash 'crudos'. –