GNU/Linux >> Tutoriales Linux >  >> Linux

Método de notificación de latencia más baja entre procesos en Linux

Usando el mismo código provisto por @Artyom, pero en un hardware más moderno.

CPU :i9-9900k , cerrando el estado C/S/P y configurando la política de escalado como performance que mantiene los núcleos funcionando a la frecuencia máxima (~5 GHz).

SO :Preempt-RT parchó Linux con kernel5.0.21 , proporcionando un mejor rendimiento en tiempo real.

Afinidad de CPU :dos procesos ejecutándose por separado en dos núcleos aislados , que evita procesos irrelevantes e interrumpe AMSP.

Resultados:

Semáforo (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

Señal (matar/esperar)

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

Tubería (tubería + escribir/leer)

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

Zócalo (par de zócalos + escritura/lectura)

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

Como referencia ocupado esperando:

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

En general... Casi no hay diferencia entre los métodos del sistema operativo.

Configuración:

  1. Dos procesos con afinidad a dos CPU diferentes.
  2. Un proceso duerme (nanosleep) durante N microsegundos, mide la hora actual y luego notifica a otro proceso.
  3. Otro proceso despierta mide la hora actual y la compara con la hora del cliente.
  4. El promedio, la desviación estándar, la mediana y el percentil 95 se calculan sobre 1000 muestras después del calentamiento en 100 notificaciones.
  5. SO:Linux 2.6.35 x86_64
  6. CPU:Intel i5 M460

Resultados:

Semáforo (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

Señal (matar/esperar)

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

Tubería (tubería + escribir/leer)

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

Zócalo (par de zócalos + escritura/lectura)

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

Como referencia ocupado esperando:

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:¿cómo leer desde /proc/$pid/mem en Linux?

  2. Introducción a los subprocesos de Linux - Parte I

  3. Proceso de arranque de Linux

  4. ¿Linux CreateProcess?

  5. Crear un demonio en Linux

Cómo matar un proceso en Linux

Comando Ps en Linux (Lista de Procesos)

Comando Pstree en Linux

Comando matar en Linux

Supervisión de procesos en Linux

Cómo MATAR un proceso en Linux