HOME DTRACE EN UNA LÍNEA MIS LIBROS SOBRE MÍ
JJMORA.ES
" I T H I N K T H E M A J O R G O O D I D E A I N U N I X WA S I T S C L E A N A N D S I M P L E I N T E R FAC E : O P E N , C LO S E , R E A D, A N D
W R I T E ." K E N T H O M P S O N
Rendimiento/Tuning Solaris:
Memoria swap
admin July 8, 2007
Por de nición, podemos decir que el área de swap consiste en una zona de memoria
secundaria, que el sistema utilizará para almacenar las páginas ocupadas, en memoria
principal, por un proceso, una vez que el Kernel decide que dicho proceso debe ser sacado
de la memoria. Normalmente esta situación, se debe a un problema con la cantidad de
memoria libre en el sistema.
En este artículo, además de realizar una pequeña introducción al área de swap en Solaris,
veremos cómo podemos administrar dicha área y analizaremos cómo el gestor de memoria
de Solaris ha modi cado una de las reglas históricas en la asignación de swap, la regla dice
que:
“El tamaño del área de swap debe ser el doble de la cantidad de memoria física de la DevOps y el camino de baldosas
amarillas
máquina.”
Esta regla se basaba en la forma que tenían los sistemas Unix de asignar el área de swap a
los procesos, cada vez que un proceso reservaba memoria, el sistema debía reservar el
mismo espacio en el área de swap, por esta razón se generalizó el uso de la regla del doble
de la memoria física. Solaris gestiona la asignación de espacio en el área de swap de una
forma diferente. La regla que podemos aplicar para decidir cuanto espacio de memoria
secundaria debemos asignar al área de swap en Solaris sería:
“El espacio total del área de swap será igual al tamaño de la memoria que necesite el
proceso.”
Esta regla puede parecer algo confusa, frente a la sencillez de la regla del doble de la
memoria, pero vamos a intentar explicarla. El sistema de memoria virtual (VM) de Solaris Capacity Planning IT
utiliza una nueva capa, denominada swapfs, que consiste en un sistema de archivos que Una aproximación práctica.
gestiona el área de swap, de tal forma que en el área de swap únicamente se ocupará
espacio cuando el sistema lo necesite y no cada vez que un proceso realice una petición de
memoria.
Search …
swapfs
El VM de Solaris no utiliza el viejo método de asignar espacio en el área de swap cada vez
que un proceso realice una reserva de memoria, sino que dispone de una capa intermedia
que se encarga de gestionar el espacio de swap, esta capa se conoce con el nombre de
swapfs. Cuando un proceso solicita una cantidad de memoria, supongamos que mediante
la llamada malloc() realiza una petición de 16K, esto signi ca que el sistema reservará 2 B LO G RO L L
páginas de memoria (suponiendo que el tamaño de la página sea de 8K), estas nuevas
páginas deben tener asignadas a un vnode, como el resto de páginas de memoria, estas Alvaro Lopez Ortega
nuevas páginas son páginas anónimas por lo que el vnode debe ser el área de swap. El devops.com
Kernel elgeekerrante.com
utiliza la capa de swapfs para gestionar la asignación de los vnodes a las nuevas páginas High Scalability
anónimas que se creen, mientras una página que ha sido solicitada no sea necesario
HuelvaYork
llevarla al área de swap, no tendrá asignado ningún espacio en dicho área.
Iban Nieto
Algo que debemos tener claro para entender cómo funciona swapfs es lo siguiente, swapfs SKaRCHa
trabaja con un espacio virtual de swap el cual está compuesto por el espacio físico de
the agile admin
swap, es decir, todos los discos o cheros que se hayan asignado al espacio de swap, mas
toda la memoria física del sistema que pueda ser paginable. Es decir swapfs además de Victor M. Fernandez Gomez
utilizar los cheros o discos que hayamos asignado al área de swap, también utilizará toda
la memoria disponible en el sistema.
LINKS
Espacio virtual de swap = Espácio de swap + Memoria física
Cuando un proceso solicita memoria al kernel, por ejemplo con la llamada malloc(), se Guadalinex
reserva su ciente espacio del área de swap para que todas las página anónimas que www.adminschoice.com
componen el proceso, puedan ser almacenadas en disco, pero hemos dicho reservado no www.barrapunto.com
asignado, esta diferencia se debe a la forma en la que el swapfs designa el estado de un
área de memoria:
Reservada, un proceso solicita un espacio en el área de swap, la capa de swapfs le CAT EG O R I E S
reserva dicho espacio.
Asignada, cuando se hace referencia a una página del espacio reservado, dicha página Almacenamiento
se asigna al área del swap física. Blockchain
Swapeada, la página es pasada al almacenamiento asignado al área de swap. Capacity planning
Cloud Computing
La diferencia estriba en que mientras reservar es sencillamente eso, realizar una reserva,
pero sin utilizar el espacio que se ha reservado, a una página se le asigna un espacio de DevOps
swap la primera vez que es referenciada, de esta forma, aquellas páginas que nunca serán Dispositivos
utilizadas no tendrán asignado espacio en el área de swap. Por ejemplo, supongamos un dtrace
proceso que solicita 4MB de memoria, es poco probable que el proceso vaya a trabajar en
Eventos
los siguientes ciclos de reloj con todas las páginas, entonces ¿por qué asignar espacio de
Humor
swap cuando puede que otro proceso necesite dicho espacio?. Con swapfs un sistema
Solaris, con la su ciente memoria, podría correr sin área de swap. IPC
Kernel
Una vez que hemos visto, muy por encima, en qué consiste la capa de swapfs, vamos a
Koralle
poner un ejemplo para explicar la regla de:
LDoms
“El espacio total del área de swap será igual al tamaño de la memoria que necesite el
Libros
proceso.”
Linux
Ahora sabemos que cuando un proceso necesita memoria, el sistema no asigna toda esa
Management
memoria en la swap, entonces ¿ cual debe ser el tamaño del área de swap ?, la respuesta la
mdb
obtendremos de las necesidades de memoria de las aplicaciones que corren en nuestro
sistema, por ejemplo, supongamos una aplicación cuyo fabricante recomienda que se Network
ejecute en sistemas con 6GB, nosotros solo disponemos de 4GB, con un área de swap de Noticia
2GB tendríamos un espacio virtual de swap su ciente para garantizar que la aplicación OpenSolaris
podrá ejecutarse. Por supuesto, que este ejemplo es extraordinariamente sencillo, pero
Opinión
ilustra cual sería la regla a seguir para de nir el tamaño de la swap.
PHPEasyTools
Las necesidades de memoria de todos los procesos = Espacio virtual de swap Procesadores
Por lo tanto Sabías que
Sailing
Toda la memoria que van a necesitar todos los procesos = Memoria física + Área de swap.
SmartOS
Trabajar con el área de swap Snipe
Una de las primeras cosas que vamos a ver, es la forma en la que podemos conocer el Software Libre
estado actual de nuestra área de swap, utilizaremos el comando swap con la opción -s. El Solaris
comando nos devolverá un resumen del uso actual del área de swap. SPARC
Tuning
Uncategorized
(root@huelva)# swap -s
total: 552696k bytes allocated + 580744k reserved = 1133440k used, 2310312k avai Virtualizacion
lable
zfs
(root@huelva)#
En la salida del comando swap podemos ver que tenemos 552696k del área asignados y
580744k reservados, lo cual signi ca que en nuestra actual área de swap estamos usando
1133440k y quedan libres 2310312k. También podemos utilizar el comando vmstat, el cual
dispone de una columna que nos informa de la cantidad de memoria libre en el área de www.flickr.com
swap.
(root@huelva)# vmstat 1 3
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s3 -- in sy cs us sy id
0 0 0 2653632 805808 41 269 6 4 4 0 0 0 0 0 0 95 170 443 4 2 94
0 1 0 2310168 868680 157 552 0 0 0 0 0 0 0 0 0 328 1083 455 0 1 99
0 1 0 2310168 868680 1 9 0 0 0 0 0 0 0 0 0 337 274 431 0 0 100
(root@huelva)#
El propio comando swap lo podemos utilizar, tanto para añadir mas espacio al área de
swap, como para reducir dicho espacio. Como sabemos el área de swap está formada por
discos o/y cheros, con la opción -l del comando swap podemos ver cuales son los discos o
cheros que forman el área.
(root@huelva)# swap -l
swapfile dev swaplo blocks free
/dev/vx/dsk/bootdg/swapvol 273,78002 16 4172144 1783072
(root@huelva)#
Aumentar el área de swap
Vamos a suponer que el espacio en el área de swap comienza a disminuir rápidamente, lo
que puede provocar un problema en la paginación del sistema y una reducción del
rendimiento en la ejecución de algunas de las aplicaciones.
(root@huelva)# vmstat 5
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s3 -- in sy cs us sy id
0 0 0 2653512 805784 41 269 6 4 4 0 0 0 0 0 0 95 171 443 4 2 94
0 1 0 2392048 1461976 80 397 0 0 0 0 0 0 0 0 0 333 837 436 0 1 99
0 1 0 2382992 1452064 107 2821 2 8 6 0 0 0 0 0 0 351 3855 457 8 7 85
0 1 0 1959280 1029656 93 11050 0 11 11 0 0 0 0 0 0 368 1507 408 3 26 72
0 1 0 1642704 714104 11014 13299 26 6 6 0 0 0 0 0 0 353 1905 419 3 28 69
0 1 0 1368048 441832 25 321 67 10 10 0 0 0 0 0 0 431 586 460 0 2 98
0 1 0 1188064 257952 170 11333 391 399 399 0 2586 0 0 0 0 550 2195 477 5 35 60
0 2 0 868672 98288 109 2532 859 44752 44928 0 36104 0 0 0 0 4042 1891 923 4 19
77
0 7 0 469832 238696 28 3491 41 55399 55578 0 28076 0 0 0 0 2818 736 589 1 19 80
0 2 0 344840 711672 25 153 287 11 11 0 0 0 0 0 0 550 495 468 0 1 98
0 1 0 344904 711568 31 161 2 11 11 0 0 0 0 0 0 350 450 413 0 1 99
Como podemos ver en la salida de vmstat, se ha producido un decremento en la cantidad
de swap libre en el sistema, esto ha provocado que la cantidad de memoria física se
reduzca y una gran actividad en la paginación que podemos ver por las columnas pi y po.
En sistemas que utilizan espacio de swap para el directorio /tmp, la disminución de la
cantidad de espacio libre en el área de swap, se debe normalmente, a que o bien un
proceso o bien un usuario está escribiendo datos en dicho directorio, por lo tanto, es
importante comprobar si alguien está haciendo uso del directorio /tmp.
Estamos en un punto donde el espacio libre de swap está decreciendo, por lo tanto
debemos añadir de forma rápida más espacio, para ello crearemos un chero vacío, en uno
de los lesystem que tenga más espacio libre y asignaremos dicho chero al área de swap.
Debemos crear un chero con el comando mk le, el chero será de 2GB.
(root@huelva)# mkfile -v 2g /export/home/jjmora/swap_file_01
/export/home/jjmora/swap_file_01 2147483648 bytes
(root@huelva)#
(root@huelva)#
(root@huelva)# swap -a /export/home/jjmora/swap_file_01
(root@huelva)#
Ya se hemos creado el chero de 2GB y lo hemos asignado al área de swap utilizando el
comando swap -a, ahora vamos a comprobar como el área de swap ha aumentado su
tamaño.
(root@huelva)# swap -l
swapfile dev swaplo blocks free
/dev/vx/dsk/bootdg/swapvol 273,78002 16 4172144 1237664
/export/home/jjmora/swap_file_01 - 16 4194288 4194288
(root@huelva)#
(root@huelva)#
(root@huelva)# swap -s
total: 2584088k bytes allocated + 68696k reserved = 2652784k used, 2951664k avai
lable
(root@huelva)#
(root@huelva)#
(root@huelva)#
(root@huelva)# vmstat 1 3
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s3 -- in sy cs us sy id
0 0 0 2653304 805784 41 269 6 4 4 0 0 0 0 0 0 95 171 443 4 2 94
0 1 0 2951488 828032 45 375 0 0 0 0 0 0 0 0 0 336 774 459 0 1 99
0 1 0 2951488 828032 0 0 0 0 0 0 0 0 0 0 0 672 255 435 0 3 97
(root@huelva)#
(root@huelva)#
Podemos comprobar con el comando swap -l que el área de swap dispone de un nuevo
chero, con el comando swap -s podemos ver que el espacio disponible ha aumentado en
2GB, también podemos ver dicho aumento en la salida del comando vmstat 1 3,
comparando la columna de swap con la que hemos obtenido anteriormente.
Reduciendo el área de swap
Una vez que el problema con la cantidad de memoria asignada en el área de swap haya
terminado, podríamos liberar los cheros o discos que hayamos utilizado, para esto,
emplearemos el comando swap con el parámetro -d.
(root@huelva)# vmstat 1 3
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s3 -- in sy cs us sy id
0 0 0 2653320 805784 41 269 6 4 4 0 0 0 0 0 0 95 171 443 4 2 94
0 1 0 4487088 1313792 45 375 0 0 0 0 0 0 0 0 0 320 742 439 0 1 99
0 1 0 4487088 1313792 112 927 0 0 0 0 0 0 0 0 0 341 6003 449 14 2 84
(root@huelva)#
(root@huelva)#
(root@huelva)# swap -d /export/home/jjmora/swap_file_01
(root@huelva)#
(root@huelva)# swap -l
swapfile dev swaplo blocks free
/dev/vx/dsk/bootdg/swapvol 273,78002 16 4172144 3334080
(root@huelva)#
(root@huelva)#
(root@huelva)# swap -s
total: 1048160k bytes allocated + 68632k reserved = 1116792k used, 2390072k avai
lable
(root@huelva)#
(root@huelva)#
(root@huelva)# vmstat 1 3
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 s1 s3 -- in sy cs us sy id
0 0 0 2653328 805792 41 269 6 4 4 0 0 0 0 0 0 95 171 443 4 2 94
0 1 0 2389976 1313808 44 375 0 8 8 0 0 0 0 0 0 328 734 435 0 1 99
0 1 0 2389976 1313816 81 707 0 8 8 0 0 0 0 0 0 334 3359 432 7 2 91
(root@huelva)#
En la salida del primer comando vmstat, el espacio libre de swap ha aumentado, con el
comando swap -d eliminamos el chero que hemos añadido anteriormente al área de
swap. Tanto con swap -s como con vmstat, podemos comprobar que el área de swap ha
vuelto a tener su tamaño original.
swapinfo de MDB
Ya hemos visto los comandos que podemos encontrar en el sistema para trabajar con el
área de swap, ahora vamos a ver de forma rápida, cómo podemos emplear el debugger
MDB para ver el estado del área de swap. MDB dispone de un comando especí co para el
área de swap, ::swapinfo.
(root@huelva)# mdb -k
Loading modules: [ unix krtld genunix ip s1394 usba ipc random nfs ptm cpc login
dmux
md sppp wrsmd nca ]
> ::swapinfo
ADDR VNODE PAGES FREE NAME
00000300000698f8 30001c37080 260759 208380 /dev/vx/dsk/bootdg/swapvol
>
El comando nos devuelve la dirección de la estructura de datos de tipo struct swapinfo,
esta estructura de datos está de nida en el chero de cabecera /usr/include/sys/swap.h. El
comando devuelve una línea por cada chero o disco que formen el área de swap.
>
> 00000300000698f8::print "struct swapinfo"
{
si_soff = 0x2000
si_eoff = 0x7f530000
si_vp = 0x30001c37080
si_next = 0
si_allocs = 0x10
si_flags = 0
si_npgs = 0x3fa97
si_nfpgs = 0x32dfc
si_pnamelen = 0x1b
si_pname = 0x30001ed3600 "/dev/vx/dsk/bootdg/swapvol"
si_mapsize = 0x7f54
si_swapslots = 0x300031c0000
si_hint = 0x17899
si_checkcnt = 0x5648
si_alloccnt = 0x4e107
}
>
Nota – Si tiene alguna pregunta o sugerencia sobre este artículo, por favor, no dude en
ponerse en contacto conmigo mediante email en jjmora AT arrakis DOT es
Rendimiento/Tuning Solaris: Memoria Cache<< | >> Rendimiento/Tuning Solaris: Múltiples
tamaños de página
Technorati Tag(s) : Solaris OpenSolaris performance
OpenSolaris, Tuning Bookmark
PREVIOUS ARTICLE NEXT ARTICLE
Solaris: Buceando en el Kernel con OpenSolaris: Abierto el portal Español
libkvm
© 2024 JJMora.es. All rights reserved. Flato by ThemeMeme