Как EDAC получает уведомление об ошибке? из биоса или контроллера памяти?

Настройка

Я установил следующееDockerfile:

$ more Dockerfile
From centos
ADD run.sh /tmp/run.sh
RUN chmod +x /tmp/run.sh
ENTRYPOINT ["/tmp/run.sh"]

Настроить сценарий,run.sh:

$ cat run.sh
while true; do sleep 15 ; echo "background"; done &

while true; do sleep 12 ; echo "foreground"; done

Построил:

$ docker build -t sleeper.
Sending build context to Docker daemon 7.791 MB
Step 1/4 : FROM centos
 ---> 49f7960eb7e4
Step 2/4 : ADD run.sh /tmp/run.sh
 ---> b4099de53780
Removing intermediate container 1ce8e3a1dac5
Step 3/4 : RUN chmod +x /tmp/run.sh
 ---> Running in e410429a6cba

 ---> 06789467e636
Removing intermediate container e410429a6cba
Step 4/4 : ENTRYPOINT /tmp/run.sh
 ---> Running in ad8b847b505f
 ---> a2415df63f99
Removing intermediate container ad8b847b505f
Successfully built a2415df63f99

Пример

Потом запустили:

$ docker run -dit sleeper
28c19c338e6e6177529cf989f42c7f14b17f1c705a61f5244d5350f0ab8f8364

Затем он повторяется, показывая:

foreground 
background 
foreground 
background

Теперь, когда я смотрю на это, я вижу, что оно не ложится спать,несмотря на команды sleepв конце концов «умирает»:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
28c19c338e6e        sleeper             "/tmp/run.sh"       About a minute ago   Up About a minute                       focused_lumiere

Сверху видно, что этот контейнер находился в поднятом состоянии более 1 минуты. Вот как ps auxfвыглядит внутри контейнера:

$ ps auxf
...
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        24  0.0  0.1  11828  2964 pts/1    Ss   16:00   0:00 /bin/bash
root        58  0.0  0.1  51712  3432 pts/1    R+   16:01   0:00  \_ ps auxf
root         1  0.0  0.1  11692  2572 pts/0    Ss+  15:58   0:00 /bin/bash /tmp/
root         5  0.0  0.1  11696  2272 pts/0    S+   15:58   0:00 /bin/bash /tmp/
root        56  0.0  0.0   4368   636 pts/0    S+   16:01   0:00  \_ sleep 15
root        57  0.0  0.0   4368   664 pts/0    S+   16:01   0:00 sleep 12

Теперь, если мы убьем фон sleep 15вот так:

$ kill 56

И запустить ещеdocker ps:

$ docker ps
...
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        24  0.0  0.1  11828  2964 pts/1    Ss   16:00   0:00 /bin/bash
root        60  0.0  0.1  51712  3344 pts/1    R+   16:01   0:00  \_ ps auxf
root         1  0.0  0.1  11692  2572 pts/0    Ss+  15:58   0:00 /bin/bash /tmp/
root         5  0.0  0.1  11696  2272 pts/0    S+   15:58   0:00 /bin/bash /tmp/
root        59  0.0  0.0   4368   636 pts/0    S+   16:01   0:00  \_ sleep 15
root        57  0.0  0.0   4368   664 pts/0    S+   16:01   0:00 sleep 12

Мы видим, что цикл while, охраняющий наш фоновый sleep 15процесс, выполнил свою работу и перезапустил другой sleep 15.

0
02.09.2020, 10:23
1 ответ

Это зависит от того, оба варианта возможны.

Контроллеры памяти сообщают об ошибках один раз; чтение их очищает их. Таким образом, если системная прошивка и операционная система пытаются обрабатывать отчеты EDAC, возникают гонки и ошибки могут быть пропущены. Таким образом, правильно -сконфигурированная система будет либо обрабатывать отчеты EDAC напрямую, сохраняя микропрограмму системы вне цикла, либо использовать GHES (соответствующий драйвер ACPI )для получения ошибок от системной микропрограммы (, это « прошивка в первую очередь» ).

С «прямым» драйвером EDAC операционная система обрабатывает исключение проверки машины (MCE )от контроллера памяти и делает все необходимое. С драйвером GHES системная прошивка обрабатывает MCE и информирует операционную систему.

В зависимости от сценария вы увидите разные журналы. Журналы загрузки должны сообщить вам, какова конфигурация, и если произойдет ошибка памяти, вы увидите «событие программного обеспечения» в журналах в первом режиме встроенного ПО, в противном случае — «событие оборудования».

Настройки могут быть комбинацией настроек микропрограммы и конфигурации операционной системы. В большинстве «низких» -конечных систем с поддержкой ECC -отсутствует соответствующая конфигурация микропрограммы (, есть только доступ к журналам ), и все это зависит от операционной системы. Конечные серверы более высокого уровня -будут иметь настройки в своей конфигурации прошивки и описание того, как настроить их (и операционную систему )в их руководстве.

0
18.03.2021, 23:08

Теги

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