2013-03-13 18 views
5

Próbuję zmierzyć jitter w opóźnieniu przerwań dla różnych jądra Linux (z włączoną opcją RT itd.). Wiem, że najlepiej jest użyć oscyloskopu do tego celu, generując przerwanie z pinem GPIO i przełączając inny pin GPIO w procedurze obsługi przerwań, ale zastanawiałem się, czy istnieją na to narzędzia do jądra Linuxa i może to być mogę zrobić porównanie liczb.Czy istnieją narzędzia jądra dostępne do pomiaru opóźnienia przerwania z odpowiednią dokładnością?

+0

Patrz: [Jak w czasie rzeczywistym jest Linux 2.6] (http://stackoverflow.com/questions/1362906/how-real- time-is-linux-2-6). –

Odpowiedz

4

Typową metodą byłoby ustawienie zegara o wysokiej precyzji (takiego jak licznik cykli procesora), aby uruchomić przerwanie niektórych losowych, ale znanych czasów w przyszłości, i zmierzyć w ISR różnicę między czasem zegar został ustawiony na wyłączenie w stosunku do czasu, w którym faktycznie osiągnięto ISR.

(Częścią "losową" jest to, aby uniknąć systematycznego wykonywania pomiarów w ciszy i zajętości - na przykład, nie chcesz, aby przerwanie zegara było uruchamiane systematycznie w tym samym czasie co sieć przerwanie karty, niesprawiedliwe przesuwanie numerów opóźnienia w górę).

Narzędzie, które w pewnym stopniu implementuje to, jest Cyclictest, chociaż wydaje się, że mierzy czas wewnątrz wątku jądra zamiast samego ISR, co spowoduje wzrost wartości mierzonych opóźnień.

+0

Mam na myśli użycie generatora sygnału do generowania przerwania na GPIO, dzięki czemu mogę uzyskać jitter w czasach odpowiedzi przerwań, generując przerwanie wiele razy i mierząc czas IRQ wiele razy. Rejestry PMCR i Cycle Count dla kory ARM zrobią to za mnie. Teraz część rejestrowania jest tym, na co trzeba zwrócić uwagę. – Nuetrino

+0

@Nuetrino Problem z robieniem tego jako * davidg * sugeruje, że zawsze jesteś * zsynchronizowany * z zegarem systemowym. Zewnętrzne źródło jest lepsze. Ponadto kod przestrzeni użytkownika może mieć wpływ na opóźnienie przerwania. Niektóre instrukcje wymagają więcej czasu niż inne. Ale tak naprawdę, jeśli potrzebujesz tego rodzaju opóźnienia, prawdopodobnie coś jest nie tak ze sprzętem. DMA itp. Byłoby lepsze. Ref: [U-boot interrupts] (http://stackoverflow.com/questions/15829601/enabling-interrupts-in-u-boot-for-arm-cortex-a-) –

0

Użyj narzędzia "cyccionest", aby zmierzyć opóźnienie, wykonałem badania i używam programu cyccionest do mierzenia fluktuacji przeniesionego portu linux RT na platformie powerpc.
To proste, ale potężne narzędzie do pomiaru opóźnienia.

0

Innym sposobem jest połączenie jednego wyjścia GPIO na płycie głównej z innym wejściem GPIO, wyciągnięcie sygnału z wyjścia GPIO i obsłużenie tego zdarzenia w procedurze ISR GPIO. Sprawdź różnicę czasu sygnału ciągnącego i wyzwalacza wejściowego GPIO ISR. tutaj jest open source, aby to zrobić, na pokładzie malinowy:

Linux GPIO IRQ latency test