Временная диаграмма на RDTSC

Тема в разделе "WASM.ZEN", создана пользователем osDrummer, 5 апр 2006.

  1. osDrummer

    osDrummer New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    6
    Адрес:
    Russia
    Возможно ли построить временную диаграмму пользуясь только шкалой времени получаемой по RDTSC? Насколько стабилен этот механизм?



    ЗЫ. Более подробно, зачем мне это надо и почему RDTSC, можно почитать вот здесь .
     
  2. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    Что-то у меня от твоего вопроса мозги завязялись в трубочку... :dntknw:



    PS: Получается так что ты создал тему на другом форуме, заставляешь нас (пока меня) читать её смысл где-то в другом месте - ТАК НЕ ПОЙДЁТ.
     
  3. osDrummer

    osDrummer New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    6
    Адрес:
    Russia
    Хорошо, постораюсь осветить здесь.

    Я пишу проект под QNX6 для x86. Задача стоит в получении штампа времени в прерывании. Для этого я хочу использовать инструкцию RDTSC. При старте программы я планирую получить текущее число набежавших циклов и ассоциировать его с текущим календарным временем. И далее по ходу выполнения программы не синхронизироваться с календарем, а отсчитывать временную диаграмму только по RDTSC.

    Использовать системный таймер не хочу, так как мне нужна дискретность отсчетов в 1 мкс. Для выше описанной ОС системный тик минимально можно поставить в 10мкс, но на Celeron 400 это губительно сказывается на производительности (большая часть времени уходит на обработку событий от таймера). Дело в том, что мое приложение не единственное и растрачивать ресурсы такими темпами я не могу. По умолчанию системный тик равен 1мс. Производительность вышеуказанного компа при таком тике меня устраивает.

    Почитав документации от Интел про RDTSC выудил, что они гарантируют стабильность частоты тика и настроек read time stamp counter'a в течении 10 лет после последнего reset'a.

    Как вы, уважаемые войны дзена, считаете возможно ли построение временной диаграммы базируясь только на RDTSC? Насколько такой механизм будет действительно стабилен?
     
  4. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    В принципе идея неплохая, но могут быть погрешности не в rdtsc, а в приведении в секунды (или мс, почти без разницы). Ведь Вы получите не совсем точное, грубо говоря, цифровое отношение, для дальнейшего приведения. И потом чем дальше тем хуже. Будут накапливаться ошибки - сумма погрешностей, начиная с того времени, когда было получено отношение (или, по-другому, какой-то коэффициент).

    Вообщем, время будет точное, но до поры, до времени... Хотя лучше применить корректировку через час, чем через каждые 1000 мс читать новое значение времени.



    PS: "получить текущее число набежавших циклов" - лучше сказать тактов, и то, что rdtsc точное - это правда. :)



    Кстати, я не понял: "По умолчанию системный тик равен 1мс." - если такт равен 1 мс, то это не правда!!!
     
  5. osDrummer

    osDrummer New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    6
    Адрес:
    Russia
    2 Vasil





    Я предпологаю сравниваться ВСЕГДА только с полученным в начале ЧИСЛОМ ТАКТОВ (не переведенным в секунды, миллисекунды, etc), а не с "последним замеренным" rdtsc.

    Приведу пример, как я НЕ БУДУ ДЕЛАТЬ. Раз в 1мкс (в ISR) получать значение rdtsc и сохранять его, а в следующее прерывание сравниваться со значением rdtsc, полученным в предыдущее. Вот в таком случае действительно ошибка приведения все время "капает"...Вы об этом говорили или нет?







    Я имел ввиду не процессор :). Это я про тик, который устанавливает ОС, программируя аппаратный таймер i8253.

    Так, например, для WinXP системный тик ставиться по умолчанию равным 10мс. Для Linux(2.х) тоже 10мс. А в Досе по умолчанию был 55мс...







    А вы не в курсе как этот механизм работает на современных процах, например на которых можно процик в энерго сберегающий режим переводить? Как я понимаю частота при этом уменьшается, значить и счетчик будет тикать медленнее...
     
  6. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Не будет никакой погрешности. rdtsc связана с тактовой частотой процессора, и имеет ту же стабильность.

    Время будет не в мс, а в более мелких единицах, и надо будет рассчитать коэффициент, если нужно преобразовывать такты в традиционные единицы.
     
  7. osDrummer

    osDrummer New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    6
    Адрес:
    Russia




    Еще по теме.

    1. Мне самому нет необходимости высчитывания частоты процессора. Для этого уже есть готовая структура OS с данными. Ее состовляющая, содержит cycles per second, поэтому я и перевел как ЦИКЛЫ...возможно что более корректно сказать такты...

    2. Каждый временной замер мне необходимо заносить в БД. Мне кажеться что как раз во избежании потерь нужно заносить ТАКТЫ, а ФПО на ходу будет уже брать "необходимое" округление...
     
  8. osDrummer

    osDrummer New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    6
    Адрес:
    Russia
    2 cresta



    А если поставить двух процессорную машину. Счетчики процессоров будут тикать синхронно или будут расходиться?

    Число тактов с начала reset'a у них будет одинаковое или один из процессоров будет поперед другого?



    ЗЫ. Естесественно считая, что процессоры одинаковые по частоте и серии.
     
  9. osDrummer

    osDrummer New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2006
    Сообщения:
    6
    Адрес:
    Russia
    немного оффтопика.

    чегото два раза послалось...в этом форуме можно удалять свои сообщения?
     
  10. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Если один остановился и стоит - другой естественно будет впереди :)

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

    Так что чисто логически должно совпадать. Экспериментально проверить не на чем.
     
  11. HitmaN85

    HitmaN85 New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2005
    Сообщения:
    36
    Длительность такта - величина постоянная. Если процы одинаковые, то может один и будет поперед другого (это зависит от материнки), но разница будет одинаковой.



    RDTSC отлично подойдет для замеров с точностью в 1 мкс.

    про энергосберегающий режим не знаю, но вероятнее всего тактовая частота не уменьшается.
     
  12. Vasil

    Vasil Василь

    Публикаций:
    0
    Регистрация:
    7 янв 2006
    Сообщения:
    228
    Адрес:
    Ижевск
    cresta

    "Не будет никакой погрешности. rdtsc связана с тактовой частотой процессора, и имеет ту же стабильность."

    Я вроде русским языком написал: "могут быть погрешности не в rdtsc, а в приведении в секунды". >:dntknw:



    PS: ладно, проехали...
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    osDrummer

    > "..гарантируют стабильность частоты тика и настроек read time stamp counter'a в течении 10 лет после последнего reset'a"

    Ничего подобного Intel не гарантирует и гарантировать не может.

    Фраза "Intel guarantees, architecturally, that the time-stamp counter frequency and configuration will be such that it will not wraparound within 10 years after being reset to 0" означает не более того, что 64-битный TSC гарантированно не переполнится за 10 лет непрерывной работы - с таким же успехом можно было бы и 100 лет гарантировать ;)



    Частота процессора получается умножением частоты системной шины на подстраиваемом генераторе. Поэтому ес-но стабильность TSC определяется стабильностью частоты системной шины и в итоге стабильностью задающего кварца. Для обычных ширпотребных (непрецизионных) кварцев кратковременная нестабильность составляет порядка 20-50 ppm = (2-5)*10^-5, а долговременная ~1-10 ppm. Это означает что при измерении интервалов в 1 сек за счет нестабильности частоты показания RDTSC могут различаться на ±20-50 мкс, а на 100 сек интервалах соответсвенно до 100 раз больше (±2-5 мс). Причем это СКО и реальные отклонения м.б. и меньше и больше. Разумеется эта нестабильность относится и к системному таймеру. А уж годится или не годится такая нестабильность для поставленной задачи - решать автору.



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