У міру вдосконалення будь-якої технології виникає необхідність в підвищенні загальної надійності системи - для забезпечення її працездатності і стійкості до зовнішніх впливів. Ця вимога стосується і до шини Peripheral Component Interconnect (PCI) Express. У міру того як PCI Express починає використовуватися в усе більшій кількості додатків і росте число пристроїв, що підтримують цю шину, слід очікувати від неї більшої стійкості до збоїв і більш надійної роботи.
Розроблена комітетом PCI-SIG, специфікація для шини PCI Express передбачає ряд механізмів сповіщення користувача про виникнення помилок. При виявленні збоїв, в залежності від їх типів, вони можуть оброблятися апаратними засобами або передаватися драйверу або прикладній програмі. Наприклад, прикладна програма може виконати перемикання на працюючий пристрій, уникаючи тим самим звернення до пристрою, що працює зі збоями. Теоретично, це відмінний метод підвищення надійності системи в цілому. Проблема полягає в тому, як згенерувати такі помилки, щоб протестувати реакцію системи на їх виникнення. У статті обговорюються деякі традиційні методи тестування з введенням помилок і деякі інновації в методиці випробувань.
Тестування з введенням помилок
Специфікації PCI-SIG для шини PCI Express передбачають два механізми оповіщення користувача про помилки:
- базове оповіщення про помилки;
- розширене оповіщення помилки.
- виправні;
- невиправні - не фатальними;
- невиправні - фатальні.
Виправні помилки можуть оброблятися апаратними засобами і не надають функціонального впливу на працездатність системи або прикладної програми. На відміну від цього, до виникнення критичних помилок обробляються драйвером пристрою або прикладної програмою. Кожна прикладна програма і система обробляє помилки по-різному, в залежності від їх типу.
- комплекти готових тестів;
- імітатори;
- генератори перешкод.
Комплекти готових тестів
Кращим прикладом комплекту готових тестів є тести, що виконуються за допомогою спеціальної тестової плати (PTC), яка використовується в лабораторіях PCI-SIG для випробувань на сумісність. Комплект готових тестів містить, як правило, кілька сценаріїв тестування. Наприклад, PTC включає 13 сценаріїв, які використовуються для тестування функцій рівня каналу передачі даних і рівня транзакцій PCI
Express. Основною перевагою комплекту готових тестів є простота застосування: тести запускаються кількома клацанням мишки і виконуються автоматично, при цьому для кожного використовуваного сценарію генерується звіт про результати.
Одне з обмежень комплектів готових тестів пов'язано з тим, що вони перевіряють лише з одного боку каналу. Канал PCI Express складається з кінцевих точок і комплексу маршрутизації, отже, для забезпечення гарантії повної працездатності інженер повинен тестувати обидві сторони каналу в реальних умовах роботи. Більш того, йому потрібно ввести помилки в кінцеві точки і в комплекс маршрутизації, а потім переконатися в правильній реакції обох сторін на ці помилки.
У типовому випадку плата PTC замінює материнську плату і може створювати помилки лише в пристроях, розташованих в кінцевих точках (рис. 1). Це обмежує застосування таких тестів перевіркою тільки кінцевих точок. Крім того, оскільки в реальній системі кінцеві точки недоступні, драйвери або тестові програми встановити не можна. В результаті комплекти готових тестів можна використовувати для тестування на системному рівні.
Мал. 1. Тестування кінцевих точок пристрою за допомогою PTC
Ще одним недоліком комплекту готових тестів є обмежений вибір тестів, і їх важко або неможливо змінити. І знову візьмемо в якості прикладу PTC. Ця плата містить 13 тестів і охоплює лише невелику частину специфікацій. Цього достатньо для перевірки операційної сумісності, але недостатньо для надійної перевірки пристрою в цілому. Готовий комплект пропонує зазвичай фіксований набір тестів, і кінцевому користувачеві дуже складно розширити число сценаріїв тестування в такому комплекті.
Звичайно, на ринку є й інші продукти, що охоплюють більш широкий набір тестів, ніж PTC, наприклад, для PCI Express Gen2 є комплекти, що включають понад 170 тестів. І хоча область тестування була розширена, цей комплект тестів все-таки страждає від високого ступеня статичності і неготовність адаптуватися до мінливих вимог користувачів або до розширення області тестування.
Імітатори - це інструменти, адаптовані одну сторону каналу. Деякі з них можна запрограмувати так, щоб вони емулюватися кінцеву точку або комплекс маршрутизації каналу, тоді як інші статично налаштовані на емуляцію тільки кінцевої точки або комплексу маршрутизації (рис. 2а). Загальний метод тестування залишається колишнім. Для тестування кінцевого пристрою інженер замінює комплекс маршрутизації імітатором, емулює цей комплекс маршрутизації (рис. 2б). Для тестування комплексу маршрутизації кінцева точка замінюється імітатором, який потім емулює поведінку цієї кінцевої точки. Однак, на відміну від реального пристрою або комплексу маршрутизації, імітатор можна запрограмувати як на правильну роботу, так і на емуляцію несправності.
Мал. 2. а) Схема включення імітатора для тестування комплексу маршрутизації; б) імітатор з об'єднавчої платою для тестування кінцевої точки
Імітатори вельми важливі на початковому етапі циклу розробки, коли є лише обмежене число пристроїв. Їх можна використовувати для початкового функціонального тестування, відомого також як первинний етап виведення на ринок системи або пристрої, при цьому вони не залежать від наявності інших пристроїв. Це важливо в тих сценаріях, де тестоване пристрій є першим пристроєм такого роду на ринку.
Більшість імітаторів можна уявити собі як деяку машину станів, що працює відповідно до вимог протоколу і програмовану через графічний інтерфейс користувача (GUI) або через інтерфейс для програмування додатків (API). Інженер може запрограмувати імітатор через GUI або API так, щоб він робив майже все, що завгодно. В результаті виходить дуже гнучкий інструмент, який можна використовувати для функціонального тестування, введення помилок або вимірювання характеристик.
Але як завжди, за плюсами йдуть мінуси. Оскільки імітатор дуже гнучкий, його важче налаштовувати і контролювати. Наприклад, уявіть собі, що генерація помилки полягає в тому, що потрібно випадковим чином ввести пошкоджений пакет рівня транзакцій (TLP) після установки з'єднання і налаштування пристрою. У нормальній системі цю операцію виконує комплекс маршрутизації і драйвери. Однак тепер, коли ми використовуємо імітатор для емуляції комплексу маршрутизації, ми повинні відтворити цей процес ініціації вручну, перш ніж можна буде почати введення помилки. Це завдання дуже громіздка.
Друге обмеження імітаторів теж лежить в області системного тестування. Імітатор - відмінний інструмент для перевірки розроблюваних пристроїв або функціонального тестування. Однак в процесі тестування важливо побачити роботу всієї системи в цілому, включаючи комплекс маршрутизації, пристрої, драйвери і прикладні програми. Один з ключових питань, на який потрібно відповісти: реєструється помилка на кінцевому пристрої? Наприклад, якщо мережева карта повідомляє про виникнення невиправної помилки, хто повинен робити відповідні дії - драйвер або додаток? Використовуючи імітатор, ми усуваємо деякі компоненти системи, і оскільки імітатор емулює частина системи, ми не можемо перевірити поведінку системи в цілому.
Генератори перешкод
Основна перевага генератора перешкод в тому, що він може тестувати всю систему: комплекс маршрутизації, кінцеве пристрій, а також драйвери і прикладні програми. Генератор перешкод можна запрограмувати так, щоб він ввів помилки в комплекс маршрутизації і в кінцеве пристрій. Оскільки при цьому працює вся система цілком, інженер може спостерігати реакцію драйвера або програми на конкретну помилку.
Інша перевага генератора перешкод полягає в тому, що його налаштувати простіше, ніж імітатор. Як згадувалося вище, використовуючи імітатор, інженер змушений вручну програмувати весь процес ініціації. Генератор же прозорий під час процесу ініціації, тому останній автоматично виконується комплексом маршрутизації і кінцевим пристроєм. Після ініціації користувач може запрограмувати генератор перешкод на введення помилок за допомогою секвенсора. Секвенсор є машиною станів, в якій є умови if / else. Eсли таку умову задовольняється, то виконується конкретна операція.
У тому ж згаданому вище прикладі випадкове введення пошкоджених TLP легко налаштовується в генераторі перешкод. Зібравши пристрій генератор випадковим чином вводить TLP зі зміненим заголовком (пошкоджений TLP).
Оскільки генератор перешкод не створює будь-яких повідомлень і пропускної здатності йому необхідна присутність обох пристроїв на кожному кінці каналу. Це не завжди можливо на ранніх етапах створення нової технології. Тому генератор перешкод можна застосовувати на ранніх етапах розробки, в цьому випадку із завданням краще справляється імітатор.
висновок
На сучасному ринку є різні типи інструментів. Вибір відповідного інструменту визначається багатьма факторами. Перший і найважливіший з них - розуміння рівня надійності, який очікується від досліджуваного пристрою. При виготовленні мережевої карти для споживчої електроніки тестування всіх аспектів технічних характеристик і охоплення всіх можливих негативних сценаріїв може не відігравати таку важливу роль. У цьому випадку цілком підійде швидкий і простий в застосуванні комплект тестів з досить хорошим охопленням (більше 13 сценаріїв тестування). Однак якщо інженер розробляє серверну платформу для відповідальних додатків, дуже важливо протестувати надійність і здатність відновлення всієї системи. У таких випадках рекомендується застосовувати генератор перешкод, так як він дозволяє тестувати спільну роботу обладнання, програмного забезпечення та драйверів.
Другим фактором, який треба враховувати, є етап розробки тестованого пристрою: чи знаходиться пристрій на початковому етапі проектування або вам потрібно відтворити інструмент, який використовується в лабораторії PCI-SIG для тестування на сумісність? Для раннього тестування продукту, наприклад, на етапі розробки, важливо спростити робоче середовище. На цьому етапі хорошим інструментом може виявитися імітатор, який емулює комплекс маршрутизації, забезпечуючи повний контроль над тим, що він передає. Однак для тестування системного рівня, або для створення помилок в повній системі в лабораторіях підтримки споживачів, або для відтворення проблем, що виникли у користувача, кращим вибором може виявитися генератор перешкод.
Універсального рішення не існує. Завжди доводиться вибирати потрібний інструмент для кожного конкретного завдання.