faz / poderia algo como um contêiner Linux em tempo real existe?

2

Não ter nenhuma experiência com o Linux em tempo real (por favor, tenha paciência comigo se estou perguntando algo estúpido), mas tendo algum conhecimento sobre containers Linux (no sentido mais amplo), estou pensando:

Existe alguma maneira de configurar um contêiner do Linux (ou seja, árvore de processo isolado por cgroups / namespace) para ter características em tempo real - idealmente ao ponto de ser adequado para controle de máquina industrial / robótica e similares?

Talvez não esteja relacionado a contêineres de forma alguma e sempre oferece recursos em tempo real de processos únicos? OTOH, tal contêiner pode conter uma distribuição Linux completamente diferente (RT?) E pode ter acesso exclusivo a um núcleo de um processador multi-core ....? Apenas brainstorming ...

Não estou tendo nenhum caso de uso concreto no momento, apenas me perguntando se / como o Linux poderia substituir um PLC .

    
por Udo G 18.12.2015 / 15:16

1 resposta

2

Possivelmente, mas provavelmente não, e depende dos seus requisitos.

"Realtime" refere-se a um conceito de baixa latência - isto é, em teoria, significa "sem latência", mas, na prática, alcançar a latência de não é impossível de alcançar; afinal de contas, sempre há algum processamento a ser feito antes que uma entrada possa gerar algum tipo de saída, e assim sempre haverá uma latência alguma , mesmo que seja apenas um ciclo de clock.

No entanto, há latência e latência, e são sete coisas diferentes; -)

É possível reduzir a latência em um sistema Linux, alterando a prioridade de um processo ou sua fila de agendamento, e / ou alternando para uma biblioteca C de baixa latência, e isso já atenderá aos requisitos de algumas formas de configuração "em tempo real". Se isso é tudo o que você precisa fazer, então, usar um contêiner permitirá separar as partes de baixa latência do seu sistema do restante (desde que você permita que os processos desse contêiner modifiquem sua prioridade de agendamento), e você não deve vejo muita diferença.

Pode ser que você precise fazer mais, no entanto. Existem mais maneiras de modificar sua latência. Em ordem de "menos trabalho" para "mais trabalho", eu sei de:

  • Existem algumas opções de inicialização na maioria dos kernels de distribuição padrão que você pode definir, que alteram a maneira como o agendador funciona para que a latência seja reduzida (embora a média desempenho possa sofrer)
  • Há várias opções de tempo de compilação que você pode definir também (embora muitas tenham sido alteradas para as opções de tempo de inicialização, ainda restam algumas delas)
  • Há (ou pelo menos, costumava ser na última vez que eu verifiquei) vários patches de baixa latência flutuando que permitem que os requisitos em tempo real ainda mais drásticos sejam atendidos.

Se você precisar de um desses, um contêiner não irá ajudá-lo, já que um contêiner ainda usa o mesmo kernel que o resto do seu sistema.

Tendo dito tudo isso, embora seja possível, em algumas circunstâncias, executar um aplicativo em tempo real em um contêiner junto com outras coisas no mesmo sistema, eu recomendaria não fazê-lo. Executar várias coisas no mesmo sistema provavelmente será a latência dos aplicativos em execução no sistema; Portanto, mesmo que você permita que um contêiner faça o que precisa ser feito, talvez o sistema não consiga acompanhá-lo.

    
por 18.12.2015 / 16:37