2011-02-18 13 views
5

Estoy trabajando con un sistema de tiempo real escrito en C++. Estamos buscando utilizar boost o pantheios para iniciar sesión. El sistema tiene algunos requisitos de registro estándar que estoy seguro pueden cumplir con cualquiera de los frameworks, pero además queremos ser capaces de registrar todas las entradas capturadas por este sistema. Esta entrada será capturada por varios subprocesos, incluidos algunos subprocesos que tienen restricciones en tiempo real y no pueden permitirse retrasos significativos de un registro ineficiente. Esto debería dar como resultado un alto rendimiento de datos para ser registrados.viabilidad de la biblioteca de registro C++ para la captura asincrónica de datos de alto rendimiento?

Quiero saber principalmente si se puede confiar en cualquiera de los marcos para gestionar un registro de alto rendimiento de varios hilos sin retrasar mis hilos críticos. Además, es posible que necesitemos hacer algunos borradores de datos que requerirían agregar algún tipo de enlace que sea capaz de identificar las entradas de captura que tienen datos seguros, ejecutar nuestro enlace de depuración de datos y mantener un búfer que contenga asignaciones de valores que ya fueron depurados.

Creo que ambas plataformas de registro pueden hacer esto, pero no está claro para mí con un rápido vistazo a su API. ¿Alguien que haya usado cualquiera de estas herramientas de registro me puede dar una opinión sobre qué tan eficientes son en este contexto, qué tan fácil sería implementar lo que describí, o su preferencia entre los dos frameworks de registro? Realmente, cualquier información sería útil.

Gracias

Respuesta

2

estoy usando la biblioteca de registro Boost escrito por Jon Torjo y éste se ofrece a hacer toda la escritura a los archivos de registro de un hilo dedicado, por lo que no se demore de E/S en el hilo que realizan el registro . Esto tiene la desventaja de que, cuando el sistema se cuelga, es posible que no se registren algunas sentencias de registro, ya que hace uso de una cola interna.

Pero en general esta biblioteca está funcionando muy bien, te da muchas opciones diferentes y creo que podría ser una buena opción para ti, si estás dispuesto a sacrificar mensajes.

Si esa no es una opción, tendrá que hacer E/S del hilo que necesita iniciar sesión, lo que realmente no es ideal en un sistema en tiempo real.

Si está ejecutando en Windows, sabe que no es un sistema operativo RT, ¿verdad?

+1

La biblioteca que usted ha mencionado no es una biblioteca de impulso, pasó por el proceso de revisión, pero fue rechazada unánimemente por la comunidad Boost, como para Torjo que no se ha vuelto a saber de Boost en el MLS –

+0

@sonicoder: ¿por qué fue rechazado? –

6

He realizado el registro en grandes situaciones de subprocesos múltiples. Mi experiencia fue:

  • El registro solo existe para beneficio del desarrollador. Nadie más leerá o comprenderá los archivos de registro.

  • Desacoplar la generación de los mensajes de registro y cómo se registran.

  • Si desea que la generación de mensajes de registro sea más eficiente, primero use un contexto que sea rápido, verifique si algo está registrando este contexto y si no no genera. De lo contrario, genera el mensaje. (El uso más común de esta técnica es un "nivel" que puede ser "depuración", "información", etc. y si nada está registrando a ese nivel, no creamos el mensaje).

  • Cada caso de uso debe tener una identificación especial generada que permanezca con ese caso de uso y todo lo que se registra desde allí mostrará esta identificación de caso de uso.

  • También inicie sesión el ID de hilo que genera el mensaje.

  • Utilice un hilo separado para hacer el registro que los que generan el mensaje.(Biblioteca de la tala de impulso hace de esta manera)

  • Cuidado con ir "macro-loco", aunque las macros de luz para añadir en cosas como ARCHIVO y LÍNEA automáticamente están bien.

Cuestiones relacionadas