Сопоставить код драйвера устройства с осциллограммой Logic Analyzer - PullRequest
1 голос
/ 05 февраля 2011

В соответствии со спецификацией SDIO последовательность операций (для транзакции записи) имеет вид:

Command53 - CommandLatency - Command53Response - ResponseLatency - startbit - запись-число-байтов - CRC - endbit - WriteLatency - startbit - CRC - endbit - busybit.

Во время тестирования драйвера SDIO UART значения времени, которые я получил, были больше, чем ожидалось. Было обнаружено много задержек, особенно во время транзакции записи.

Причинами задержки могут быть планировщик, выделяющий процессорное время другим процессам, задержка в рабочих очередях и т. Д.

Я хотел бы проанализировать и понять время ожидания. Возможно, понимание соответствия между кодом драйвера устройства и осциллограммой Logic Analyzer может привести к некоторому сигналу.

Может кто-нибудь пролить свет на это?

Спасибо.


РЕДАКТИРОВАТЬ 1: Сожалею! Я предположил несколько вещей.

В sdio_uart_transmit_chars () происходит вызов sdio_out(), который, в свою очередь, вызывает sdio_writeb () , и этот вызов записывает побайтно (по одному байту за раз) в SDIO Устройство UART. Я изменил драйвер, чтобы использовать sdio_writesb () , то есть многобайтовый режим. Это уменьшило время, необходимое для записи X байтов. Интересно, что с увеличением размера записываемых данных наблюдался экспоненциальный рост WriteLatency (как упомянуто выше).

Эта задержка может быть вызвана многими причинами. Я хотел бы понять эти причины.

Установка: я использую ноутбук Linux (v 2.6.32) и загружаемый модуль ядра (который модифицирован sdio_uart.c )


РЕДАКТИРОВАТЬ 2:

Возможно, добавление 'SDIO' в этом вопросе вводит в заблуждение .. (в данный момент не уверен). Причины задержки могут быть общими для любого драйвера устройства при взаимодействии с оборудованием и могут быть независимы от процесса записи SDIO.

Если кто-то может указать мне на связанный онлайн-ресурс, я был бы рад изучить и обновить результат здесь.

Надеюсь, на этот раз я добавил больше ясности. Пожалуйста, прокомментируйте, если мне вопрос все еще не ясен.

Спасибо, что уделили время.


РЕДАКТИРОВАТЬ 3:

Да, я просматриваю сигналы в Logic Analyzer (LA), и во время и между записями задержки больше, чем я ожидал.
Чтобы дать представление о значениях времени:
Для передачи 512 байт: на аппаратном уровне теоретически запись должна занять 50 микросекунд (нас), однако в действительности я получил 200 нас.

Этот разрыв в 150 нас - это то, что я хочу понять.

Примечание:
1) Я округляю значения времени, чтобы упростить дело.
2) Все значения времени рассчитываются на уровне ядра, и здесь не возникает проблем с пользовательским пространством.

1 Ответ

0 голосов
/ 11 февраля 2011

Стоит обратить внимание на то, работает ли ваш интерфейс sd через DMA, так что драйвер может запрограммировать конечный автомат, а затем он просто запускается сам по себе, или если получение сообщения требует повторного обслуживания драйвером, что может бытьзадерживается другими обязательствами ядра.

Вы также можете увидеть, возможно ли узкое место ввода-вывода, например, интерфейс SD или какая-либо шина, с которой он зависает, также используется для чего-то еще?

Наконец, вы можете искать способы повысить приоритет.В крайнем случае вы можете переключиться на SD-драйвер реального времени, а не обычный драйвер.

...