1 Praca z maszyną wirtualną qemu/kvm

Transkrypt

1 Praca z maszyną wirtualną qemu/kvm
Poniższy zestaw zadań został opracowany w celu poznania podstawowych mechanizmów czasu
rzeczywistego dostępnych w systemie Xenomai. Obejmuje on zapoznanie się ze środowiskiem programistycznym, obsługą zegara i zadań RT, mechanizmami synchronizacji i komunikacji, a także
korzystaniem z przerwań. Cały zestaw poprzedzony jest ćwiczeniem wstępnym wprowadzającym
do maszyn wirtualnych Qemu/KVM i infrastruktury laboratorium 07/C3.
Oryginalne opracowanie: Krzysztof Maziarz, 2011
Aktualizacja: Witold Paluszyński, 2012
1
Praca z maszyną wirtualną qemu/kvm
1.1
Uwagi do pracy w laboratorium
Praca w laboratorium odbywa się na terminalach łączących się z serwerem panamint. Żeby
uzyskać dostęp do maszyny wirtualnej należy się połączyć (z obsługą środowiska graficznego):
$ ssh -X panamint
1.2
Praca w trybie okienkowym
W celu umożliwienia bezpiecznego programowania i testowania w środowisku Xenomai został
stworzony obraz dysku dla maszyny wirtualnej QEMU (KVM). Zgodnie z poleceniami prowadzącego, przekopiuj podany plik obrazu dysku we wskazane miejsce, z nazwą identyfikującą Ciebie
jako właściciela maszyny wirtualnej.
Aby uruchomić maszynę w trybie okienkowym z posiadanego obrazu dysku z zainstalowanym
systemem, zwykle wystarczy wykonać:
$ kvm -hda xenomai.qcow2
Jednak czasami, ze względu na niezgodność obsługi klawiatury przez systemy sieciowe, przez
które łączymy się z maszyną gospodarzem (panamintem), do polecenia uruchomienia kvm często
trzeba dodać opcję -k en-us.
Nastąpi uruchomienie na maszynie wirtualnej systemu Linux Xenomai, do którego można
zalogować się jako domyślny użytkownik:
user:
user
password: pass
1
Ponieważ jest to Twoja własna maszyna, zmień hasło użytkownika user na swoje indywidualne,
i zapamiętaj to hasło do dalszego korzystania z maszyny.
Poleceniem startx można uruchomić środowisko graficzne X Window i menedżer okien Fluxbox. Aby aktywować obsługę myszy w emulatorze wystarczy kliknąć w jego okno. Kombinacja
klawiszy <ctrl> + <alt> przywraca mysz gospodarzowi. Wypróbuj te mechanizmy.
Na maszynie wirtualnej zainstalowane są domyślnie edytory vim, emacs i nano. Uruchom
i przećwicz wybrany edytor, tak aby swobodnie posługiwać się nim w trakcie wykonywania
dalszych ćwiczeń.
1.3
Kopiowanie plików z i do maszyny wirtualnej
Program scp służy do kopiowania plików, jednak w domyślnej konfiguracji może być użyte jedynie
z wewnątrz maszyny (pliki mogą być kopiowane w obu kierunkach).
1.4
Opcje zaawansowane — port szeregowy
Warto jednak dodać kilka opcji, które mogą okazać się przydatne w pracy z systemem. Jedną
z takich opcji jest przekierowanie wyjścia wirtualnego portu szeregowego. W praktyce oznacza
to, że w przypadku zawieszenia systemu (Kernel Panic) będzie można odczytać ostatnie logi
systemu, czyli najprawdopodobniej poznać przyczynę awarii.
$ kvm -hda xenomai.qcow2 -serial /dev/stdout
To spowoduje bezpośrednie przekierowanie na terminal, można również wysłać logi do pliku
-serial file:log.txt.
1.5
Przekierowanie portów sieciowych
Kolejną istotną sprawą jest komunikacja z gospodarzem, czyli komputerem na którym maszyna
działa. Najwygodniej jest to zrobić poprzez przekierowanie pakietów sieciowych i połączenie np.
poprzez ssh. W tym celu należy uruchomić maszynę w podany sposób:
$ kvm -hda xenomai.qcow2 -redir tcp:5022::22
W ten sposób uruchomiona maszyna wirtualna tworzy port sieciowy w systemie gospodarza,
do którego podłączony jest serwer połączeń ssh w systemie gościa.
Pozwala ol łączyć się z systemem na maszynie za pomocą polecenia:
2
$ ssh user@localhost -p 5022
W podobny sposób można kopiować pliki poleceniem scp do i z systemu gościa, ale tym razem
inicjując transfery z maszyny gospodarza.
Uwaga: numer portu 5022 jest przykładem indywidualnie wybranego numeru portu.
Należy wybrać jakiś własny numer portu, różny od numerów użytych przez innych
użytkowników systemu gospodarza. Gdyby okazało się, że ktoś inny w tym samym
momencie „zajął” już nasz wybrany port sieciowy na panamincie, to polecenie kvm z
takim przekierowaniem nie uda się, i otrzymamy komunikat o błędzie. Należy wtedy
wybrać inny numer przekierowania portu sieciowego.
Przekierowany numer portu pozostaje w użyciu i jest zajęty przez cały czas uruchomienia maszyny wirtualnej. Przy kolejnym uruchomieniu maszyny można wybrać
inny numer.
1.6
Uruchamianie w trybie demona
kvm -k en-us -net nic -net user -vga cirrus -hda xenomai.qcow2 \
-redir tcp:5022::22 -nographic -daemonize
1.7
Opcje zaawansowane — montowanie systemu plików
Wygodnie jest również zamontować system plików z maszyny gościa, co umożliwi edycję źródeł programów na maszynie gospodarza. Poniższe polecenie zamontuje katalog /home/user/ w
utworzonym katalogu np. ~/xenomaifs/. Należy jednak pamiętać, że kompilacja musi się odbyć
bezpośrednio na maszynie z Xenomai.
$ sshfs user@localhost:/home/user/ ~/xenomaifs/ -p 5022::22
Żeby uzyskać dostęp do połączenia z internetem na maszynie gościa należy dodać opcje
-net nic -net user. Ostatecznie polecenie uruchomienia emulatora z opisanymi opcjami wygląda następująco:
$ kvm -net nic -net user -serial /dev/stdout -redir tcp:5022::22 \
-hda xenomai.qcow2
3
1.8
Zadanie domowe
Z zewnętrznego komputera połącz się z panamintem przez ssh. Nie korzystaj z systemu okienkowego (nie używaj opcji -X ani -Y programu ssh, a zamiast nich użyj opcji -x (małe x)). W
systemie Windows konieczne będzie skorzystanie z programu takiego jak putty. Aby wyłączyć
połączenie systemu okienkowego w systemie Windows wystarczy nieuruchamiać żadnego serwera
ekranowego (jeśli nie wiesz co to jest to najpewniej nie masz go uruchomionego). Można również
w ustawieniach programu putty znaleźć ustawienia tuneli, i wyłączyć (dezaktywować) tunel X
Window (port 6000).
W tym momencie praca na zdalnym komputerze będzie możliwa tylko w trybie tekstowym. Jest to ustawienie konieczne tylko na potrzeby tego zadania. W późniejszych zadaniach możesz włączać lub wyłączać system okienkowy, w zależności od
potrzeby. Jednak pracując zdalnie, często praca w trybie okienkowym jest niemożliwa ze względu na jakość połączenia internetowego. Dlatego czasami konieczne jest
łączenie się i praca w trybie tekstowym
Po połączeniu się z panamintem, uruchom swoją maszynę wirtualną w trybie demona, z
przekierowaniem portu ssh (22), używając wcześniej przedstawionych poleceń z przekierowaniem
portów sieciowych.
Następnie wejdź do maszyny i sprawdź, że możesz na niej pracować, korzystając wyłącznie z
programów tekstowych (input/output). Rozłącz się z maszyną wirtualną nie wyłączając jej, rozłącz się z panamintem, a następnie połącz się z nim ponownie, i ponownie wejdź do uruchomionej
wcześniej maszyny, sprawdzając, że nadal możesz na niej pracować.
Ponownie przećwicz kopiowanie plików w obie strony (z maszyny na panaminta i w drugą
stronę), i na dwa sposoby, najpierw inicjując kopiowanie z wewnątrz maszyny, a następnie inicjując kopiowanie z panaminta korzystając z wybranego przekierowanego numeru portu.
4
2
Zapoznanie się ze środowiskiem Xenomai.
Wszystkie ćwiczenia oraz programy opracowane zostały w Xenomai w wersji 2.5.6. Dlatego też
odwołania do dokumentacji dotyczą dokumentu pod adresem:
http://www.xenomai.org/documentation/xenomai-2.5/html/api/
Jest to oficjalna dokumentacja projektu, która stanowi podstawowy materiał do nauki. Dodatkowo używany będzie tylko interfejs natywny (Native Xenomai API). Aby uzyskać do niego
dostęp należy po wejściu na stronę dokumentacji wybrać kolejno Modules/ i Native Xenomai API/ z menu znajdującego się po lewej stronie. Inne źródła informacji na temat Xenomai
podane są poniżej:
http://www.xenomai.org/documentation/xenomai-2.5/pdf/native-api.pdf
http://git.xenomai.org/?p=xenomai-2.5.git;a=tree;f=include/native
Dokumentacja dostępna jest również lokalnie w katalogu:
/usr/xenomai/share/doc/xenomai/
Źródła (pliki nagłówkowe) znajdują się natomiast w katalogu:
/usr/xenomai/include/native/
W celu sprawdzenia poprawności działania systemu i jego komponentów Xenomai dostarcza zbiór
kilku programów konfiguracyjnych oraz testowych. Aby upewnić się co do wersji zainstalowanego
systemu należy wykonać polecenie:
$ xeno-config --version
2.5.6
Program ten najbardziej jest jednak przydatny na etapie kompilacji własnych programów. „Pamięta” prawidłowe ścieżki do bibliotek, plików nagłówkowych, oraz niezbędne flagi. Dodatkowo
przechowuje również nazwę zalecanego kompilatora. Środowisko Xenomai oferuje szereg interfejsów programistycznych, z których jeden należy wybrać i wskazać w czasie kompilacji. Wszystkie
prezentowane tutaj ćwiczenia i programy zostały wykonane przy użyciu interfejsu „native”. Flagi
CFLAGS i LDFLAGS trzeba sparametryzować nazwą interfejsu, którego chcemy użyć. Polecenie wypisujące flagi dla kompilatora i linkera:
$ /usr/xenomai/bin/xeno-config --skin=native --cflags
-I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -Wall -pipe -D__XENO__
$ /usr/xenomai/bin/xeno-config --skin=native --ldflags
-lnative -L/usr/xenomai/lib -lxenomai -lpthread
5
Informacje o systemie, jego zasobach, wątkach oraz wszystkich obiektach utworzonych przez
Xenomai znajdują się w postaci plików i katalogów w systemie plików /proc, a dokładnie w
/proc/xenomai/. Pliki sched i stat zawierają informacje o uruchomionych procesach RT.
Wpisując polecenie cat sched można zauważyć, że uruchomiony jest jeden proces o nazwie
ROOT/0 o priorytecie -1. Jest to Linux. Wydając polecenie cat stat wyświetlone zostaną dodatkowe informacje o nim, takie jak zużycie procesora. Uruchamiając teraz jeden z programów
testowych Xenomai można zauważyć zmiany w plikach w /proc/xenomai/ spowodowane aktywnością systemu. Program switchtest służy do testowania zmian kontekstu wykonywanych
zadań. W pierwszym terminalu należy wpisać:
$ /usr/xenomai/bin/switchtest -s50 rtup rtup
Po wydaniu tego polecenia naturalne będzie zauważalne spowolnienie reakcji systemu. Spowodowane jest to zamierzonym dodatkowym obciążeniem dodanym parametrem -s50. W drugim
terminalu można sprawdzić zawartość plików sched i stat. Jak widać dodane zostały 3 nowe
wątki, a proces ROOT/0 nie stanowi już 99czasu procesora.
Polecenie $ dmesg wyświetli informacje o wszystkich utworzonych i usuniętych obiektach. W
przypadku błędów pojawią się tam również ich kody. Natomiast kody błędów zwracanych przez
funkcje natywnego API można rozkodować na podstawie plików:
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
Kompilacja i uruchomienie programu. Zapoznaj się z plikiem src/ex1/ex1_main.c. W
pliku znajdują się komentarze opisujące wszystkie wykonywane instrukcje. Następnie skompiluj
go i uruchom według podanych niżej poleceń:
$ export XCFG=/usr/xenomai/bin/xeno-config
$ export CFLAGS=‘$XCFG --skin=native --cflags‘
$ export LDFLAGS=‘$XCFG --skin=native --ldflags‘
$ gcc $CFLAGS $LDFLAGS -lrtdk ex0_main.c -o main
$ ./main
Program zawiera umyślnie umieszczoną instrukcję, która powoduje niepożądane opóźnienia printf. Spowodowane to jest znajdującymi się w niej wywołaniami systemowymi, które prowadzą
do przełączenia trybu wykonywania. Ten skok oznacza, że Xenomai nadaje Linuksowi najwyższy
6
priorytet i wykonuje jego procesy, po czym wraca do normalnego trybu. Program po uruchomieniu wyświetla 3 informacje: nazwę zadania, liczbę przełączeń trybu, oraz czasy wykonywania
zadania. Jak widać licznik przełączeń wskazuje na 1 z powodu znajdującego się printf. Uruchom
program kilka razy i zwróć uwagę na czas wykonywania. Następnie usuń (zakomentuj) printf
i uruchom program ponownie kilka razy. Można zauważyć, że czasy wykonywania wyraźnie się
zmniejszyły.
Korzystając z dokumentacji (źródła podane na początku) sprawdź jakie jeszcze informacje
można
odczytać
z
RT_TASK_INFO
(Task management services / rt_task_inquire).
7
oraz
wypisz
je

Podobne dokumenty