Итак прошу собраться всех знающихся на этих двух протокалах:
Сначала пару вопросов:
1. Кто сказал что скорость работы фсупика с симом более 16 мс? Где это написано/проверено/доказано?
2. Тот же вопрос но касающийся ИОКАРДсов, где указана скорость обмена данными с иосервером и его с симом?…
3. Кто из разработчиков роутеров(или просто юзеров) какой скорости вообще добивался в работе с этими протоколами?
Сначала пару вопросов:
1. Кто сказал что скорость работы фсупика с симом более 16 мс? Где это написано/проверено/доказано?
2. Тот же вопрос но касающийся ИОКАРДсов, где указана скорость обмена данными с иосервером и его с симом?…
3. Кто из разработчиков роутеров(или просто юзеров) какой скорости вообще добивался в работе с этими протоколами?
Я не хочу создавать тему что круче из них, но как я понимаю они используют одну и ту же библиотеку (указанную в СДК), но каждый работает по-своему, хотелось бы окончательно найти ответы о подводных камнях и о слабых сторонах того и другого.
🙂
Скорость записи или скорость чтения?
Скорость чтения можно сделать очень высокой, у меня получается. А вот скорость записи — это полная жопа.
Сама функция записи работает быстро, но, вот если для чтения, я могу в цикле прочитать кучу параметров и сделать FSUIPC_Process после цикла, то для записи — FSUIPC_Process нужно делать после каждой FSUIPC_Write, вот тут и начинаются тормоза. Добиться скорости, больше чем 10 раз в секунду, я так и не смог 🙁 Главным тормозящим фактором является FSUIPC_Process. Не совсем понимаю, почему автор избрал такой сложный механизм обмена данными, когда можно было, просто, сделать мап файл — дать людям смещения и все. Там скорости сотни раз в секунду получаются легко.
По второму вопросу ничего не знаю.
Круче всего работать напрямую с памятью сима 🙂
Bird, 14.02.2009 22:20, сказал(а):
FSUIPC ее не использует, по крайней мере для 9ки.
ryko_m, 15.02.2009 00:27, сказал(а):
Скорость записи или скорость чтения?
Скорость чтения можно сделать очень высокой, у меня получается. А вот скорость записи — это полная жопа.
Сама функция записи работает быстро, но, вот если для чтения, я могу в цикле прочитать кучу параметров и сделать FSUIPC_Process после цикла, то для записи — FSUIPC_Process нужно делать после каждой FSUIPC_Write, вот тут и начинаются тормоза.
А Вы попробуйте так-же как с чтением ) Поназаписывать а потом процесс(). У меня работает =) 15 мс или иногда даже меньше) Желательно конечно из отдельного потока.. =)
Цитата
А как при этом быть с потокобезопасностью? Сим же тоже по-идее хочет иметь монопольный доступ к своим переменным? =) Как оно вообще реализуется?
adskdn, 15.02.2009 23:42, сказал(а):
ryko_m, 15.02.2009 00:27, сказал(а):
Скорость записи или скорость чтения?
Скорость чтения можно сделать очень высокой, у меня получается. А вот скорость записи — это полная жопа.
Сама функция записи работает быстро, но, вот если для чтения, я могу в цикле прочитать кучу параметров и сделать FSUIPC_Process после цикла, то для записи — FSUIPC_Process нужно делать после каждой FSUIPC_Write, вот тут и начинаются тормоза.
А Вы попробуйте так-же как с чтением ) Поназаписывать а потом процесс(). У меня работает =) 15 мс или иногда даже меньше) Желательно конечно из отдельного потока.. =)
Цитата
А как при этом быть с потокобезопасностью? Сим же тоже по-идее хочет иметь монопольный доступ к своим переменным? =) Как оно вообще реализуется?
можно простой пример?
Кусок кода, рабочий, чтоб, предположим, менял по кругу частоту ком ?
Я думаете не пробовал так?
Не работает, у меня.
реализуется, очень просто, через вин АПИ — он сам обо все (почти) заботится. смотрите сдк на предмер readprocesmemory и writeprocesmemory
Тока к переменным сима это отношение не имеет. Это имеет отношение к памяти сима.
Сообщение изменено: ryko_m (16 Февраль 2009 — 01:54)
601, 16.02.2009 04:00, сказал(а):
SIOC через IOCP-сервер способен считывать каждое пятое значение симовского таймера, меняющего своё значение 100 раз в секунду. Итого на чтение имеем частоту обновления 20ms.
На запись экспериментов и замеров никогда не делал, поскольку нужды не возникало — всё просто (и на глаз мгновенно) отрабатывало…
С FSUIPC всё было значительно хуже…
Только что специально проверил еще одним способом — 14 мс =) С мсфс 2004.
С фсх точно не мерял, но на глаз еще быстрее)
ту рико_м:
Пример привести не смогу т.к. оч много кода и выдрать работающий кусок сложно)
Но все именно так как я написал) Просто чтение-запись, все что нужно, в конце всего этого ПРОЕЦСС();
Писано на сишарп, использовал обертку для фсюписи длл отсюда:
http://forums.simflight.com/viewtopic.php?…d9837e1550b5709
По теме:
Нигде в документации к IOCP-серверу я не встречал данных о скорсти чтения/записи в Сим. По опыту практического использования могу сказать следующее:
SIOC через IOCP-сервер способен считывать каждое пятое значение симовского таймера, меняющего своё значение 100 раз в секунду. Итого на чтение имеем частоту обновления 20ms.
На запись экспериментов и замеров никогда не делал, поскольку нужды не возникало — всё просто (и на глаз мгновенно) отрабатывало…
С FSUIPC всё было значительно хуже…
601, 16.02.2009 07:00, сказал(а):
По теме:
Нигде в документации к IOCP-серверу я не встречал данных о скорсти чтения/записи в Сим. По опыту практического использования могу сказать следующее:
SIOC через IOCP-сервер способен считывать каждое пятое значение симовского таймера, меняющего своё значение 100 раз в секунду. Итого на чтение имеем частоту обновления 20ms.
На запись экспериментов и замеров никогда не делал, поскольку нужды не возникало — всё просто (и на глаз мгновенно) отрабатывало…
С FSUIPC всё было значительно хуже…
Яков, 20 мс для иосервера — это конечно уже много, к сожалению…
На ФСХ через фсупик получается 3-10 мс (странно не правда ли?). А «на глаз» оно бывает обманчиво ))
Кстати, сравнили работу м-джоя и АЦП с фсупиком — так у м-джоя можно войти в противофазу работы железного и ВК штурвала если им очень быстро дергать, у нас я такого добиться не смог! Вы ставили такие эксперементы с иокардсами? — это возможно один из визуальных тестов на скорость.
LifeBurner, 16.02.2009 16:29, сказал(а):
Цитата
1/5 секунды равна 200 ms, а не 20 (потому как 1 сек = 1000 ms, а один цикл таймера у Вас занимает 10 ms).
Да я вообще вчера какую-то ерунду написал — поздно уже было 🙂
Специальных замеров скорости работы IOCP-сервера я никогда не проводил, поскольку с момента отказа от FSUIPC все проблемы связанные со скоростью работы просто ушли. Что либо замерять или оптимизировать не было никакой нужды.
Увидев вопрос Жени, я просто решил посмотреть с какой частотой приходит в Сиок значение симовской переменной ELAPSED_SECONDS. Смотрел по логу, и увидел, что значения приходят с дикретностью 0.05 сек, т.е. 50мс или 20 раз в секунду. У меня есть подозрение, что с такой дискретностью меняется значение ELAPSED_SECONDS в самом симе, а следовательно судить о скорости IOCP-сервера по этому эксперименту нельзя.
Цитата
1/5 секунды равна 200 ms, а не 20 (потому как 1 сек = 1000 ms, а один цикл таймера у Вас занимает 10 ms).
601, 16.02.2009 21:25, сказал(а):
—
Блин, опять ерунду сказал (что-то не мой день сегодня): максимальная частота таймера в SIOC — 0.1с, то есть попробовал я его на частоте 100мс :crazy: Вобщем, чтоб замерять надо IOCP-клиента писать.
Но повторюсь: нигде, никогда и не в каком виде скорость IOCP-сервера не заставляла о ней задумываться.
У вас есть в кокпите индикаторы, управляемые энкодерами?
Если нет, то проблема скорости станет, когда энкодеры подключать начнете.
01 сек это ОЧЕНЬ МНОГО.
Сообщение изменено: ryko_m (16 Февраль 2009 — 23:59)
601, 17.02.2009 00:25, сказал(а):
Нее…. что-то мне не верится в 0.1С, ну не могли они придумать такой тормоз!
Яков, может сам СИОК отрабатывает скрипт с такой частотой? Но даже для скрипта — это очень мало.
Насчёт энкодеров — скажите, уже ведь довольно много построено кокпитов на иокардсах, неужели там везде проблемы со скоростью?
ryko_m, 16.02.2009 20:57, сказал(а):
Если нет, то проблема скорости станет, когда энкодеры подключать начнете.
01 сек это ОЧЕНЬ МНОГО.
Проблема не встанет — и энкодеры и индикаторы отрабатывают идеально. Максим, вы не поняли, о каком таймере я говорил: 0.1 — это самый быстрый таймер, который можно самоcтоятельно создать в SIOC с целью написания дополнительной логики. К работе с энкодерами и индикаторами эти таймеры не имеют никакого отношения.
Bird, 16.02.2009 22:10, сказал(а):
601, 17.02.2009 00:25, сказал(а):
Нее…. что-то мне не верится в 0.1С, ну не могли они придумать такой тормоз!
Яков, может сам СИОК отрабатывает скрипт с такой частотой? Но даже для скрипта — это очень мало.
Насчёт энкодеров — скажите, уже ведь довольно много построено кокпитов на иокардсах, неужели там везде проблемы со скоростью?
Так, давайте отделим мух от котлет. Когда я говорил о таймере частотой 0.1 я имел ввиду скриптовую сиоковскую функцию TIMER. Используются они тогда, когда вам в скриптовом коде нужно породить таймер и привязать к нему какую-нибудь логику. Я их, кстати не использую, поскольку всю логику вяжу к симовской переменной ELAPSED_SECONDS.
Упомянул я здесь о сиоковском таймере только потому, что хотел с его помошью установить максимальную частоту надёжной записи/считывания в IOCP-сервер с помошью вот такого скрипта:
Var 1 name Test link IOCP offset 21 Var 2 name TimerStart { &T = Timer 10 1 1 } Var 3 name T { &Test = &Test + 1 }Для этой цели он не подошёл.
Bird, 16.02.2009 22:33, сказал(а):
Я кстати, тоже подумывал о симовской переменной в качестве таймера, но мне многовато будет секунды (
Будем пользовать свой, побыстрее, кстати, он и считает у нас скорость работы протоколов.
Женя, она отсичывает сотые доли секунды…
601, 16.02.2009 23:14, сказал(а):
ryko_m, 16.02.2009 20:57, сказал(а):
Если нет, то проблема скорости станет, когда энкодеры подключать начнете.
01 сек это ОЧЕНЬ МНОГО.
Проблема не встанет — и энкодеры и индикаторы отрабатывают идеально. Максим, вы не поняли, о каком таймере я говорил: 0.1 — это самый быстрый таймер, который можно самоcтоятельно создать в SIOC с целью написания дополнительной логики. К работе с энкодерами и индикаторами эти таймеры не имеют никакого отношения.
Ага, теперь понятно.
А есть где-ть видео, которое показывает скорости отработки энкодеров?
—
Блин, опять ерунду сказал (что-то не мой день сегодня): максимальная частота таймера в SIOC — 0.1с, то есть попробовал я его на частоте 100мс :crazy: Вобщем, чтоб замерять надо IOCP-клиента писать.
Но повторюсь: нигде, никогда и не в каком виде скорость IOCP-сервера не заставляла о ней задумываться.
Сообщение изменено: 601 (16 Февраль 2009 — 23:49)
ryko_m, 16.02.2009 22:51, сказал(а):
Максим, не сочтите за резкость, но вам надо чаще ходить в кино 😉
ryko_m, 16.02.2009 22:51, сказал(а):
Я отмою платы Displays II, поставлю новый БП для мастерплаты, иначе со старым она у меня глючит. Накидаю скриптик и сниму Вам видео — не проблема.
Мы в свое время тестировали энкодеры с СИОКОМ. Нам понравилось что отрабатывает четко и без ложных срабатываний. Но к симовской переменной мы его не вязали.
Но в любом случае, если делать радиостек Боинга, то изменение переменной надо будет «пропускать через сим», тут я согласен. Мы делали по-другому. Мы вязали энкодер с сиоковской переменной и индикацио смотрели по сиоковской переменной — там быстро и четко. Вопросов не было. А вот если вязать энкодер к сиоковской переменной, переменную загонять в сим, а дисплей читать из симовской переменной, тут другое дело. Но это мы проверим как только у меня очередная серия дисплейс заработает. :joystick:
Я кстати, тоже подумывал о симовской переменной в качестве таймера, но мне многовато будет секунды (
Будем пользовать свой, побыстрее, кстати, он и считает у нас скорость работы протоколов.