GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Benachrichtigungsmethode mit niedrigster Latenz zwischen Prozessen unter Linux

Verwenden des gleichen Codes von @Artyom, aber in modernerer Hardware.

Prozessor :i9-9900k , schließen Sie den C/S/P-Zustand und legen Sie die Skalierungsrichtlinie als performance fest wodurch die Kerne mit der maximalen Frequenz (~5 GHz) laufen.

Betriebssystem :Preempt-RT gepatchtes Linux mit Kernel 5.0.21 , was eine bessere Echtzeitleistung bietet.

CPU-Affinität :zwei Prozesse, die separat in zwei isolierten Kernen ausgeführt werden , die von irrelevanten Prozessen fernhalten und AMSP unterbrechen.

Ergebnisse:

Semaphor (sem_wait/sem_post - Kernel - 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

Signal (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

Pipe (Pipe + Schreiben/Lesen)

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

Socket (Socketpaar +Schreiben/Lesen)

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

Als Referenz fleißiges Warten:

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

Generell... Es gibt fast keinen Unterschied zwischen den OS-Methoden.

Einrichtung:

  1. Zwei Prozesse mit Affinität zu zwei verschiedenen CPUs.
  2. Ein Prozess schläft (Nanoschlaf) für N Mikrosekunden, misst die aktuelle Zeit und benachrichtigt dann den anderen Prozess.
  3. Andere Prozessaufwecke messen die aktuelle Zeit und vergleichen sie mit der Zeit des Clients.
  4. Durchschnitt, Standardabweichung, Median und Perzentil 95 werden über 1.000 Stichproben nach dem Aufwärmen mit 100 Benachrichtigungen berechnet.
  5. Betriebssystem:Linux 2.6.35 x86_64
  6. Prozessor:Intel i5 M460

Ergebnisse:

Semaphor (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

Signal (kill/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

Pipe (Pipe + Schreiben/Lesen)

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

Socket (Socketpaar +Schreiben/Lesen)

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

Als Referenz fleißiges Warten:

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

Linux
  1. Linux – Netzwerkzugriff eines Prozesses blockieren?

  2. Linux – ein „Subreaper“-Prozess?

  3. Einführung in Linux-Threads – Teil I

  4. Linux-Startvorgang

  5. Linux-CreateProcess?

So beenden Sie einen Prozess in Linux

Ps-Befehl in Linux (Prozesse auflisten)

Pstree-Befehl unter Linux

Kill-Befehl unter Linux

Prozessüberwachung unter Linux

Wie man einen Prozess unter Linux beendet