Linux下进程之间的最低延迟通知方法

我正在寻找允许一个进程进入hibernate状态并允许其他进程唤醒的最低延迟 IPC。

我正在寻找最低延迟的方法。 迄今为止的一些可能的方法

  1. 写一个字节到pipe道并从中读取。
  2. 写一个字节到套接字并从中读取。
  3. 发送信号(杀死)并等待(sigwait)
  4. 使用sem_post / sem_wait

任何其他更好的想法?

任何Linux特定的解决scheme也是好的。

Solutions Collecting From Web of "Linux下进程之间的最低延迟通知方法"

一般来说…操作系统方法几乎没有区别。

建立:

  1. 两个进程与两个不同的CPU有亲和力。
  2. 一个进程睡眠(nanosleep)N微秒测量当前时间,然后通知其他进程。
  3. 其他流程唤醒度量当前时间,并将其与客户时间进行比较。
  4. 平均值,标准偏差,中位数和百分位数95是在100次通知预热后计算的​​1K样本。
  5. 操作系统:Linux 2.6.35 x86_64
  6. CPU:Intel i5 M460

结果:

信号量(sem_wait / sem_post – kernel – futex):

sleep us mean median %95 1 4.98 ±18.7 3.78 5.04 10 4.14 ±14.8 3.54 4.00 100 20.60 ±29.4 22.96 26.96 1000 49.42 ±37.6 30.62 78.75 10000 63.20 ±22.0 68.38 84.38 

信号(杀死/ sigwait)

 sleep us mean median %95 1 4.69 ±3.8 4.21 5.39 10 5.91 ±14.8 4.19 7.45 100 23.90 ±17.7 23.41 35.90 1000 47.38 ±28.0 35.27 81.16 10000 60.80 ±19.9 68.50 82.36 

管道(管道+写入/读取)

 sleep us mean median %95 1 3.75 ±5.9 3.46 4.45 10 4.42 ±3.5 3.84 5.18 100 23.32 ±25.6 24.17 38.05 1000 51.17 ±35.3 46.34 74.75 10000 64.69 ±31.0 67.95 86.80 

套接字(socketpair +写/读)

 sleep us mean median %95 1 6.07 ±3.2 5.55 6.78 10 7.00 ±7.1 5.51 8.50 100 27.57 ±14.1 28.39 50.86 1000 56.75 ±25.7 50.82 88.74 10000 73.89 ±16.8 77.54 88.46 

作为参考忙碌的等待:

 sleep us mean median %95 1 0.17 ±0.5 0.13 0.23 10 0.15 ±0.3 0.13 0.19 100 0.17 ±0.3 0.16 0.21 1000 0.22 ±0.1 0.18 0.35 10000 0.38 ±0.3 0.30 0.78