Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases 8. Rendimiento de Memoria 8.1 Memoria y Caché El objetivo de la memoria Caché es re-utilizar información ya usada anteriormente, almacenándola en una memoria más veloz que la memoria del sistema. Esta memoria más rápida es llamada Caché. El Controlador del Caché mantiene los identificadores del contenido del Cache (direcciones de memoria) y los administra siguiendo una estrategia de remplazo LRU (Last Recently Used). De esta forma, cuando el contenido de una dirección de memoria es solicitado por la CPU y no está en el Caché, éste es recuperado de memoria y almacenado en el Caché, para que esté disponible para una posible nueva referencia. Si el Caché estaba lleno al momento de almacenar el nuevo dato, se elige el dato más antiguo que no ha sido utilizado para descartarlo. Es posible contar con dos (o más) niveles de Caché, siendo los principales el Caché primario (L1) y secundario (L2). Las siguientes figuras presentan la estructura genérica de un Caché de primer nivel no integrado y de un caché de segundo nivel no integrado con un cache de primer nivel integrado. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-1 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases R 80386 A M Control Caché 80486 PENTIUM Caché CC L1 SRAM DATA 64 bits R A M Control Caché L2 SRAM La efectividad de un Caché de procesador en relación a su tamaño se presenta en la siguiente tabla: © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-2 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Tamaño Aciertos 1Kb 41% 8 Kb 73% 16Kb 81% 32Kb 86% 64Kb 88% 128Kb 89% En esta tabla se observa que el incremento en la efectividad del Caché no es lineal con un incremento en su tamaño. Aciertos en Pool de Buffers 100% 80% 60% 40% 20% 0% 0 Kb 1Kb 8 Kb 16Kb 32Kb 64Kb 128Kb Tamaño del Buffer © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-3 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Cachés de mayor tamaño producen un incremento marginal en la tasa de aciertos. En general se opta (en el diseño del hardware) por separar los Cachés más grandes en Cachés de Instrucciones y Datos. 8.2 Memoria Principal La memoria sólo es un problema cuando los procesos, más el Kernel, requieren en conjunto más memoria de la disponible. Los sistemas operativos intentan resolver este problema simulando más memoria mediante paginación y swap. La implementación de la memoria virtual varia entre las diferentes versiones de Unix, permaneciendo el esquema de segmentación con paginación invariable. • Segmentos con 3 regiones • Texto (compartido) • Segmentos de datos • • Heap Stack • U-área • • • • © MARIO DROGUETT C. Registros Descriptores de archivos abiertos Registro de accounting Stack del kernel (proceso) ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-4 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Los segmentos de texto mantienen la localización del segmento en memoria secundaria, su localización en memoria principal (si esta residente) y un contador del número de procesos que comparten el segmento. El swap se realiza por segmentos completos (texto, datos o u-área). Los segmentos están formados por páginas. Unix utiliza en general paginación por demanda. Se asignan direcciones al segmento de texto en memoria secundaria, al intentar una referencia al código ocurre un page fault y la página es llevada a memoria. El esquema global es el siguiente: © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-5 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases El segmento (texto, data o u-area) tiene páginas asociadas, a los cuales se les asocia un v-node y un offset dentro de él. • Si la página está en memoria es referenciada. • Si no esta, se puede acceder a ella a través del vnode y el offset. • Si se debe paginar, se actualiza a través del vnode. • El o los swap devices tienen asociado un v-node Con este esquema se pueden tener archivos mapeados en memoria, la tabla de archivos abiertos apunta a v-nodes, a los cuales se asocian páginas © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-6 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases (que pertenecen al proceso) que actúan como buffers del archivo. Estas páginas de buffers no son “distinguidas” por el pager, luego pueden ser page-in, page-out, al leer del archivo, escribir en él abrirlo o cerrarlo. Para implementar shared memory simplemente se comparte el page map del segmento compartido. Ya que todo el I/O es realizado a través del file mapping descrito, el acceso a disco no ocurre hasta que ocurre un faullt en un espacio de direcciones que no esta mapped en ese momento. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-7 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases El algoritmo para resolver el fault es el siguiente: Getpage (unode, offset) { Ubicar y asignar los bloques necesarios check si la página ya existe if(existe) lock and return page else Asignar una nueva página Asignar identidad a la página I/O hacia la nueva página. } Bajo el esquema descrito, el buffer cache es ahora utilizado para acceder a los meta-datos de los filesystem. ( i-nodes, superblock, bloques indirectos, grupos de cilindros, etc.). © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-8 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases 8.3 Estrategias generales de paginación y swap. • En general, los S.O. modernos utilizan paginación y swap para administrar su memoria. • Dado que el swap tiene pésima fama en términos del rendimiento, se distinguen 2 tipos de swap. − De “limpieza” − Desesperado El primero se realiza sobre procesos idle para prevenir que interfieran con los procesos activos. El segundo ocurre cuando la escasés de memoria es extrema. Incluso los procesos activos pueden ser swapped out. El pagin intentará evitar que ocurra este swap desesperado. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-9 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases En BDS y SVR4 el paginador opera de manera similar. El daemon de paginación (pageout o vhand) es despertado cuando la memoria libre baja de lotsfree, siguiendo un esquema de reloj de 2 manecillas. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-10 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Si al paginador examina más de desscan páginas o la memoria disponible pasa de lostsfree el paginador duerme por (1/4 de segundo en SVR4) VHANDR. Si con la paginación la memoria baja de DESFREE (GPGSLO) se inicia el swap de desesperación, el cual se detiene cuando la memoria sube de DESFREE (GPGSLO). * en SVR4 al swapper es sched 8.4 Medición de paginación y swap Demand Pagin => page-in no es (necesariamente) un problema de desempeño. Es importante mantener en mente que si ocurre swapout (“notable”) con una paginación “importante” se puede estar frente a swap desesperado. La forma de medir la paginación en Windows NT ya fue presentada en el capítulo 6, por ejemplo utilizando Performance Monitor: © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-11 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases En unix BSD se tiene vmstat. % vwstat 5 20 procs memory ppage r b w auw free pi po ... En System V tenemos sar % sar -r 00:10:00 freemen freeswp ... % sar -w 00:10:00 swpin/s bswin/s swpot/s bswot/s pswch/s © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-12 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases ... % sar -p 00:10:00 rflt/s pflt/s pgfil/s rclm/s ... % sar -g 00:10:00 pgout/s ppgout/s pgfree/s pgscan/s %s5ipf ... 8.5 Ahorro de memoria Una vez que el sistema llega a una escasés extrema de memoria (sin problemas graves de configuración) la solución más simple es comprar más memoria. En Windows NT es posible ahorrar memoria y recursos de sistema utilizando bajas resolución y número de colores para la pantalla: © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-13 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases En general, los problemas, de configuración se relacionan con las áreas de swap, memoria compartida y buffers. Si la escasez de memoria es “relativamente” pequeña. Podemos tratar de reducir el uso de memoria del kernel y las aplicaciones. Según el S.O. el uso de segmentos compartidos, librerías compartidas, sticky sit, etc. 8.5.1 Segmentos de texto compartidos. El uso de STC reduce los requerimientos de memoria de comandos o aplicaciones que se ejecutan constantemente, al mantener sólo una copia del © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-14 Evaluación y Afinamiento de Sistemas Computacionales código la cual aplicaciones. es compartida Apuntes de Clases por todas las El default del linker de unix (ld) es segmentos compartidos (-n). Si existen aplicaciones que utilicen la opción –N que explicitamente hace que el segmento de texto no sea compartido, se esta estresando innecesariamente la memoria del sistema. 8.5.2 Sticky bit El efecto principal del SB es hacer que el segmento de texto de una aplicación sea copiado al área de swap, y permanezca allí, aún cuando la aplicación termine. El efecto principal del SB es reducir el tiempo de partida de las aplicaciones futuras ya que: • No se copian al swap space nuevamente • En el SS no estan fragmentadas El SB se recomienda para programas pequeños (para no malgastar SS) con una tasa de ejecución alta. En los sistemas con shared text y demand pagin el SB es obsoleto... pero: • Si no hay demand pagin su utilidad es muy alta. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-15 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases • Algunos sistemas con demand pagin de todas maneras copian el shard text en el SS. • El SB se define mediante chmod % chmod 1555 prog. ... y aplicado sobre directorios tiene otro significado. 8.5.3 Librerías compartidas Las versiones modernas de Unix soportan shared libraries. Windows NT soporta el mismo concepto a través de las DLL. En lugar de incluir el código de la biblioteca en el ejecutable, se asignan direcciones de las libs en el espacio de direccionamiento del proceso. El código de la biblioteca puede ser accedido por múltiples aplicaciones, se usa menos memoria, los ejecutables son más pequeños... pero. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-16 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases • En general son más lentas, hasta un 25% al ejecutar código de la biblioteca. • Dependiendo de la implementación, el ejecutable puede ser más grande. 8.5.4 Localidad de referencia en aplicaciones. Un análisis de la LR en el momento de diseño e implementación de una aplicación puede permitir. • Un mejor uso del cache del sistema. • Una paginación más eficiente. 8.5.5 Uso eficiente de la memoria del proceso. • El tamaño del proceso y sus segmentos es asignado en la partida del proceso, luego al optimizar el uso de memoria y su administración. • Uso de estructuras de datos fuera de memoria (con localidad) • Administración de la memoria del proceso. OJO: No se libera hasta que termina • Uso de free lists • Minimizar los mallocs • Asignar memoria en bloques © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-17 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases • Tamaño de los segmentos y la memoria necesaria • El costo de un segmento mayor es muy alto. 8.5.6 Definición de límites • Hard y Soft • En BSD y SVR4 • Define limites para los segmentos de stack, datos y working set de los procesos. Se puede definir en /etc/cshrc % limit [-h] stacksize size //datasize //memory_use Algunas versiones permiten controlar segundos de CPU, tamaño del core-file,etc. también El limite de stack envía un “segmentation violation” SIGSEGV al proceso El límite de datos no le permite pedir más memoria. El límite de working set tranforma al proceso en preferible para el paginador. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-18 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Los procesos pueden intentar subir su límite soft (< hard). OJO que un sistema que no puede correr procesos grandes no es una buena idea... sobre todo si no realiza su trabajo. La mayoría de los SABDR soportan definición de límites para sus procesos internos y de usuarios. 8.5.7 El tamaño de los buffers La utilidad de los buffers es indiscutible, pero consumen memoria que podrían usar los procesos. Versiones anteriores a SVR4 utilizan un área de buffers estática, las SUNOS 4.0 y de SVR4 es dinámica, con un límite para los buffers de metadatos. En sistemas con áreas de buffer estáticas el tamaño de los buffers afecta el rendimiento de memoria virtual y el del I/O a disco. Si el tamaño de los buffers no está definido en los archivos de configuración de sistema (stune NBUF), es determinado en la partida del sistema. Su definición © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-19 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases aparece en general en la partida del sistema y en /var/adm/messages. El tamaño del buffer cache debe ser ajustado con conjunto con el I/O pero... • Si la carga de trabajo es CPU-Bound el BC puede ser reducido hasta un 5% de la memoria disponible. • Si usa “X” reduzca el cache al máximo. • En general, al existir conflicto con I/O favorezca la memoria desde el punto de los buffers (menos buff) En Windows NT podemos analizar el caché mediante Performance Monitor o el Task Manager: © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-20 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Para analizar la efectividad de los buffers en UNIX se usa: sar –b, en BSD ... El tamaño de los BC se cambia re-construyendo el kernel. En BSD hay que cuidar los network buffs (mbuf) mediante netstat –m Ojo que estos no son liberados 8.5.8 Las tablas del kernel y la memoria “Smal is beutifull” ... siempre que no sea demasiado... Se puede ganar 4 o 5 kb. Para chequear se usa: BSD %pstat -T SV %sar –u 8.5.9 Areas de Swap. El area (las areas) de swap son utilizadas por el sistema de memoria virtual para almacenar las páginas “robadas” a los procesos en ejecución. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-21 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Dado que el S.O. no conoce de antemano los requerimientos de memoria de las aplicaciones, éste reserva suficiente cantidad de swap space para almacenar la imagen entera del proceso. La razón principal es evitar dead Locks. En sistemas BSD es poco lo que se puede hacer para controlar el tamaño del area de swap. Para cada disco, la partición de swap (si se usa) es la partición b (particionamiento estándar). Así, existen dos formas de administrar el área de swap. • Comprar más discos y habilitar swap en ellos. • Habilitar swap en los discos que no lo hacen. Para habilitar swap en una partición se debe recrear el kernel (no es necesario un fs en la partición de swap). El archivo de configuración del Kernel para hacer swap en /dev/dsk2b es: Config unix swap on disk 0b and disk 2b /efc/fstab debe reflejar la nueva organización © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-22 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases /dev/disk2b swap swap rw 00 # NFS /etc/rc -> /etc/swapon -a. En SV existe mayor flexibilidad para particionar discos e instalar en ellos áreas de swap. Una vez particionado el disco, se puede iniciar swap en él mediante el comando swap. Este comando debe ser incluido en algunos de los archivos de /etc/rc2.d para activar definitivamente el área de swap. swap -a /dev/dsk/1s2 0 <size -512 byte -blocks> El tamaño de la partición puede ser obtenido del archivo /etc/partitions. Algunas versiones de Unix, y en especial SVR4 soportan “filesystem pagin”, lo cual provee una configuración y administración flexible del área de swap. La idea es utilizar archivos regulares para paginación y swap. Estos archivos pueden ser ubicados en cualquier lugar del sistema de archivos... y no se necesita reconfigurar el kernel. El trade-off esta por el lado de la eficiencia. − Fragmentación © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-23 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases En sistemas tipo BSD # mkfile 20m /u/swapfile # /usr/etc/swapon /u/swapfile En SV el archivo de swap puede ser creado por cualquier medio, agregar al archivo, el comando es: # swap -a filename El tamaño del área de swap total del sistema se estima en 3 a 5 veces el tamaño de la memoria fisica. Para analizar la capacidad disponible: BSD % pstat -s 7201k used 140130k free %/usr/etc/pstat -s 4312k alloc + 2255 res = 6567 used, 230405 av SV %/etc/swap -l Path © MARIO DROGUETT C. dev ESCUELA DE INGENIERÍA lo blocks free P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-24 Evaluación y Afinamiento de Sistemas Computacionales /dev/dsk/0s2 0,2 0 Apuntes de Clases 29984 81712 % /etc/swap -s 0.ok alloc + 15.2m res= 15,2 mused, 86m av. % sar -r IRIX apagado 5.3 10:00:00 freemen freeswap 10:20:00 9979 81712 En general se recomienda que si el área de swap esta más de un 50% usada regularmente, es necesario aumentar su tamaño. Adicionalmente, para un uso óptimo del área de swap se recomienda su distribución a lo largo del sistema de archivos. El S.O. intentará balancear el uso de las diferentes áreas de swap para maximizar el paralelismo del sistema de discos. ...Ahora, no olvidar al controlador de disco... no todos los controladores soportan operaciones simultáneas sobre diferentes discos, en estos casos es mejor un área de swap por controlador. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-25 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases • NOTA: En términos del rendimiento, no se recomienda implementar espacios de swap a través de NFS o RFS. Otra consideración importante, al distribuir áreas de swap, es la utilización de los discos. Utilizando sar-d, iostat o vmstat podemos analizar que discos tienen menor utilización, lo cual los hace candidatos a contener áreas de swap. Las mismas consideraciones se aplican a Windows NT, siendo necesario notar que el área de paginación se define sobre un sistema de archivos y no sobre un “raw device”. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-26 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Es posible distribuir la paginación sobre los discos del sistema en Windows NT utilizando el administrador de configuración de sistema del panel de control. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-27 Evaluación y Afinamiento de Sistemas Computacionales Apuntes de Clases Windows NT define el área de paginación como un archivo en el disco, al cual se asigna un tamaño inicial el cual puede variar dinámicamente hasta un máximo definido (y se considera que el espacio esta reservado para el sistema). Se recomienda para Windows NT un área de paginación total mayor a 3 veces la memoria física del sistema. © MARIO DROGUETT C. ESCUELA DE INGENIERÍA P ONTIFICIA UNIVERSIDAD CATÓLICA DE CHILE 8-28