Улучшаем IPC

Internal structure and you change requests/suggestions
  • Nasarus wrote:1) Оконный сервер. Программа определяет буфер окна (что-то наподобие canvas'а), рисует в нём, потом посылает сигнал обновления своего окна. Окно изменено. Да, конечно это можно реализовать через нынешние IPC функции, но если программа будет делать тысячи таких обновлений в минуту (например, видеоигра или медиаплеер) скорость будет очень медленная. Через сигналы же, всё будет куда быстрее ;).
    Хочу такие FPS :)

    Статья по теме на английском, ну или её русскоязычный вариант, кому как удобнее.
    Из перечисленного там у нас есть обмен сообщениями и разделяемая память, сокеты пока только в качестве планов на будущее в сетевой ветке ядра http://wiki.kolibrios.org/wiki/New_stack.
  • Я за улучшение IPC.

    Однако пока столкнулся только с одной проблемой: Как отправитель может получить PID/TID получателя? (Я пока это решаю посредством именованной разделяемой памяти - но это топорное решение ... )

    Цитата: "Да, конечно это можно реализовать через нынешние IPC функции, но если программа будет делать тысячи таких обновлений в минуту (например, видеоигра или медиаплеер) скорость будет очень медленная."

    "Здравый смысл" мне подсказывает, что копирование скажем 16 байт потребует порядка 4*4 обращений к памяти. Если даже всё будет совсем плохо, то это всё равно порядка 200 - 300 тактов: существенно меньше издержек двойного переключения контекста. Обновление экрана потребует на пару порядков больше тактов процессора. Где я ошибаюсь?
  • FireWall wrote:Я за улучшение IPC.

    Однако пока столкнулся только с одной проблемой: Как отправитель может получить PID/TID получателя? (Я пока это решаю посредством именованной разделяемой памяти - но это топорное решение ... )
    Вроде как этот метод самый надежный.
    FireWall wrote: Цитата: "Да, конечно это можно реализовать через нынешние IPC функции, но если программа будет делать тысячи таких обновлений в минуту (например, видеоигра или медиаплеер) скорость будет очень медленная."

    "Здравый смысл" мне подсказывает, что копирование скажем 16 байт потребует порядка 4*4 обращений к памяти. Если даже всё будет совсем плохо, то это всё равно порядка 200 - 300 тактов: существенно меньше издержек двойного переключения контекста. Обновление экрана потребует на пару порядков больше тактов процессора. Где я ошибаюсь?
    Вызов, например, процедуры отправки IPC-сообщения помимо кучи проверок содержимого слота, переполнения буфера, занятости (блокировки) буфера, ещё и выделяет память ядра и освобождает её, и "Здравый смысл" мне подсказывает, что одна посылка такого сообщения обходится куда больше, чем в 200 - 300 тактов. :)
    ушёл...
  • Asper wrote: Из перечисленного там у нас есть обмен сообщениями и разделяемая память, сокеты пока только в качестве планов на будущее в сетевой ветке ядра http://wiki.kolibrios.org/wiki/New_stack.
    Файлы забыл :D
    ушёл...
  • FireWall wrote:(Я пока это решаю посредством именованной разделяемой памяти - но это топорное решение ... )
    Почему же топорное? IBM со своей z/OS не стала бы использовать разделяемую память, если бы это было так - в IBM не последние дураки работают. К тому же разделяемая память на сегодня обеспечивает производительность минимум на порядок превышающий текущую реализацию IPC.
  • Так на всякий случай :

    Топорным решением я считаю использование именной разделяемой памяти для получения (только!) одного числа - PID/TID процесса - держателя буфера IPC.

    Цитата: "Вызов, например, процедуры отправки IPC-сообщения помимо кучи проверок содержимого слота, переполнения буфера, занятости (блокировки) буфера, ещё и выделяет память ядра и освобождает её"

    Тогда надо также подумать, как усовершенствовать уже имеющийся механизм отправки сообщений:
    - проектируемое, для очень маленьких "сообщений - сигналов";
    - усовершенствованное имеющееся, для средних сообщений с буфером, не пересекающим "межстраничный барьер" (именной доступ + непосредственное копирование из "буфера" отправителя в "буфер" получателя);
    - именная разделяемая память, для больших данных (> одной страницы).
  • Who is online

    Users browsing this forum: No registered users and 24 guests