Entrada/Salida y Gestión de Memoria (E/S & MM) - Tests

Análisis del Caso de Prueba: mmap01

  • Subsistema: syscalls/mmap

  • Objetivo: Verificar que la asignación de memoria compartida (MAP_SHARED) mediante mmap() proyecte correctamente un descriptor de archivo en la memoria del proceso.

  • Fundamento Teórico: Consulte Entrada/Salida y Gestión de Memoria (E/S & MM) - Teoría para revisar el funcionamiento de la estructura struct file_operations y el mapeo de memoria virtual.

Análisis de Ejecución

  1. Configuración del Entorno (setup): Se utiliza la macro SAFE_OPEN de LTP para crear un fichero temporal en un directorio aislado (needs_tmpdir = 1) y se ajusta su tamaño al de una página mediante ftruncate.

  2. Invocación de Syscall (run): Se invoca mmap() con los flags PROT_READ | PROT_WRITE y MAP_SHARED.

  3. Verificación: Se realiza una escritura directa en la dirección devuelta por el kernel (addr[0] = 'A') comprobando la persistencia en el buffer.

Resultados en Entorno buildlab

tst_test.c:1690: TINFO: LTP version: 20240129
tst_test.c:1578: TINFO: Timeout per test is 0h 05m 00s
mmap01.c:58: TPASS: mmap() funcionó y la memoria es accesible

Summary:
passed   1
failed   0
broken   0
skipped  0
warnings 0

Análisis del Caso de Prueba: direct_io01

  • Subsistema: syscalls/read / syscalls/write / fs

  • Objetivo: Verificar la correcta ejecución de operaciones de Entrada/Salida Directa utilizando la bandera O_DIRECT, garantizando la omisión de la Page Cache del kernel y el uso de memoria alineada.

  • Fundamento Teórico: Consulte Entrada/Salida y Gestión de Memoria (E/S & MM) - Teoría para revisar la abstracción de descriptores de archivo, la gestión de buffers a nivel de VFS y el mecanismo de lectura/escritura en dispositivos de bloque.

Análisis de Ejecución

  1. Configuración del Entorno (setup): Se abre un archivo temporal en un sistema de archivos compatible mediante la bandera O_DIRECT de openat() (requiere _GNU_SOURCE). Se reserva un buffer de memoria virtual alineado estrictamente a límites de página/bloque (utilizando posix_memalign o atributos de alineación) para cumplir los requisitos de E/S sin caché.

  2. Invocación de Syscall (run): Se escribe un patrón de datos en el archivo mediante write() directamente desde el buffer alineado y se reposiciona el cursor a cero (lseek). Posteriormente, se ejecuta una lectura mediante read() sobre un segundo buffer alineado.

  3. Verificación: Se valida que la llamada a write() devuelva la cantidad exacta de bytes escritos sin errores de alineación (EINVAL) y que los datos leídos coincidan exactamente con el patrón original, garantizando la omisión efectiva del Page Cache.

Resultados en Entorno buildlab

Test direct_io01

Sección reservada para documentar las salidas de ejecución y registros en buildlab clasificando los resultados según la metodología LTP (TPASS, TFAIL, TCONF).

tst_tmpdir.c:316: TINFO: Using /tmp/LTP_dirYgRNov as tmpdir (xfs filesystem)
tst_test.c:1900: TINFO: LTP version: 20250130
tst_test.c:1904: TINFO: Tested kernel: 6.12.0-124.8.1.el10_1.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 22:54:28 UTC 2025 x86_64
tst_kconfig.c:88: TINFO: Parsing kernel config '/lib/modules/6.12.0-124.8.1.el10_1.x86_64/build/.config'
tst_test.c:1722: TINFO: Overall timeout per run is 0h 00m 30s
direct_io_test.c:68: TINFO: Probando escritura directa (O_DIRECT) de 4096 bytes...
direct_io_test.c:83: TINFO: Probando lectura directa (O_DIRECT)...
direct_io_test.c:94: TPASS: Escritura y lectura O_DIRECT exitosas con datos coherentes

Summary:
passed   1
failed   0
broken   0
skipped  0
warnings 0