2009-05-12 6 views
5

¿Cómo puedo averiguar qué tan grande es la tabla de páginas de un proceso Linux, junto con cualquier otra contabilidad de proceso de tamaño variable?¿Cómo encontrar o calcular el tamaño de la tabla de páginas de un proceso de Linux y otra contabilidad del kernel?

+0

No estoy seguro de entender su pregunta: el tamaño de la tabla de página, AFAIK, no depende del proceso en la misma plataforma (bueno, puedo estar equivocado, no soy un gurú de Linux ...). Por cierto, me pregunto: ¿realmente te refieres a la página * tabla * tamaño? ¿O te refieres en cambio al * tamaño de página *, ya que es más a menudo necesario para los programadores en mi humilde opinión? –

+0

Me refiero a la cantidad de memoria (kernel) que consumen las tablas de páginas de un proceso en particular. –

Respuesta

1

No estoy seguro acerca de Linux, pero la mayoría de las variantes de UNIX proporcionan sysctl(3) para este propósito. También está la utilidad de línea de comandos sysctl(8).

+0

¿Qué Unix le permite leer el tamaño de la página (opuesto al tamaño de página) a través de sysctl? – eckes

5

Si usted está realmente interesado en las tablas de páginas, hacer un

$ cat /proc/meminfo | grep PageTables 
PageTables:  24496 kB 
+1

Esto es útil, pero necesito averiguar si este tamaño es "demasiado grande". Si hay un límite para este tamaño que llamaría fork() a fallar, y qué tan cerca de ese límite está el kernel. Idealmente, también necesitaría averiguar qué porción de ese tamaño de PageTables está siendo utilizada por un proceso específico, de modo que cuando fork() intente copiar las tablas para ese proceso, el límite se excedería. –

1

Hmmm, de vuelta en YE Olden Tymes, que solíamos llamar nlist (3) para obtener la dirección del sistema para los datos que se mostraron interesados en, luego abra/dev/kmem, busque la dirección, luego lea los datos. No estoy seguro de si esto funciona en Linux, pero podría valer la pena escribir "man 3 nlist" y ver qué devuelve.

1

Debe describir su problema y no preguntar sobre los detalles. Si bifurca demasiado (especialmente con un proceso que tiene un gran espacio de direcciones) hay todo tipo de cosas que van mal (incluida la memoria), golpear un tamaño máximo de la tabla de páginas no es en absoluto un problema realista.

Thad dijo, también me gustaría leer un proceso de tabla de páginas compartir en Linux.

Como regla general, puede suponer que cada proceso ocupa una parte en la tabla de páginas que es igual a su tamaño virtual, por ejemplo 6 bytes para cada página. Entonces, por ejemplo, si tiene una Base de Datos Oracle con 8GB SGA y 500 Procesos que la comparten, cada uno de los procesos usará una tabla de 14MB, lo que da como resultado 7GB de tablas de páginas + 8 GB de SGA. (números de muestra desde http://kevinclosson.wordpress.com/2009/07/25/little-things-doth-crabby-make-%E2%80%93-part-ix-sometimes-you-have-to-really-really-want-your-hugepages/)

+0

Oh, por cierto, algunos números con páginas enormes ahora: http://kevinclosson.wordpress.com/2009/07/28/quantifying-hugepages-memory-savings-with-oracle-database-11g/ – eckes

7

Desde Linux 2.6.10, la cantidad de memoria utilizada por las tablas de página de un solo proceso ha sido expuesta a través del campo VmPTE de /proc/<pid>/status.

+0

Parece que funciona bien , excepto cuando asigno páginas enormes con mmap: el tamaño informado es una constante pequeña, sin importar el tamaño de la asignación (kernel 4.4.0-77). –

+0

El valor informado por el campo VmPMD parece correcto, crece linealmente con el tamaño de la asignación, incluso con páginas grandes. Pero no creo que represente toda la tabla de la página (el hombre dice "Tamaño de las tablas de páginas de segundo nivel"). Al experimentar con páginas clásicas, este valor es aproximadamente 500 veces menor que VmPTE. –

Cuestiones relacionadas