Kontrola i analiza zdarzeń w czasie rzeczywistym jest krytyczna dla sukcesu urządzeń wieloordzeniowych, jednak ich uwidocznienie jest trudne przy użyciu tradycyjnych narzędzi debugowania. Nowy typ narzędzi spedjalnie stworzonych w celu ułatwienia wielordzeniowych analiz, zapewnia nowe możliwości.
System pracy w czasie rzeczywistym musi zawsze szybko reagować na zewnętrzne i wewnętrzne żądania. Gdy system wykorzystuje architekturę wielordzeniową, prędkość i liczba reakcji gwałtownie rośnie. Chociaż poprawia to wydajność systemu, to komplikuje to kolejność zdarzeń aplikacji, ponieważ system wielordzeniowy może odbywać się jednocześnie na kilku niezależnych procesorach, a nie sekwencyjnie przez jeden procesor.
Dla programistów systemów wielordzeniowych wzrost złożoności zarządzania liczbą zdarzeń i ich jednoczesności jest to bardzo duż4e wyzwanie i rośnie wykładniczo względem ilości rdzeni. Rozpoznanie przyczyny awarii systemu wielordzeniowego lub jego nieskuteczności jest o wiele trudniejsze niż systemu z jednym procesorem. W obecnych narzędziach dostępnych dla systemów wielordzeniowych programiści korzystają z prymitywnych technik instrukcji print, które przekazują mnóstwo poszatkowanych danych o wydarzeniach, które miały miejsce. Programista musi zebrać w całość i określić sens tych danych dla systemu i procesu, który często wymaga powtórnej komendy w celu uzyskania większej szczegółowości danych i powtórzenia procesu.
Aby skutecznie rozwikłać skomplikowaną sekwencję operacji systemów wielordzeniowych, programiści potrzebują natychmiastowego podglądu, co umożliwi im zbadanie działań systemu w obszarze zainteresowania. Poniżej pokazano zrzut ekranu narzędzia do kontroli systemu wielordzeniowego, który pokazuje co sie dzieje w danym okresie czasu. Graficzna analiza wszystkich zdarzeń systemowych jest wyświetlana w jednym terminalu i jest pogrupowane przez procesor.
Tradycyjne podejście do analizy zdarzeń systemowych
Programiści zadań wykonywanych w czasie rzeczywistym dawno zrozumieli znaczenie zachowania systemu. Konwencjonalne podejście rozwiązuje te problemy poprzez generowanie danych w oparciu o zachowanie systemu, poprzez przełączanie pinów I/O lub ustawienie odpowiedniej zmiennej.
Wstawianie takich odpowiedzi wymaga dużo czasu, zwłaszcza że kod często nie działa tak, jak spodziewał się programista za pierwszym razem, a wynik musi być pozbawiony błędów. Część aplikacji musi być sprawdzana, część kodu musi być usunięta, a usunięcie części kodu powoduje konieczność ponownego sprawdzenia poprawności działania całego kodu. Większość procesu jest wykonywana ręcznie, przez co jest czasochłonna i podatna na dodatkowe błędy.
Poza kodami przyżądów, programista musi znaleźć sposób na interpretowanie uzyskanych danych. Ilość informacji generowanych przez kod oprzyżądowania komplikuje określenie, jakie zdarzenia miały miejsce w systemie i w jakiej kolejności.
Nowe podejście przynosi korzyści
W przeciwieństwie do konwencjonalnych metoda, TraceX automatycznie analizuje i przedstawia graficznie zdarzenia systemu przechwycone w systemie docelowym w trakcie pracy. Wydarzenia takie jak zawieszenia czy przerywania powoduje naruszenie strumienia danych, a narzędzie debugowania rozpoznaje to i wyświetla dane w którym wątku wystąpił, kiedy oraz inne istotne informacje.
Dzięki temu narzędziu, użytkownik może zarejestrować dowolną aplikację za pomocą interfejsu API. Informacje o zdarzeniu przechowywane są w buforze cyklicznym na systemie docelowym o pojemności zdefiniowanej przez aplikację. Bufor cykliczny umożliwia przechowywanie najnowszego zdarzenia przez cały czas i jest dostępny do wglądu w przypadku awarii systemu lub innego znaczącego wydarzenia.
Dobre narzędzia do debugowania wielordzeniowego umożliwiają rejestrowanie zdarzeń i wszczynanie odpowiednich działań w określonym czasie. Pozwala to uniknąć zaśmiecania bazy danych i użycia pamięci, gdy komputer działa poprawnie. Dziennik zdarzeń może być przesłany do komputera do analizy w sytuacji wystąpienia awarii systemu przerwy w transmisji danych po zakończeniu działania.
Po przesłaniu dziennika zdarzeń narzędzie wyświetla wydarzenia w formie graficznej, pokazując na osi poziomej czas. Różne wątki aplikacji i systemu procedur dotyczących zdarzeń są wymienione na osi pionowej, a same pojawiają się w odpowiednim wierszu. W systmach wielordzeniowych, wydarzenia są związane z rdzeniami i pogrupowane tak, że programiści mogą łatwo zobaczyć wszystkie wydarzenia dla wskazanego rdzenia.
Wszystkie wydarzenia są również prezentowane w górnym rzędzie, gdzie znajduje się Podsumowanie, co umożliwia programistom wygodny sposób na wgląd w pełny obraz zdarzeń systemowych bez konieczności przewijania w dół przez wszystkie wątki i rdzenie. Wydarzenia są reprezentowane przez różne kolory oraz ikony. Osie moga być rozszerzane i mogą wyświetlac więcej szczegółów zdarzenia, aby pokazać więcej wydarzeń. Skala czasu może być przesuwana, aby pokazać dowolne miejsce w buforze. Kiedy zaznaczone jest pojedyncze zdarzenie, są pokazywane szczegółowe informacje dla tego wydarzenia.
Poprawa wydajności aplikacji
Podczas gdy większość osób używa technologii wielordzeniowych aby zrozumieć i rozwiązać problemy, to jej korzyści na tym się nie kończą. Narzędzia te oferują profile analiz i poprawę wydajności aplikacji na poziomie systemu. Korzystając z profili użytkownicy widzą ile czasu procesora jest wykorzystywana na każdy wątek i usługi systemowe. Programista może łatwo przechodzić do konkretnych zdarzeń w celach diagnostycznych.
Jeszcze większe znaczenie dla funkcjonowania systemów wielordzeniowych ma równoważenie obciążenia przetwarzania wszystkich dostępnych rdzeni, dzięki czasu można osiągnąć większą wydajność systemu. jeżeli profile udostępniają informacje, które rdzenia posiadają większe czasy bezczynności, programista dostaje wskazówki dotyczące sposobu zmiany rdzenia do danych procesów.
Debugowanie z obsługą systemów wielordzeniowych przy pomocy tradycyjnych narzędzi nie jest możliwe. Dają one strumienie danych, często z różnych wątków, a analiza takich danych jest trudna o czasochłonna. W konsekwencji stosowania nowych narzędzi programiści mogą znajdywać i naprawiać aplikacje znacznie szybciej i wygodniej. Debugowanie pochłana 70% czasu tworzenia aplikacji, nowe narzędzia znacznie poprawiają jakość aplikacji i zmniejszają ilość tego czasu.