Перейти к содержанию
    

подсчитать количество тактов

Есть софтверный mdio драйвер под линукс ядро 2.6.20 (один gpio пин на клок, второй на данные). Пытаюсь подсчитать количество тактов, расходуемое процессором на операцию выставления бита на ноге, но что-то мои расчетные данные не сходятся с показаниями осциллографа.

 

Исходные данные: процессор на ядре mips74K, частота 300mhz, т.е. длина такта 3.3ns, обрабатывает 2 инструкции за такт (судя по документу с mips.com). Дизассемблировал объектный модуль драйвера, нашел ф-цию дергания пином, число инструкций 72, соответственно занимает 36 тактов или 118нс чтобы выставить единицу и столько же чтобы выставить ноль; никаких задержек (udelay) между этими операциями в драйвере нет.

 

Т.е. получается 118нс * 2=236нс длина фронта, правильно? Осциллограф же показывает 2.6мкс. Откуда еще добавляются такты??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

обрабатывает 2 инструкции за такт
Инструкции бывают разные. И условия их выполнения тоже бывают разные. 2 штуки за такт - это максимум. Реально может быть много меньше (например, если инструкция полезет за данными в память, и их не окажется в кэше, то количество тактом на инструкцию возрастет на пару порядков)

Кроме того, у CPU весьма длинный конвеер (14/15 стадий), если инструкции окажутся зависимыми, то может случиться тормоз тактов на 15.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Две инструкции за такт - это если повезет. Т.е. если между ними нет зависимостей, что данны для инструкций уже доступны, что инструкции никуда "наружу" лезть не надо и т.д. Т.е. читать надо - "до двух инструкций за такт".

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Большое спасибо за разъяснения! Осциллограф врать не будет :)

Не посоветуете тулзы, аналогичные gprof, но для профилиирования ядра или модулей?

 

PS. Вроде бы связка VisionICE/VisionCLIK обеспечивает такую возможность, но это не дешево :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...