¿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?
Respuesta
Si usted está realmente interesado en las tablas de páginas, hacer un
$ cat /proc/meminfo | grep PageTables
PageTables: 24496 kB
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. –
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.
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/)
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
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
.
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). –
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. –
- 1. ¿Dónde procesa el kernel de Linux y la limpieza de las conexiones TCP después del proceso?
- 2. Tablas de páginas para caminar de un proceso en Linux
- 3. Cómo obtener el tamaño de página del kernel de Linux programáticamente
- 4. desarrollo del kernel de Linux
- 5. Programación del kernel de Linux
- 6. Cómo calcular la utilización de CPU de un proceso y todos sus procesos secundarios en Linux?
- 7. Cómo comenzar con el desarrollo del kernel de Linux
- 8. ¿Cómo encontrar el tamaño de la memoria virtual y el tamaño de la memoria caché de un sistema Linux?
- 9. cómo calcular el tamaño de la memoria apuntada del puntero?
- 10. Programación del controlador del dispositivo del kernel de Linux
- 11. ¿Cómo puedo calcular el tamaño de un índice de Oracle?
- 12. ¿Cómo calculo el tamaño de la tabla de página?
- 13. Estadísticas del proceso de medición en Linux
- 14. ¿Cómo depurar el kernel de Linux con GDB y QEMU?
- 15. Cómo codificar un módulo kernel de Linux?
- 16. ¿Impresiones de depuración del kernel de Linux?
- 17. Tabla de vinculación del proceso y tabla de compensación global
- 18. Cómo cambiar el tamaño del búfer de E/S kernel
- 19. diferencias de parche entre el kernel de Android y el kernel de vanux Linux
- 20. Cómo crear un nuevo planificador de kernel de Linux
- 21. (Escribiendo kernel) ¿Cómo modifico la tabla de descriptores de interrupción?
- 22. ¿Cómo habilitar la depuración dinámica en el kernel de Linux?
- 23. Determinar el tamaño de la tabla de páginas para la memoria virtual
- 24. ¿Lees la versión del kernel de Linux usando C?
- 25. Símbolo exportado del kernel de Linux
- 26. ¿Hay un límite de tamaño para el módulo kernel en Linux?
- 27. ¿Cómo se determina el tamaño del proceso?
- 28. Nuevo en el desarrollo del kernel/controlador de Linux
- 29. Ubicación del Módulo Kernel de Linux
- 30. Quiero contribuir con el kernel de Linux
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? –
Me refiero a la cantidad de memoria (kernel) que consumen las tablas de páginas de un proceso en particular. –