LINUX

Cómo verificar fallas de página en Linux

La memoria virtual es el concepto cuando nos damos cuenta de que la memoria utiliza más que la memoria física. El gran problema con la memoria virtual es el error de página.

La unidad de transferencia básica es un bloque de datos de longitud fija llamado página. Cuando un proceso no obtiene una página en la memoria principal, el hardware genera una excepción (llamada falla de página) al software. Ocurre cuando una página se ha asignado a un espacio de direcciones pero no se ha cargado en la memoria física. Si la página solicitada no reside en la memoria principal o en la memoria caché de la CPU, la página debe intercambiarse desde un almacenamiento externo. Se llama error de página mayor. Si la página solicitada reside en la memoria principal, pero el proceso no puede acceder a ella debido a una memoria no inicializada o una página COW (copia en escritura), se denomina error de página menor. Aquí no se requiere E / S desde el disco duro, por lo que se requiere menos tiempo.

La falla de página mayor y menor se puede encontrar con los siguientes comandos en Linux.

Usando el comando ps

Comando ps de Linux con -o opción que podemos usar para imprimir fallas de página.

Aquí, estamos interesados ​​en las fallas de página. La opción ‘min_flt’ reporta fallas menores y ‘maj_flt’ reporta fallas mayores.

# ps -o pid,min_flt,maj_flt,cmd
PID MINFL MAJFL CMD
2636 2357 0 -bash
2827 146187 0 /bin/bash /usr/sbin/makewhatis
11723 133 0 [makewhatis]
11724 116 0 [gawk]
11725 254 0 ps -o pid,min_flt,maj_flt,cmd

De forma predeterminada, el comando ps muestra los procesos asociados con el terminal actual únicamente. Para mostrar todos los procesos, -A se utiliza la opción.

# ps -A -o pid,min_flt,maj_flt,cmd
PID MINFL MAJFL CMD
1 2927 48 init [3]
2 0 0 [migration/0]
3 0 0 [ksoftirqd/0]
4 0 0 [watchdog/0]
5 0 0 [events/0]
6 0 0 [khelper]
---output truncated---

Usando el comando de tiempo

El comando de tiempo de GNU ejecuta un comando e informa el uso de recursos del sistema por ese comando. También puede informar sobre los errores de página mayores y menores.

El comando de tiempo de GNU debe ejecutarse como ‘/ usr / bin / time’ y no solo como «tiempo», porque ‘tiempo’ ejecutará el comando de tiempo incorporado de BASH que informa el tiempo de ejecución de un comando.

$ /usr/bin/time ls /etc/passwd
/etc/passwd
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3232maxresident)k
0inputs+0outputs (0major+260minor)pagefaults 0swaps

los -f La opción se puede utilizar para formatear la salida.

$ /usr/bin/time -f "(%Fmajor %Rminor)pagefaults" ls /etc/passwd
/etc/passwd
(0major 260minor)pagefaults

%F – fallas de página principales («Número de fallas de página importantes o que requieren E / S que ocurrieron mientras el proceso se estaba ejecutando. Estas son fallas en las que la página se ha migrado de la memoria primaria».

% R – fallas de página menores («Número de fallas de página menores o recuperables. Estas son páginas que no son válidas (por lo que fallan) pero que aún no han sido reclamadas por otras páginas virtuales. Por lo tanto, los datos de la página siguen siendo válidos pero las tablas del sistema deben actualizarse «. – de la página del manual del comando de tiempo)

La salida detallada también es útil con -v opción:

$ /usr/bin/time -v ls /etc/passwd
/etc/passwd
Command being timed: "ls /etc/passwd"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 3216
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 261
Voluntary context switches: 1
Involuntary context switches: 3
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
$ /usr/bin/time -v cp -r jvm/ Documents/
Command being timed: "cp -r jvm/ Documents/"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.37
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 3312
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 267
Voluntary context switches: 4
Involuntary context switches: 2
Swaps: 0
File system inputs: 24
File system outputs: 16
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

Usando el comando superior

El comando superior es un comando interactivo que proporciona una vista en tiempo real del sistema.

Pegar f para seleccionar campos manualmente, es decir, para agregar o eliminar campos de la lista anterior.

Prensado f muestra la siguiente pantalla:

Current Fields: AEHIOQTWKNMbcdfgjplrsuvyzX for window 1:Def
Toggle fields via field letter, type any other key to return

* A: PID = Process Id 0x00000040 PF_FORKNOEXEC
* E: USER = User Name 0x00000100 PF_SUPERPRIV
* H: PR = Priority 0x00000200 PF_DUMPCORE
* I: NI = Nice value 0x00000400 PF_SIGNALED
* O: VIRT = Virtual Image (kb) 0x00000800 PF_MEMALLOC
* Q: RES = Resident size (kb) 0x00002000 PF_FREE_PAGES (2.5)
* T: SHR = Shared Mem size (kb) 0x00008000 debug flag (2.5)
* W: S = Process Status 0x00024000 special threads (2.5)
* K: %CPU = CPU usage 0x001D0000 special states (2.5)
* N: %MEM = Memory usage (RES) 0x00100000 PF_USEDFPU (thru 2.4)
* M: TIME+ = CPU Time, hundredths
b: PPID = Parent Process Pid
c: RUSER = Real user name
d: UID = User Id
f: GROUP = Group Name
g: TTY = Controlling Tty
j: P = Last used cpu (SMP)
p: SWAP = Swapped size (kb)
l: TIME = CPU Time
r: CODE = Code size (kb)
s: DATA = Data+Stack size (kb)
u: nFLT = Page Fault count
v: nDRT = Dirty Pages count
y: WCHAN = Sleeping in Function

Ahora, el campo (columna) para errores de página es nFLT, que se puede alternar con la tecla ‘u’ como se especifica en la salida anterior. los nDRT indica el recuento de páginas sucias, es decir, el número de páginas que se han modificado desde la última vez que se escribieron en el disco. Se puede alternar con v clave.

Después de alternar estos dos campos, la parte superior se muestra de la siguiente manera:

top - 13:42:32 up 3:36, 2 users, load average: 0.00, 0.02, 0.05
Tasks: 148 total, 2 running, 145 sleeping, 0 stopped, 1 zombie
Cpu(s): 2.0%us, 1.7%sy, 0.0%ni, 96.2%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 3058016k total, 978396k used, 2079620k free, 73936k buffers
Swap: 4095996k total, 0k used, 4095996k free, 499432k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ nFLT nDRT COMMAND
1069 root 20 0 88628 24m 11m S 3 0.8 1:15.12 54 0 Xorg
3093 raghu 20 0 94044 14m 10m S 2 0.5 0:02.34 1 0 gnome-terminal
1903 raghu 20 0 126m 37m 18m S 1 1.3 1:26.27 17 0 plugin-containe
3177 raghu 20 0 2660 1132 836 R 1 0.0 0:00.09 0 0 top
1573 raghu 20 0 74740 16m 9m S 0 0.6 0:20.45 35 0 compiz
1843 raghu 20 0 465m 155m 31m S 0 5.2 1:00.59 43 0 firefox
1847 raghu 20 0 77084 30m 10m S 0 1.0 0:11.58 16 0 ubuntuone-syncd
2331 root 20 0 0 0 0 R 0 0.0 0:02.13 0 0 kworker/0:0
1 root 20 0 3044 1848 1284 S 0 0.1 0:00.86 23 0 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 0 0 kthreadd
3 root 20 0 0 0 0 S 0 0.0 0:03.11 0 0 ksoftirqd/0

Archivo / proc / vmstat

El valor pgfault en ‘/ proc / vmstat’ informa las estadísticas de la memoria virtual. El valor de error de página se puede extraer usando el comando grep.

$ grep pgfault /proc/vmstat
pgfault 5229281

Archivo / proc / PID / stat

La información del proceso se puede buscar en el directorio / proc. Este directorio contiene un directorio para cada proceso con el nombre de PID de ese proceso. Bajo ese directorio, el archivo de estadísticas contiene estadísticas del proceso.

Los siguientes campos son de interés:

Field 1 -
Field 2 - filename of the executable
Field 10 - number of minor page faults
Field 12 - number of major page faults

Estos campos se pueden extraer usando el comando de corte:

$ cut -d " " -f 1,2,10,12 /proc/1/stat
1 (init) 6798 22

$ cut -d " " -f 1,2,10,12 /proc/1874/stat
1874 (firefox) 840829 67

$ cut -d " " -f 1,2,10,12 /proc/4691/stat
4691 (bash) 2146 0

Conclusión

En este tutorial, aprendimos las formas de encontrar fallas de página usando comandos básicos de Linux. Déjame saber tus sugerencias en el cuadro de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar