Difference between SO_TIMESTAMP and SO_TIMESTAMPING software timestamps

Linux kernel ofrece dos opciones de toma para recuperar tiempos de software de paquetes de red entrantes: SO_TIMESTAMP y SO_TIMESTAMPING con SOF_TIMESTAMPING_RX_SOFTWARE | SOF_TIMESTAMPING_SOFTWARE banderas. El documentación describe como sigue:

  • SO_TIMESTAMP

Genera un timetamp para cada paquete entrante en (no necesariamente tiempo del sistema.

  • SO_TIMESTAMPING

Solicite los tiempostamps rx cuando los datos entren en el núcleo. Estas marcas de tiempo se genera justo después de que un controlador de dispositivo da un paquete al El núcleo recibe la pila.

Por lo que entendí que no son iguales, porque la documentación dice:

Tenga en cuenta que si el SO_ La opción TimeSTAMP o SO_TIMESTAMPNS está habilitada junto con SO_TIMESTAMPING utilizando SOF_TIMESTAMPING_SOFTWARE, un falso timetamp software se generará en la llamada recvmsg() en ts[0] cuando falta un tiempo de software real.

Mi pregunta es, ¿son estos dos tipos de veces más diferentes? Si es así, ¿cuál es la diferencia?

También me pregunto qué tiempo del sistema ¿Significa aquí? Es esta la misma fuente del tiempo clock_gettime con CLOCK_REALTIME ¿Proporciona?

Pregunta hecha hace 3 años, 5 meses, 3 días - Por scriptsculptor


3 Respuestas:

  • Su suposición es correcta que no son la misma, la principal diferencia entre ellos es en la forma en que trabajan o el resultado que proporcionan, me encontré tratando con esto durante las implementaciones de algunos drivers:

    SO_TIMESTAMP:

    Esto permite tiempos de datagramas en la ruta de recepción, si existe cualquier toma de destino es desconocida de antemano, lo que significa que las mismas opciones son verdaderas para todos los paquetes, esto también genera timetamps por cada paquete recibidos, y el resultado es un cronograma struct.

    SO_TIMESTAMPNS:

    Igual que SO_TIMESTAMP pero devuelve el timetamp como struct timespec.

    SO_TIMESTAMPING:

    Esta opción admite múltiples tipos de peticiones de timetamps y como resultado, esto La opción de toma toma un bitmap de banderas, no un booleano. Además, esta opción genera timetamps en recepción, transmisióno ambos al mismo tiempo y por supuesto, soporta diferentes recursos de timetamp.

    struct timespec represents a simple calendar time, or an elapsed time, with sub-second resolution (nsec resolution).

    struct timeval. struct timeval is an older type for representing a simple calendar time, or an elapsed time, with sub-second resolution. It is almost the same as struct timespec, but provides only microsecond resolution.

    El tiempo del sistema representa la noción de un sistema informático del paso del tiempo. Dependiendo del contexto podría ser el tiempo que tomó la CPU para terminar una operación o el tiempo del reloj de pared el que normalmente llamamos real-time. En este caso no es necesariamente lo mismo. Asnwer le ayudará a entender la diferencia entre monotonic y system-time.

    Espero que lo anterior ayude a aclarar (esto podría ser útil también)! 👍

    Respondida el Dec 18, 2020 a las 20:38 - por devepicenter

    Votos positivos: 0 | Votos negativos: 0

  • El uso de las opciones de timestamping en Linux kernel, como SOTIMESTAMP y SOTIMESTAMPING, puede generar confusión debido a las diferencias entre ellos. A continuación se describen las diferencias clave entre ambos:

    • SO_TIMESTAMP:
    - Genera un timestamp para cada paquete entrante en el sistema.
    • El timestamp no necesariamente refleja el tiempo del sistema global, sino más bien el momento en que llegó el paquete al sistema.
    • SO_TIMESTAMPING:
    - Permite el timestamping de paquetes cuando entran en el kernel.
    • Las marcas de tiempo se generan justo después de que un controlador de dispositivo da un paquete al kernel.
    • Al utilizar las banderas SOF_TIMESTAMPING_RX_SOFTWARE | SOF_TIMESTAMPING_SOFTWARE, se puede obtener un timestamp 'falso' si no se genera un tiempo de software real.

    En resumen, SOTIMESTAMP se ocupa de los timestamps de los paquetes en general, mientras que SOTIMESTAMPING permite un timestamp más preciso en el momento en que los paquetes ingresan al kernel.

    En cuanto a tu segunda pregunta, el concepto de 'tiempo del sistema' se refiere al tiempo global que rige el sistema operativo. Este tiempo del sistema puede ser accedido a través de la función clock_gettime con la bandera CLOCK_REALTIME, y proporciona una referencia al tiempo actual del sistema en relación al Epoch (la fecha de referencia del sistema).

    Espero que esta explicación aclare tus dudas. Si necesitas más información o aclaraciones adicionales, no dudes en pedirlas.

    Respondida el Dec 19, 2020 a las 20:34 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Diferencias entre SOTIMESTAMP y SOTIMESTAMPING:

    SO_TIMESTAMP:

    Agrega una marca de tiempo a cada paquete entrante utilizando un contador de hardware. La marca de tiempo es el tiempo en que el paquete llega al dispositivo de red, no cuando ingresa al núcleo. No requiere soporte de hardware especial.

    SO_TIMESTAMPING:

    Permite que el kernel solicite específicamente marcas de tiempo de software rx cuando los datos ingresan al núcleo. Las marcas de tiempo se generan justo después de que un controlador de dispositivo entrega un paquete a la pila de red del núcleo. Requiere soporte de hardware para generar marcas de tiempo de software precisas.

    Diferencia clave:

    La diferencia clave es el momento en que se genera la marca de tiempo:

    SOTIMESTAMP: Marca de tiempo el paquete cuando llega al dispositivo de red. SOTIMESTAMPING: Marca de tiempo el paquete cuando ingresa al núcleo.

    Como resultado, SO_TIMESTAMPING normalmente proporcionará marcas de tiempo más precisas, ya que tiene en cuenta el tiempo que lleva procesar el paquete en el hardware de red.

    Tiempo del sistema:

    El "tiempo del sistema" mencionado en la documentación se refiere al tiempo mantenido por el kernel de Linux. Es la misma fuente de tiempo que se utiliza en clock_gettime con CLOCK_REALTIME.

    Uso simultáneo de SOTIMESTAMP y SOTIMESTAMPING:

    Como se indica en la documentación, usar simultáneamente SOTIMESTAMP y SOTIMESTAMPING con las marcas SOFTIMESTAMPINGRXSOFTWARE | SOFTIMESTAMPING_SOFTWARE puede generar marcas de tiempo de software falsas. Esto se debe a que el kernel intentará generar una marca de tiempo de software incluso si el hardware no la admite correctamente.

    Para evitar este problema, se recomienda utilizar solo una de estas opciones. SO_TIMESTAMPING generalmente proporciona marcas de tiempo más precisas y debe preferirse si el hardware de red lo admite.

    Respondida el Dec 19, 2020 a las 20:39 - por Gemini

    Votos positivos: 0 | Votos negativos: 0