]> git.llucax.com Git - personal/documentos.git/blob - charla_mm/mm.mgp
charla_scm: Convertir ISO-8859-1 a UTF-8
[personal/documentos.git] / charla_mm / mm.mgp
1 %include "common.mgp"
2 %%
3 %page
4 %nodefault
5 %center, size 7, font "standard", back "white", fore "black"
6
7 Manejo de memoria y Valgrind
8 %size 4
9
10
11 %bar "gray" 5 10 80
12
13 Alberto Bertogli (albertito@gmail.com)
14 Leandro Lucarella (llucare@fi.uba.ar)
15
16 LUGFI
17
18 11 de Mayo de 2005
19
20
21 %page
22
23 De que vamos a hablar
24
25         Memoria fisica
26         Memoria virtual (VM)
27         MM en aplicaciones
28         Valgrind
29         Ejemplos
30
31 %page
32
33 Mini repaso
34
35         Relación entre el procesador y la memoria
36         Accesos a memoria desde assembler
37         Sistema operativo y múltiples procesos
38
39 %page
40
41 Memoria física
42
43         Direcciones físicas
44         Problemas y restricciones
45
46 %page
47
48 VM - Que nos permite I
49
50         Virtualización de recursos
51         Aislamiento de la información
52         Aislamiento de fallas
53         Trucos locos (más adelante)
54
55 %page
56
57 VM - Como funciona
58
59         Páginas de memoria
60         MMU
61         Tablas de traducción (page tables)
62         Permisos y controles de acceso
63         Flags útiles (Dirty, Accessed, Present, etc.)
64         TLB
65         Page faults
66
67 %page
68
69 VM - Que nos permite II
70
71         Multiproceso e hilos
72         Control de acceso (r, w, x)
73         Swap
74         COW
75         Overcommit / Demand paging
76         mmap()
77         Cache de disco
78         Shared memory
79
80 %page
81
82 MM en aplicaciones
83
84         Stack
85         malloc()/free()
86         Patrones de acceso
87         Fragmentación de memoria
88         Leaks
89         Accesos a memoria no inicializada
90
91 %page
92
93 Valgrind - lo qué?
94
95         Framework para hacer herramientas
96         Herramientas para _supervisar_ programas
97                 Profilers
98                 Detectores de errores (memoria, threads)
99                 Visualización / comprensión / análisis
100         valgrind core + skin = herramienta de supervisión
101
102 %page
103
104 Valgrind - Ventajas
105
106         Traducción binaria dinámica (LD_PRELOAD)
107                 No require recompilar
108                 No require relinkear
109                 No necesita el código fuente
110                 Supervisa _todo_ el código en userspace (programa + bibliotecas)
111                 Tiene forma de supervisar parcialmente incluso código manejado por el kernel (ej: señales)
112
113 %page
114
115 Valgrind - Funcionamiento
116
117         LD_PRELOAD de valgrind.so
118         Trap al CPU y toma el control
119         El programa corre en un CPU simulado
120         El programa no se entera
121         valgrind compila el código via JIT x86-x86 (u otras)
122         El skin instrumenta la supervisión
123         No se ejecuta código original del programa, sólo el código compilado (supervisado)
124
125 %page
126
127 Valgrind - Skins actuales
128
129         Profiling
130                 Massif: heap profiler
131                 Cachegrind: cache profiler
132                 Callgrind: como Cachegrind con información del grafo de llamadas
133         Debug
134                 Memcheck: chequeo de memoria
135                         Accesos a memoria inválidos
136                         Uso peligroso de memoria no inicializada
137                         Pérdidas de memoria
138                         Liberación de memoria inválida (no heap, ya liberada, etc.)
139                         Manipulación de memoria superpuesta (memcpy y amigos)
140                         Pasaje de áreas de memoria inválidas a system calls
141                         Acceso a áreas inválidas del stack
142                 Helgrind: chequeos de concurrencia (pthreads)
143                         Ayuda a encontrar condiciones de carrera
144                         Relativamente experimental
145         Visualización / Análisis
146                 Kcachegrind: No es un skin (usa Callgrind)
147
148 %page
149
150 Valgrind - Invocacion
151
152         Invocación del programa normal: ./programa argumento1
153         Invocación con valgrind: valgrind --tool=[skin]
154 %pause
155
156         Basta de Cháchara! Vamos a los ejemplos...
157