Про ИОКАРДс и ФСУПИК

Итак прошу собраться всех знающихся на этих двух протокалах:
Сначала пару вопросов:
1. Кто сказал что скорость работы фсупика с симом более 16 мс? Где это написано/проверено/доказано?
2. Тот же вопрос но касающийся ИОКАРДсов, где указана скорость обмена данными с иосервером и его с симом?…
3. Кто из разработчиков роутеров(или просто юзеров) какой скорости вообще добивался в работе с этими протоколами?

Я не хочу создавать тему что круче из них, но как я понимаю они используют одну и ту же библиотеку (указанную в СДК), но каждый работает по-своему, хотелось бы окончательно найти ответы о подводных камнях и о слабых сторонах того и другого.

emoji

Ответов: 19

По первому вопросу.
Скорость записи или скорость чтения?
Скорость чтения можно сделать очень высокой, у меня получается. А вот скорость записи — это полная жопа.
Сама функция записи работает быстро, но, вот если для чтения, я могу в цикле прочитать кучу параметров и сделать FSUIPC_Process после цикла, то для записи — FSUIPC_Process нужно делать после каждой FSUIPC_Write, вот тут и начинаются тормоза. Добиться скорости, больше чем 10 раз в секунду, я так и не смог emoji Главным тормозящим фактором является FSUIPC_Process. Не совсем понимаю, почему автор избрал такой сложный механизм обмена данными, когда можно было, просто, сделать мап файл — дать людям смещения и все. Там скорости сотни раз в секунду получаются легко.
По второму вопросу ничего не знаю.
Круче всего работать напрямую с памятью сима emoji

Цитата(Bird @ 14.02.2009 22:20)
Я не хочу создавать тему что круче из них, но как я понимаю они используют одну и ту же библиотеку (указанную в СДК),


FSUIPC ее не использует, по крайней мере для 9ки.

Цитата(ryko_m @ 15.02.2009 00:27)
По первому вопросу.
Скорость записи или скорость чтения?
Скорость чтения можно сделать очень высокой, у меня получается. А вот скорость записи — это полная жопа.
Сама функция записи работает быстро, но, вот если для чтения, я могу в цикле прочитать кучу параметров и сделать FSUIPC_Process после цикла, то для записи — FSUIPC_Process нужно делать после каждой FSUIPC_Write, вот тут и начинаются тормоза.

А Вы попробуйте так-же как с чтением ) Поназаписывать а потом процесс(). У меня работает =) 15 мс или иногда даже меньше) Желательно конечно из отдельного потока.. =)

Цитата
Круче всего работать напрямую с памятью сима emoji


А как при этом быть с потокобезопасностью? Сим же тоже по-идее хочет иметь монопольный доступ к своим переменным? =) Как оно вообще реализуется?

Цитата(adskdn @ 15.02.2009 23:42)

Цитата(ryko_m @ 15.02.2009 00:27)
По первому вопросу.
Скорость записи или скорость чтения?
Скорость чтения можно сделать очень высокой, у меня получается. А вот скорость записи — это полная жопа.
Сама функция записи работает быстро, но, вот если для чтения, я могу в цикле прочитать кучу параметров и сделать FSUIPC_Process после цикла, то для записи — FSUIPC_Process нужно делать после каждой FSUIPC_Write, вот тут и начинаются тормоза.

А Вы попробуйте так-же как с чтением ) Поназаписывать а потом процесс(). У меня работает =) 15 мс или иногда даже меньше) Желательно конечно из отдельного потока.. =)

Цитата
Круче всего работать напрямую с памятью сима emoji


А как при этом быть с потокобезопасностью? Сим же тоже по-идее хочет иметь монопольный доступ к своим переменным? =) Как оно вообще реализуется?

можно простой пример?
Кусок кода, рабочий, чтоб, предположим, менял по кругу частоту ком ?
Я думаете не пробовал так?
Не работает, у меня.

реализуется, очень просто, через вин АПИ — он сам обо все (почти) заботится. смотрите сдк на предмер readprocesmemory и writeprocesmemory
Тока к переменным сима это отношение не имеет. Это имеет отношение к памяти сима.

Сообщение отредактировал ryko_m — 15.02.2009 23:54

Женя, корректнее было бы говорить о сравнении IOCP-сервера и FSUIPC (разработчики IOCards умудрились так спутать понятия в своих доках, что без бутылки точно никуда emoji )

По теме:

Нигде в документации к IOCP-серверу я не встречал данных о скорсти чтения/записи в Сим. По опыту практического использования могу сказать следующее:

SIOC через IOCP-сервер способен считывать каждое пятое значение симовского таймера, меняющего своё значение 100 раз в секунду. Итого на чтение имеем частоту обновления 20ms.

На запись экспериментов и замеров никогда не делал, поскольку нужды не возникало — всё просто (и на глаз мгновенно) отрабатывало…

С FSUIPC всё было значительно хуже…

Цитата(601 @ 16.02.2009 04:00)

SIOC через IOCP-сервер способен считывать каждое пятое значение симовского таймера, меняющего своё значение 100 раз в секунду. Итого на чтение имеем частоту обновления 20ms.

На запись экспериментов и замеров никогда не делал, поскольку нужды не возникало — всё просто (и на глаз мгновенно) отрабатывало…

С FSUIPC всё было значительно хуже…

Только что специально проверил еще одним способом — 14 мс =) С мсфс 2004.
С фсх точно не мерял, но на глаз еще быстрее)

ту рико_м:

Пример привести не смогу т.к. оч много кода и выдрать работающий кусок сложно)
Но все именно так как я написал) Просто чтение-запись, все что нужно, в конце всего этого ПРОЕЦСС();
Писано на сишарп, использовал обертку для фсюписи длл отсюда:

http://forums.simflight.com/viewtopic.php?…d9837e1550b5709

Цитата(601 @ 16.02.2009 07:00)
Женя, корректнее было бы говорить о сравнении IOCP-сервера и FSUIPC (разработчики IOCards умудрились так спутать понятия в своих доках, что без бутылки точно никуда emoji )

По теме:

Нигде в документации к IOCP-серверу я не встречал данных о скорсти чтения/записи в Сим. По опыту практического использования могу сказать следующее:

SIOC через IOCP-сервер способен считывать каждое пятое значение симовского таймера, меняющего своё значение 100 раз в секунду. Итого на чтение имеем частоту обновления 20ms.

На запись экспериментов и замеров никогда не делал, поскольку нужды не возникало — всё просто (и на глаз мгновенно) отрабатывало…

С FSUIPC всё было значительно хуже…


Яков, 20 мс для иосервера — это конечно уже много, к сожалению…
На ФСХ через фсупик получается 3-10 мс (странно не правда ли?). А «на глаз» оно бывает обманчиво ))
Кстати, сравнили работу м-джоя и АЦП с фсупиком — так у м-джоя можно войти в противофазу работы железного и ВК штурвала если им очень быстро дергать, у нас я такого добиться не смог! Вы ставили такие эксперементы с иокардсами? — это возможно один из визуальных тестов на скорость.

Цитата
способен считывать каждое пятое значение симовского таймера, меняющего своё значение 100 раз в секунду. Итого на чтение имеем частоту обновления 20ms.


1/5 секунды равна 200 ms, а не 20 (потому как 1 сек = 1000 ms, а один цикл таймера у Вас занимает 10 ms).

Цитата(LifeBurner @ 16.02.2009 16:29)

Цитата
способен считывать каждое пятое значение симовского таймера, меняющего своё значение 100 раз в секунду. Итого на чтение имеем частоту обновления 20ms.


1/5 секунды равна 200 ms, а не 20 (потому как 1 сек = 1000 ms, а один цикл таймера у Вас занимает 10 ms).

Да я вообще вчера какую-то ерунду написал — поздно уже было emoji

Специальных замеров скорости работы IOCP-сервера я никогда не проводил, поскольку с момента отказа от FSUIPC все проблемы связанные со скоростью работы просто ушли. Что либо замерять или оптимизировать не было никакой нужды.

Увидев вопрос Жени, я просто решил посмотреть с какой частотой приходит в Сиок значение симовской переменной ELAPSED_SECONDS. Смотрел по логу, и увидел, что значения приходят с дикретностью 0.05 сек, т.е. 50мс или 20 раз в секунду. У меня есть подозрение, что с такой дискретностью меняется значение ELAPSED_SECONDS в самом симе, а следовательно судить о скорости IOCP-сервера по этому эксперименту нельзя.

Попробовал, с частотой 10мс и на запись и на чтение IOCP-сервер отрабатывает без проблем. Более высокие частоты попробовать не смог, поскольку SIOC не умеет создавать таймеры быстрее — для этого нужно уже на каком-нибудь Си специальный клиент писать…


Блин, опять ерунду сказал (что-то не мой день сегодня): максимальная частота таймера в SIOC — 0.1с, то есть попробовал я его на частоте 100мс emoji Вобщем, чтоб замерять надо IOCP-клиента писать.

Но повторюсь: нигде, никогда и не в каком виде скорость IOCP-сервера не заставляла о ней задумываться.

Сообщение отредактировал 601 — 16.02.2009 21:49

Цитата(601 @ 16.02.2009 21:25)
Попробовал, с частотой 10мс и на запись и на чтение IOCP-сервер отрабатывает без проблем. Более высокие частоты попробовать не смог, поскольку SIOC не умеет создавать таймеры быстрее — для этого нужно уже на каком-нибудь Си специальный клиент писать…


Блин, опять ерунду сказал (что-то не мой день сегодня): максимальная частота таймера в SIOC — 0.1с, то есть попробовал я его на частоте 100мс emoji Вобщем, чтоб замерять надо IOCP-клиента писать.

Но повторюсь: нигде, никогда и не в каком виде скорость IOCP-сервера не заставляла о ней задумываться.

У вас есть в кокпите индикаторы, управляемые энкодерами?
Если нет, то проблема скорости станет, когда энкодеры подключать начнете.
01 сек это ОЧЕНЬ МНОГО.

Сообщение отредактировал ryko_m — 16.02.2009 21:59

Цитата(601 @ 17.02.2009 00:25)
Блин, опять ерунду сказал (что-то не мой день сегодня): максимальная частота таймера в SIOC — 0.1с, то есть попробовал я его на частоте 100мс emoji Вобщем, чтоб замерять надо IOCP-клиента писать.

Нее…. что-то мне не верится в 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)
Блин, опять ерунду сказал (что-то не мой день сегодня): максимальная частота таймера в SIOC — 0.1с, то есть попробовал я его на частоте 100мс emoji Вобщем, чтоб замерять надо IOCP-клиента писать.

Нее…. что-то мне не верится в 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 с целью написания дополнительной логики. К работе с энкодерами и индикаторами эти таймеры не имеют никакого отношения.

Ага, теперь понятно.
А есть где-ть видео, которое показывает скорости отработки энкодеров?

Цитата(ryko_m @ 16.02.2009 22:51)
А есть где-ть видео, которое показывает скорости отработки энкодеров?

Максим, не сочтите за резкость, но вам надо чаще ходить в кино 😉

Коллеги, не сорьтесь! emoji

Цитата(ryko_m @ 16.02.2009 22:51)
А есть где-ть видео, которое показывает скорости отработки энкодеров?


Я отмою платы Displays II, поставлю новый БП для мастерплаты, иначе со старым она у меня глючит. Накидаю скриптик и сниму Вам видео — не проблема.
Мы в свое время тестировали энкодеры с СИОКОМ. Нам понравилось что отрабатывает четко и без ложных срабатываний. Но к симовской переменной мы его не вязали.
Но в любом случае, если делать радиостек Боинга, то изменение переменной надо будет «пропускать через сим», тут я согласен. Мы делали по-другому. Мы вязали энкодер с сиоковской переменной и индикацио смотрели по сиоковской переменной — там быстро и четко. Вопросов не было. А вот если вязать энкодер к сиоковской переменной, переменную загонять в сим, а дисплей читать из симовской переменной, тут другое дело. Но это мы проверим как только у меня очередная серия дисплейс заработает. emoji