sobota, 28 marca 2009

kernel: PAE vs. x86_64

Jakiś czas temu, na liście pld-devel-pl@lists.pld-linux.org zagościła dyskusja, o domyślnym włączeniu obsługi PAE (Physical Address Extension) w kernelu dystrybucyjnym w Th. Pomijając fakt, że wiele modeli procesorów nie obsługuje PAE, to pewne wątpliwości wprowadza fakt, że obłsuga PAE spowalnia działanie pamięci, postanowiłem więc zrobić mały test.

W maszynie testowej siedzi Intel C2D E8400, 4GiB RAM-u, kernel 2.6.28.9. Procedura testowa:

- hdparm -T /dev/sda
- pomiar czasu obliczania sumy sha512 dla pliku o wielkości 431MiB
- program nbench-byte-2.2.2

i686 + PAE

- hdparm: 7056MB/s
- sha512sum: 18,3s
- nbench:
* MEMORY INDEX: 18,7
* INTEGER INDEX: 20,6
* FLOATING-POINT INDEX: 38,8

x86_64

- hdparm: 7625MB/s
- sha512sum: 16,9s
- nbench:
* MEMORY INDEX: 18,7
* INTEGER INDEX: 20,5
* FLOATING-POINT INDEX: 38,9

Różnica w szybkości działania pamięci zmierzona programem hdparm wynosi ~8% na korzyść kernela 64bit, co jest niemałą wartością. Widać to też dla programu sha512sum. W teście nbench różnica jest minimalna, jednak biorąc pod uwagę, że program ten używa bardzo mało pamięci, więc cache procesora niweluje różnicę w szybkości.

Nie ma sensu używania opcji PAE, zwłaszcza jeśli samemu musimy budować kernel, lepiej już użyć kernela z archa x68_64, zwłaszcza że w PLD jest to dosyć proste. Zaczynamy od dodania do pliku do pliku /etc/rpm/platform wiersza:
x86_64-[^-]*-[Ll]inux(-gnu)?

teraz dodajemy źródło do Poldka, które nazwiemy sobie th64, do pliku /etc/poldek/repos.d/pld.conf dodajemy następujące wiersze:
[source]
type = %{_type}
name = th64
path = %{_prefix}/PLD/x86_64/RPMS/
auto = no

Uruchamiany Poldka:
$ poldek -n th64

Teraz tylko pozostaje przeinstalować kernel
install -F kernel* --reinstall

i reboot

6 komentarzy:

Unknown pisze...

Erm, a nie lepiej porównać kernel i686 z PAE i bez PAE? W końcu wiadomo, że jak maszyna x86_64 to lepiej postawić takowy kernel. AFAIR cała dyskusja toczyła się na temat ile procka szlag trafi po włączeniu PAE...

qwiat pisze...

W dyskusji chodziło o kernel dla systemów, które mają obsługiwać maszyny z dużą ilością RAM-u.

Chociaż tego nie napisałem, to testowałem też kernel i686 bez PAE, ale wydajność jest identyczna jak tego x86_64

Marcin Rybak pisze...

hmmm... a gdy ktoś ma 4/8/32GB... ramu i procek który nie potrafi 64bitów? to pae jest niezbedne

Qermit pisze...

hehe ciekawi mnie co tak naprawdę zmierzyłeś mistrzu.
Radził bym:
- zrobić serię testów
- hmm ten plik to był na dysku? czy może na ramie siedział
- ale najważniejsze - nie porównywać wina z wódką.

qwiat pisze...

>Qermit

- plik był w cache RAM-u
- zrobiłem serię testów, wybrałem najlepsze wyniki
- dlaczego nie porównywać? uważam że jak najbardziej, czytałeś w ogóle dyskusję na liście devel? do niej się odnoszę.

Anonimowy pisze...

Mam do czynienia z kompem z P4 z jednej z pierwszych serii - tylko 32bit i teraz po włożeniu 3GB RAM zastanawiam się czy warto włączyć PAE. W tej chwili Linux na 32 bitach (bez PAE) adresuje mi 2773344kB (~2.64GB). Zastanawia mnie czy włączenie PAE i uzyskana w ten sposób większa ilość pamięci zwiększy na tyle wydajność aby zniwelować efekt spowolnienia przez PAE. Komputer to stacja z KDE 4.3.x (z kilkoma dodatkowymi usługami), w którym loguje się jednocześnie dwóch użytkowników (multiseat). Obecnie zajętość RAM raczej nie przekracza 1.5-2GB, czasami trochę więcej ze względu na cache.