скорость

Тема в разделе "WASM.CRYPTO", создана пользователем rodger, 10 апр 2008.

  1. rodger

    rodger New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2007
    Сообщения:
    363
    Добрый вечер всем. Придумал я велосипед (криптографический естественно, дасть Бог еще много таких напишу), чтобы его превратить в респектабельный програмный продукт, необходимо его описать и документировать, рекламировать. Главный вопрос - как оценить скорость работы моего монстра и основных конкуренов. Только фишка в том что скорость не в Мб/с, ибо она на разных машинах будет разная, и нечто вроде количества тактов процесора необходимого для шифрования одного кило/мегабайта. Этот вопрос не является новым, я пытался найти инфу в интернете, но находил услуги разных центров, и разный специализированный софт. А как сделать это в доашних услвиях подручными средствами. Была авангардная идея, анализировать программы конкурентов отладчиком, ставить бряки на кнопки и тд, потом вспомнил что софт скорее всего упакованый, а распаковывать, модифицировать -дело трудоемкое. Жду ваших идей господа.
    Огромная просьба депресивные замечания, вида -зачем оно тебя надо, или твой софт -пурга и тд, оставить за пределами этой темы.
     
  2. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    А количество тактов будет различаться на разных типах процессоров. Так что -- именно мегабайты в секунду на одинаковой конфигурации железа.
     
  3. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    rodger
    можно считать количество операций для кодирования одного блока исходного текста.
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Просто интересно: как в отладчике можно оценить скорость шифрования (да вообще какую либо скорость)? Замерять время между двумя бряками?
     
  5. satrau

    satrau Александр

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    229
    можно пропатчить, и сделать джамп на свой таймер в начале и конце.
    --------
    а скорость можно определить просто протестировав всё на одной машине. та прога которая быстрее всех справилась с заданием та и быстрее...
     
  6. Joes

    Joes New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    98
    rodger: тут на днях Enrupt оптимизировали, посмотри на форуме. Там и пример кода на С++ есть.
    Идея простая: замеряешь время, делаешь много-много циклов зашифровки известного количества данных, замеряешь время.
    Количество зашифрованных байт поделенное на время и будет твое искомое значение.
     
  7. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    предпочитаю еще то, что между вызывами таймера, обернуть в цикл на несколько десятков тысяч/сотен тысяч оборотов
     
  8. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    Береш огромный файл 2-4 Gb шифруеш его и замеряеш время. Для заданного железа.

    А такты приводить в рекламе блажь ...
    Юзверь обычный вообще может и не знать что такое такты.

    Да и опять же такт такту рознь возьми 8086 и Duo Core.

    Количество кеша и его частота + частота шины + тип чипсета все это может сильно влиять.
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Только поаккуратней с шифрованием больших файлов. Тут кто-то пытался md5 померить для большого файла, так там происходило что-то типа кеширования. И при повторном вычислении скорость возрастала более чем в 4 раза afair
     
  10. Ruptor

    Ruptor Marcos el Ruptor

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    167
    Адрес:
    Australia
    rodger

    Мерять и сравнивать скорость шифра даже сложнее, чем его сделать. До сих пор нет никакого согласования. Пользователям интересно знать килобайты в секунду, а академикам нужны такты. Разница при этом гигантская в зависимости от процессора, его скорости, типа памяти, её скорости, размера кейша, его скорости, компилятора, его настроек, inline это код или отдельная функция, даже от её положения в программе зависит... Мерять надо много раз, отбрасывая всплески слишком медленных измерений – это другие процессы и прерывания пакостят. Надо обязательно указывать все эти детали – как и на чём мерял. Килобайты в секунду из тактов легко посчитать, а вот такты из килобайтов никак, поэтому считай такты на байт.

    Самый надёжный способ – меряешь шифрование случайных входов много раз через RDTSC между вызовами, отбрасывая все измерения, которые очевидно слишком медленны (больше 100 тактов на байт например), и считаешь среднее. Затем меряешь то же самое точно так же, только шифруя 2 раза. Опять считаешь среднее и вычитаешь разницу между двумя значениями – получишь скорость самого шифрования не считая стоимости измерения. Сами вызовы RDTSC и их обработка добавляет около 70-120 тактов – их надо отрезать. Я лично люблю сохранять все измерения в таблице и считать какое сколько раз встречается чтобы было видно сколько именно тактов оно занимало и вероятность всех разных измерений. Желательно чтобы больших отклонений не было. В лучшем случае получится 1-3 разных измерений со стабильной вероятностью, если только в шифре нет сдвигов по данным как в RC5 или таблиц как в AES – тогда отклонения будут огромные в зависимости от входных данных [что позволяет ломать шифр через cache attacks и т.д.].

    Я ещё согласен с подходом Даниела Бернштайна, который включает загрузку ключа и считает скорость шифрования 1 блока, двух, трёх и т.д. до длинного потока и строит кривую. Тогда хорошо видна стоимость шифрования маленьких пакетов в сравнении с длинным непрерывным потоком. Загрузка ключа в большинстве шифров очень дорого обходится. Её нельзя игнорировать. А файлы шифровать – это оставь пользователям играться после того как шифр отлажен, опубликован, проанализирован и уже в использовании.
     
  11. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    rodger
    можешь указывать коэффициент относительно известных сиферов (кстати, хорошо тестить скорость на заведомо слабой машине). но вообще - то на эту тему можешь особо не заморачиваться: скорость зависит от конкретной реализации алгоса, а вот самый важный вопрос, на который за частую не способен ответить и разработчик, надёжность шифра:derisive:
     
  12. rodger

    rodger New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2007
    Сообщения:
    363
    Спасибо всем за внимание и информацию, узнал много нового. Пока думаю так -поставить под виртуальной машиной Винду без антивируса и прочих ресурсоемких приложений, так сказать в базовой комплектации, и там тестировать разные программы.Нужно вспомнить статистику. Вспоминаю много лет назад, один знакомый написал свой архиватор, алгоритм Хафмана использовал, и чуток его модифицировал, а потом защищал это в качестве научной работы. Сравнывал его с распространенными архиваторами. Так его архиватор отставал буквально на пару процентов от Винрара и Зипа. Так ему сказали а где статистическая характеристика исследований? Обьем выборки? Погрешности и тд?
    Пока собираю колекцию программ конкурентов, а также изучаю рейтинги популярности.
     
  13. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ruptor
    2 раза нельзя - начнется эффект кеширования. Надо просто выключить шифрование
    и получим "накладные расходы" в чистом виде.
     
  14. SWR

    SWR New Member

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    226
    Адрес:
    Russia
    Для таких целей лучше Intel VTune Performance Analyzer использовать