2009-05-12 10 views
5

W jaki sposób mogę się dowiedzieć, jak duża jest tabela stron procesu systemu Linux, wraz z innymi rachunkami procesów o zmiennej wielkości?Jak znaleźć lub obliczyć rozmiar tabeli stron procesu Linux i inne metody księgowania jądra?

+0

Nie jestem pewien, aby zrozumieć twoje pytanie: Rozmiar tabeli strony, AFAIK, nie jest procesem zależnym od tej samej platformy (cóż, może się mylę, nie jestem guru linux ...). Przy okazji zastanawiam się: czy naprawdę masz na myśli rozmiar strony * tabeli *? Czy masz na myśli zamiast tego * rozmiar strony *, ponieważ jest on coraz częściej potrzebny programistom IMHO? –

+0

Mam na myśli ilość pamięci (jądra) zużywanej przez tabelę stron danego procesu. –

Odpowiedz

1

Nie jestem pewien co do Linuksa, ale większość wariantów UNIX zapewnia w tym celu sysctl(3). Istnieje również narzędzie wiersza poleceń sysctl(8).

+0

Co pozwala Unixowi na czytanie stronicowania (w przeciwieństwie do stronicowania) za pośrednictwem sysctl? – eckes

5

Jeśli jesteś naprawdę zainteresowany w tabelach stronie, zrobić

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

Jest to przydatne, ale muszę się dowiedzieć, czy ten rozmiar jest "zbyt duży". Jeśli istnieje ograniczenie dla tego rozmiaru, które wywoła fork(), aby zawieść, i jak blisko tego ograniczenia jest jądro. Idealnie byłoby również dowiedzieć się, jaka część tego rozmiaru PageTables jest używana przez konkretny proces, tak, że gdy fork() spróbuje skopiować tabele dla tego procesu, limit zostanie przekroczony. –

1

Hmmm, z powrotem w Ye Olden Tymes, zwykliśmy nazywać nlist (3), aby otrzymać adres systemu dla danych Byliśmy zainteresowani w, a następnie otwórz/dev/kmem, wyszukaj adres, a następnie odczytaj dane. Nie wiem, czy to działa w Linuksie, ale warto byłoby wpisać "man 3 nlist" i zobaczyć, co wróci.

1

Powinieneś opisać swój problem, a nie pytać o szczegóły. Jeśli za dużo rozwidlasz (szczególnie w przypadku procesu, który ma dużą przestrzeń adresową) są wszelkiego rodzaju rzeczy, które idą źle (w tym z pamięci), trafienie maksymalnego rozmiaru strony jest IMHO nie realistycznym problemem.

Thad powiedział, że byłbym również zainteresowany przeczytaniem udziału procesu w Linux.

Jako prostą regułę można jednak przyjąć, że każdy proces powoduje udział w działce, który jest równy jego wirtualnemu rozmiarowi, na przykład 6 bajtów dla każdej strony. Na przykład, jeśli masz bazę danych Oracle z 8 GB SGA i 500 procesami, które ją udostępniają, każdy proces będzie używał stronicowania o wielkości 14 MB, co daje 7 GB stron + 8 GB SGA. (przykładowe numery od 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 BTW, niektóre numery z ogromnymi stronami teraz: http://kevinclosson.wordpress.com/2009/07/28/quantifying-hugepages-memory-savings-with-oracle-database-11g/ – eckes

7

Od wersji 2.6.10, ilość pamięci wykorzystywana przez tabele stron w jednym procesie została ujawniona za pomocą pola VmPTE z /proc/<pid>/status.

+0

Wydaje się działać dobrze , z wyjątkiem sytuacji, gdy przydzielam wielkie strony przy pomocy mmap: podana wielkość jest małą stałą, niezależnie od wielkości przydziału (jądro 4.4.0-77). –

+0

Wartość zgłaszana przez pole VmPMD wydaje się być w porządku, rośnie liniowo wraz z wielkością alokacji, nawet przy dużych stronach. Ale myślę, że nie uwzględnia on całej tabeli stron (mężczyzna mówi "Rozmiar tabel stron drugiego poziomu"). Podczas eksperymentowania ze stronami klasycznymi ta wartość jest około 500 razy mniejsza niż VmPTE. –

Powiązane problemy