• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

195
Vistas
¿Es mmap + madvise realmente una forma de E/S asíncrona?

Estoy tratando de averiguar si mmap 'ing un archivo, y luego usar madvise() o posix_madvise() con MADV_WILLNEED / POSIX_MADV_WILLNEED en realidad activa E / S asíncrona de fondo para lectura anticipada. Las páginas del manual de madvise no especifican si este es el caso; el comportamiento real de madvise no queda claro en su mayoría, para permitir la flexibilidad de la implementación.

Pero, ¿alguna implementación de POSIX convencional real (como Linux) realmente realiza E/S de archivos asíncronos cuando se llama a madvise() con MADV_WILLNEED ? Parece que no puedo obtener ninguna información confiable sobre esto. Esta pregunta sugiere que sí, al menos en Linux, incluso si no es ideal ya que no hay un mecanismo de devolución de llamada.

Este extracto del libro afirma que posix_fadvise con POSIX_FADV_WILLNEED hará lectura anticipada asíncrona, pero no menciona si madvise() hace lectura anticipada asíncrona.

Además, parecería que todo el concepto de E/S de "lectura anticipada" realmente no tiene ningún sentido a menos que sea asíncrono. Si fue síncrono, simplemente hace que la aplicación del usuario se bloquee para la lectura anticipada, en lugar de más tarde cuando lee el archivo, lo que no parece una optimización particularmente poderosa.

Entonces, ¿ madvise() con MADV_WILLNEED realmente hace lectura anticipada asíncrona en cualquier plataforma principal (como Linux)?

over 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Con Linux siempre puedes consultar el código fuente.

Ver fadvise.c :

 case POSIX_FADV_WILLNEED: ... force_page_cache_readahead(mapping, f.file, start_index, nrpages); break;

Entonces, posix_fadvise llama a force_page_cache_readahead para realizar la lectura anticipada.

Ahora echemos un vistazo a madvise.c :

 static long madvise_willneed(...) { ... force_page_cache_readahead(file->f_mapping, file, start, end-start); return 0; }

Entonces MADV_WILLNEED y POSIX_FADV_WILLNEED son equivalentes en Linux.

¿Puede esto llamarse E/S asíncrona? No me parece. Async IO generalmente implica que hay alguna notificación que le permite recuperar datos. El consejo es solo un consejo: no solo no sabe cuándo los datos están listos para ser leídos, sino que si es demasiado tarde, es posible que los datos ya se desechen.

over 3 years ago · Santiago Trujillo Denunciar

0

En general, debe suponer que las funciones m* no realizarán una lectura anticipada asíncrona.

over 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda