Estoy usando un enrutador Linksys WRT 1900 ACS con OpenWrt 15.05.1. Estoy ejecutando un programa en C que envía ciertos paquetes de WiFi UDP Multicast a intervalos regulares (de 16 ms) y luego imprime la hora del sistema en la salida estándar. Puedo ver claramente las irregularidades en el extremo receptor, pero no aparecen en los valores de tiempo impresos.
Esto me lleva a creer que se está produciendo cierto nivel de búfer / espera incluso después de que se devuelve la llamada al sistema sendto () ¿Cómo puedo obtener la hora a la que se emite realmente el paquete?
Nota: Las irregularidades son las mismas en todos los receptores en esa red de multidifusión, por lo que el problema no está en el extremo del receptor.
networking
wireless-networking
router
openwrt
wifi-transfer
Nisheeth Lahoti
fuente
fuente
Respuestas:
Desafortunadamente, no puedes.
TL; DR
los
sendto
La función regresa tan pronto como el paquete se haya enviado a la pila de IP. La pila de IP del núcleo lo procesará e intentará enviar el paquete a través de su interfaz WiFi.Aquí radica el problema, el retraso en la transmisión de WiFi es largo (en comparación con Ethernet por cable) e irregular. Aquí hay un ejemplo de la latencia que debe esperar:
Este gráfico logarítmico muestra el tiempo de espera de ping entre mi servidor y mi enrutador y entre mi servidor y un cliente inalámbrico. Ya que
ping
es bidireccional, la latencia unidireccional es probablemente alrededor de la mitad de eso.La comunicación por cable muestra un tiempo de ping alrededor de 300us, mientras que los enlaces inalámbricos muestran un promedio de 7 ms (23 veces más de retraso).
Ahora casi el mismo gráfico, esta vez lineal para resaltar la irregularidad:
El tiempo de ping wifi varía entre 6 y 45 ms.
Soluciones?
Desde el
sendto
La función regresa antes de lo que esperaba, realmente no puede medir en qué momento se envían los paquetes. Si está realmente interesado en el momento en que se envía el paquete, probablemente pueda estimarlo esperando una respuesta del cliente y reduciendo el tiempo de ida y vuelta.Pero, como ya te diste cuenta , todos los clientes WiFi reciben el paquete al mismo tiempo, ya que es un multicast.
Así que la verdadera pregunta aquí es: ¿Qué estás intentando lograr?
Por ejemplo, si desea que todos sus clientes reproduzcan la misma transmisión de audio al mismo tiempo, algún tipo de software PLL debe hacer el truco
Si desea minimizar la demora, WiFi, aún puede intentar ajustar su configuración de WiFi, en particular las relacionadas con ahorro de energía, en el enrutador y en los clientes.
Y si quieres lograr algo duro en tiempo real Rendimiento, probablemente deberías olvidarte de WiFi.
fuente