Метод уведомления с наименьшей задержкой между процессами под Linux

Я ищу IPC с наименьшей задержкой , которая позволяет перевести один процесс в спящий режим и позволить другому процессу его пробудить.

Я ищу метод с наименьшей задержкой. Некоторые возможные методы на данный момент:

  1. Запись байта в канал и чтение его из него.
  2. Запись байта в сокет и чтение из него.
  3. Отправка сигнала (kill) и его ожидание (sigwait)
  4. Использование sem_post / sem_wait

Есть ли другие лучшие идеи?

Любое решение, специфичное для Linux, также подойдет.

14
задан Artyom 2 November 2011 в 10:55
поделиться

1 ответ

Использование того же кода, предоставленного @Artyom, но в большем количестве аппаратных средств Мордена.

ЦП : i9-9900k, закрываясь C/S/P-state и политика масштабирования набора как performance, который поддерживает ядра в рабочем состоянии на максимальной частоте (~5GHz).

ОС : вытеснять-RT исправил Linux с kernel5.0.21, обеспечив лучше производительность в реальном времени.

привязка ЦП : два процесса apartly, работающий в двух изолированных ядрах , которые держатся подальше от несоответствующих процессов и прерывают AMSP.

Результаты:

Семафор (sem_wait/sem_post - ядро - futex):

sleep us     mean             minimum  median      %99
       1     1.75 ±0.1          1.60     1.74     1.82
      10     1.76 ±0.0          1.61     1.75     1.83
     100     2.12 ±0.3          1.59     2.24     2.42
    1000     2.46 ±0.3          1.75     2.47     2.56
   10000     2.45 ±0.1          2.11     2.44     2.54

Сигнал (kill/sigwait)

sleep us     mean            minimum   median      %99
       1     2.15 ±0.2          2.00     2.13     2.22
      10     2.12 ±0.2          1.93     2.11     2.19
     100     2.56 ±0.3          2.00     2.67     2.88
    1000     2.90 ±0.3          2.17     2.90     3.01
   10000     2.94 ±0.5          2.66     2.89     3.03

Канал (передают по каналу + запись-чтение)

sleep us     mean            minimum   median      %99
       1     2.05 ±0.2          1.88     2.03     2.15
      10     2.06 ±0.3          1.89     2.04     2.17
     100     2.54 ±0.4          1.88     2.63     2.87
    1000     2.98 ±0.3          2.27     2.98     3.09
   10000     2.98 ±0.3          2.69     2.96     3.07

Сокет (socketpair +write/read)

sleep us     mean            minimum   median      %99
       1     3.11 ±0.4          2.85     3.09     3.22
      10     3.14 ±0.1          2.92     3.14     3.25
     100     3.66 ±0.5          2.92     3.74     4.01
    1000     4.03 ±0.4          3.28     4.03     4.17
   10000     3.99 ±0.4          3.64     3.96     4.10

Как ссылочное активное ожидание:

sleep us     mean            minimum   median      %99
       1     0.07 ±0.1          0.06     0.07     0.07
      10     0.07 ±0.1          0.06     0.07     0.07
     100     0.07 ±0.0          0.06     0.07     0.08
    1000     0.09 ±0.1          0.07     0.08     0.09
   10000     0.09 ±0.1          0.07     0.09     0.09
0
ответ дан 1 December 2019 в 12:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: