Async-tokio DelayNs implementation inaccurate for delays shorter than a few ms
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- rust
Línea de trabajo
Empieza localizando la implementación de Async-tokio DelayNs y revisando cómo tokio::time::sleep gestiona los retrasos inferiores a un milisegundo. Compara el comportamiento actual con la precisión solicitada y, a continuación, evalúa los enfoques propuestos de epoll_wait y Instant::elapsed; se considera terminado cuando los retrasos inferiores a unos pocos milisegundos funcionan con precisión sin un bucle ilimitado que consuma mucha CPU.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
hey fyi
tokio::time::sleepis only good down tomsresolutions, for more granularity we typically need somethingnanosleepor a hot loop, so this implementation won't be accurate for anything less than a couple of ms.having had to solve this a couple of times i suspect a more accurate way to do this would involve using
epoll_waitwith a timeout for> 1usdelays (more accurate kernel timing than sleep is, particularly under the tokio runtime) and a hot loop overInstant::elapsed()for> 1nsdelays (check elapsed and hit the waker every round).possibly combining both into something like:
let now = Instant::now()
loop {
// Grab elapsed at the start of the loop
let elapsed = now.elapsed();
// Break once we exceed the delay duration
if elapsed > duration {
break;
}
// Calculate the remaining sleep time
let remainder = duration - elapsed;
// epoll or spin depending on remainder
if remainder > Duration::from_millis(1) {
epoll_sleep().await;
} else {
spin_sleep().await;
}
}
some folks do more complex things to balance accuracy and cpu use, but, this is fairly straightforward and would be closer to operating as intended.
(it's also good to keep track of elapsed times because there are reasons a sleep might end early, which has caused problems for me in the past)
Originally posted by @ryankurte in https://github.com/rust-embedded/linux-embedded-hal/issues/109#issuecomment-1913732707
- Lenguaje dominante
- Rust
- Estrellas
- 323
- Forks
- 60
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de rust-embedded/linux-embedded-hal
-
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
rust-embedded/linux-embedded-hal#121 · 4 comentarios ·
-
[feature request] PWM supportAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
rust-embedded/linux-embedded-hal#117 · 3 reacciones ·
-
How to use SPI with gpio_cdevAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
rust-embedded/linux-embedded-hal#116 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
Todos los issues de rust-embedded/linux-embedded-hal
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
yologdev/yoyo-evolve#1053 ·
-
bug lompi security sev-9
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
area:config area:security bug good first issue platform:linux platform:windows priority:medium
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
rtk-ai/rtk#4651 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
niravpatidar37/mcpsum#80 ·
Los mantenedores suelen responder en 1 día