Ostatnio mierzyłem się z problemem profilowania naszego serwera komunikatora GG. Nie było to proste i pomyślałem, że warto się podzielić z Wami wiedzą, którą zdobyłem.
Zacząłem od użycia gprofa, ale okazał się totalnym niewypałem. Nie udało mi się go zmusić do sensownego działania. Zdecydowanie nie polecam i nie będę się więcej na jego temat rozpisywał
Następnie zmierzyłem się z oprofilem i tu udało się osiągnąć cel. Aczkolwiek na Xenie (systemie dla wirtualizowania maszyn - dla tych, co nie wiedzą) nie działa funkcja generowania callstacku. Pisałem do developerów Xena i Xen-OProfile'a i nie dostałem żadnej odpowiedzi. W necie też nie udało mi się nic znaleźć, więc strzelam, że to nie działa. Jeśli się mylę, to byłbym bardzo wdzięczny za pomoc, jak tą opcję zmusić do działania na Xenie.
Poniżej przedstawiam instrukcję, jak włączyć profilowanie na Xenowych systemach.
Najpierw na XenHoście i XenGuestach, które chcemy profilować trzeba skompilować i zainstalować OProfile. Należy wykonać poniższe kroki:
- Instalujemy paczki debianowe 'gcc', 'g++', 'libopt-dev' i 'binutils-dev'.
- Ściągamy źródła OProfile'a ze strony http://oprofile.sourceforge.net
- Ściągamy łatkę Xenową dla OProfile'a ze strony http://xenoprof.sourceforge.net
- Aplikujemy łatkę na źródła (za pomocą komendy w stylu patch -p1 < oprofile-0.9.5-xen.patch).
- Następnie właściwa kompilacja i instalacja: ./configure --with-kernel-support; make; make install
- Na koniec trzeba (być może nie jest to obowiązkowe, ale nie testowałem) ściągnąć plik z symbolami kernela i wgrać do /boot (u mnie był to plik xen-3.2-1-amd64-syms).
Teraz możemy już włączyć profilowanie (kolejność ma znaczenie):
- Na XenHoście wykonujemy: opcontrol --start-daemon --xen=/boot/xen-3.2-1-amd64-syms --no-vmlinux --active-domains= <oddzielone przecinkiem numery domen xena, które chcemy profilować - zwracane przez 'xm li'>
- Na XenGuestach wykonujemy: opcontrol --start --xen=/boot/xen-3.2-1-amd64-syms --no-vmlinux
- Na XenHoście wykonujemy: opcontrol --start
- Od tej chwili powinniśmy mięć dostępne wyniki profilowania na hoście i na guestach.
Nie będę się rozpisywał na temat obsługi oprofile, bo od tego jest jego dokumentacja
Powyższa instrukcja ma tylko pomóc włączyć OProfile na Xenie. Poniżej jeszcze kilka uwag:
- OProfile potrafi się zwiesić i wtedy nie pomogało mu nic oprócz restartu całego Xena (występuje wtedy błąd dostępu do filesystemu OProfile i żaden opcontrol --deinit nie pomaga).
- Warto sobie ściągnąć bibliotekę libc z symbolami i wgrać do /lib - potem potrzebowałem restartu Xena, żeby to zaczęło działać.
- OProfile potrafi się wyłączyć (nie jestem pewien, czy na jego stabilność nie miało wpływu wgranie libc z symbolami) i trzeba go wtedy znów włączyć przez --start.
Poniżej zamieszczam jeszcze skrypt, który jest odpalany co minutę z crona, żeby zbierać wyniki profilowania:
# na wypadek padu
/usr/local/bin/opcontrol --start --xen=/boot/xen-3.2-1-amd64-syms --no-vmlinux
date >>/var/log/op_sys_rep.txt
/usr/local/bin/opreport >>/var/log/op_sys_rep.txt
echo -e "\n\n\n" >>/var/log/op_sys_rep.txt
date >>/var/log/op_symbol_rep.txt
/usr/local/bin/opreport -l | head -60 >>/var/log/op_symbol_rep.txt
echo -e "\n\n\n" >>/var/log/op_symbol_rep.txt
/usr/local/bin/opcontrol --reset
I to by było na tyle. Za chwilę dodam jeszcze post, czemu potrzebowaliśmy sprofilowania naszego serwera i co ciekawego z tego wynikło
Autor gleszczynski, 10/11/2010, w Gadu-Gadu
Ostatnie Komentarze