Brincando com OurBMC Edição 7: Comunicação entre processos OpenBMC D-Bus

Introdução da coluna: "Brincando com OurBMC" é uma coluna de compartilhamento de conhecimento criada pela comunidade OurBMC. Ela se concentra principalmente no compartilhamento de conhecimento básico relacionado à comunidade e à tecnologia full-stack BMC, cobrindo todos os aspectos da transferência de conhecimento, desde princípios teóricos até práticos. operações. A comunidade OurBMC ajudará os desenvolvedores a obter uma compreensão profunda da cultura, dos conceitos e das características da comunidade por meio da coluna "Fun OurBMC" e aprimorará a compreensão dos desenvolvedores sobre a tecnologia full-stack da BMC.

Bem-vindos a todos para prestarem atenção à coluna "Fun OurBMC" e explorarem juntos o maravilhoso mundo da comunidade OurBMC. Ao mesmo tempo, convidamos sinceramente todos os desenvolvedores a contribuir para a coluna "Playing OurBMC", aprender e progredir juntos e transformar a coluna em um jardim de conhecimento que reúne sabedoria e estimula a criatividade.

No  OpenBMC  , a comunicação entre processos (IPC) é um componente importante e o D-Bus é amplamente utilizado como um mecanismo IPC leve e eficiente. Esta edição terá como foco o tecelão desta rede de comunicação – D-Bus. Primeiramente são apresentadas as interfaces e principais conceitos fornecidos pelo D-Bus. Em seguida, é realizada uma análise mais aprofundada do D-Bus com base nas aplicações da comunidade OpenBMC. Através da análise do D-Bus, esperamos ajudar os leitores a compreender e utilizar melhor este poderoso mecanismo IPC para melhorar o desempenho geral e a estabilidade do sistema.

Introdução ao barramento D

D-Bus (Desktop Bus) é um mecanismo avançado de comunicação entre processos (IPC) amplamente utilizado em sistemas operacionais Linux. Ele permite que aplicativos de software se comuniquem de forma síncrona ou assíncrona, enviando e recebendo mensagens de processo cruzado. Em comparação com mecanismos IPC tradicionais (como PIPE/FIFO/Socket/memória compartilhada/SysvIpc), o D-Bus fornece baixa latência, baixa sobrecarga e baixa sobrecarga. mecanismo IPC de alta disponibilidade, ocultando a complexidade do mecanismo IPC subjacente, fornecendo aos desenvolvedores uma interface mais avançada e fácil de usar:

  • Chamada de método:

Usado para implementar chamadas de métodos (funções) entre processos e combinado com ferramentas de geração de código, pode tornar as chamadas de funções entre processos quase indistinguíveis das chamadas de funções comuns.

  • Sinal:

O mecanismo de comunicação do modelo publicar-assinar (Pub-Sub), o processo de envio registra e envia sinais (transmissão), e o processo de recebimento assina os sinais nos quais está interessado.

  • Propriedades:

Ele pode ser comparado ao Getter-Setter de variáveis ​​de membro em uma classe C++. Se o processo A fornecer uma propriedade, outros processos poderão ler e gravar a propriedade por meio do D-Bus.

Ao mesmo tempo, os seguintes conceitos são usados ​​para determinar o objeto específico da chamada D-Bus:

  • Nome do ônibus:

O nome de um serviço registrado no barramento é um nome exclusivo usado por cada aplicação (ou objeto de comunicação) para se identificar. Este nome é globalmente exclusivo para o sistema D-Bus e pode, portanto, ser usado por outras aplicações para referência e comunicação. Pode ser entendido como um endereço “IP”, de forma análoga ao nome de uma biblioteca lib.

  • Caminho do objeto:

Usado para identificar objetos dentro de um aplicativo ou serviço específico no D-Bus , semelhante a um caminho em um sistema de arquivos, mas usado para objetos D-Bus em vez de arquivos. Os caminhos dos objetos geralmente seguem uma estrutura hierárquica para facilitar a organização e o gerenciamento. A convenção de nomenclatura para caminhos de objetos é /com/example/MusicPlayer1, que representa o objeto raiz em um aplicativo chamado "MusicPlayer1". Pode ser comparado a objetos da mesma classe (objetos) em C++.

  • Interface:

A interface define as funções fornecidas pelo objeto D-Bus, incluindo métodos, propriedades e sinais. Uma interface pode ser implementada por vários objetos e usada por vários aplicativos ou serviços. Uma interface é semelhante a uma classe ou arquivo de cabeçalho em C++, que descreve o comportamento e as propriedades acessíveis de um objeto. No D-Bus, um objeto pode implementar múltiplas interfaces, e cada interface contém um conjunto de métodos, propriedades e sinais. Esses métodos e propriedades podem ser chamados ou acessados ​​por outras aplicações ou serviços através do D-Bus.

Aplicações práticas do barramento D

No OpenBMC, o D-Bus é amplamente utilizado em cenários como coleta de dados de sensores, gerenciamento de falhas de hardware e interfaces de gerenciamento remoto. Torna a comunicação entre os diferentes componentes simples e eficiente, proporcionando uma forte garantia para o funcionamento estável do sistema.

A seguir está uma análise mais aprofundada do D-Bus com base nas aplicações reais da comunidade OpenBMC.

  • Ferramenta D-Bus (busctl)

busctl é uma ferramenta de linha de comando fornecida pelo systemd para interagir com o barramento do sistema D-Bus. Use a ferramenta busctl para inserir o nome do barramento, caminho do objeto, interface e outros parâmetros para obter informações detalhadas fornecidas pelo objeto D-Bus, incluindo propriedades, sinais, chamadas de método (método), etc., para que os usuários possam ter uma compreensão mais intuitiva de vários conceitos abstratos em D-Bus.

  • Propriedade

Tomando o programa adcsensor como exemplo, este processo identifica o chip SOC através do arquivo de configuração, converte o valor original do ADC fornecido pelo kernel em tensão e o exibe na forma de D-Bus de acordo com o sensor descrito no arquivo de configuração:

Nome do barramento: xyz.openbmc_project.ADCSensor

Caminho do objeto: /xyz/openbmc_project/sensors/voltage/xxx, vários caminhos de objeto são gerados de acordo com o arquivo de configuração no nível da placa para representar o sensor de tensão.

Interface 1: xyz.openbmc_project.Sensor.Value

Propriedades fornecidas por esta interface:

MaxValue (tipo duplo): valor máximo do sensor

MinValue (tipo duplo): valor mínimo do sensor

Unidade (tipo string): tipo de valor, volts

Valor (tipo duplo): valor atual do sensor

Interface 2: xyz.openbmc_project.Sensor.Threshold.Critical

Propriedades fornecidas por esta interface:

CriticalAlarmHigh (tipo bool): se o limite de alta gravidade foi atingido

CriticalAlarmLow (tipo bool): se o limite de baixa gravidade foi atingido

CriticalHigh (tipo duplo): limite alto crítico

CriticalLow (tipo duplo): Limite criticamente baixo

Interface 3: xyz.openbmc_project.Sensor.Threshold Aviso.

Propriedades fornecidas por esta interface:

WarningAlarmHigh (tipo bool): se o limite de aviso alto foi atingido

WarningAlarmLow (tipo bool): se o limite baixo de aviso foi atingido

WarningHigh (tipo duplo): aviso de limite alto

WarningLow (tipo duplo): aviso de limite baixo

Neste ponto, outros módulos de aplicação podem implementar funções relacionadas através destes atributos D-Bus abstraídos. Por exemplo, o módulo sensor IPMI pode gerar SDR IPMI dinamicamente, o módulo IPMI SEL monitora atributos e gera logs de alarme, e o módulo Redfish gera interfaces de sensor redfish, etc.

  • Sinal

Todos os objetos D-Bus terão a interface org.freedesktop.DBus.Properties e o sinal PropertiesChanged abaixo dela. Qualquer alteração em qualquer atributo de todas as interfaces neste objeto acionará o sinal a ser enviado ao D-Bus. O formato do conteúdo do sinal é sa{sv}as e o significado correspondente é:

STRING: nome da interface

ARRAY de nome do atributo DICT_ENTRY<STRING,VARIANT> e valor alterado (múltiplo)

ARRAY<STRING> O nome do atributo cujo valor foi alterado, mas o valor alterado é desconhecido. (múltiplo)

Além disso, todas as mensagens D-Bus conterão o nome do barramento e o caminho do objeto, e outros processos poderão selecionar livremente esses parâmetros para monitoramento para capturar variáveis ​​de interesse.

  • Método

Existem apenas dois tipos de mensagens no barramento D-Bus, uma é Sinal e a outra é Método. As principais diferenças entre os dois são as seguintes:

1. O sinal é transmitido no barramento, enquanto o Método é uma mensagem enviada para um objeto característico;

2. Signal não tem valor de retorno, enquanto Method pode ter um valor de retorno (síncrono ou assíncrono), dependendo se o método chamado define um valor de retorno;

3. O sinal é usado principalmente para notificação de eventos, enquanto o método geralmente é usado para solicitar dados ou realizar operações;

Ler e escrever Property é essencialmente um método de chamar Get e Set na interface padrão Dbus org.freedesktop.DBus.Properties .

Veja o método de criação de um endereço IP de placa de rede como exemplo:

Nome do barramento:xyz.openbmc_project.Network

Objeto:/xyz/openbmc_project/network/<nome_da_rede>

Interface:xyz.openbmc_project.Network.IP.Create

Método:IP ssys:“<Protocolo IP>:ipv6\ipv4”“<Endereço IP>” “<Prefixo da máscara de rede>” “<Gateway de rede>”,retorna “Novo caminho do objeto IP”

Use a ferramenta busctl para criar um IP:

busctl --verbose call xyz.openbmc_project.Network /xyz/openbmc_project/network/eth0 xyz.openbmc_project.Network.IP.Create IP ssys "xyz.openbmc_project.Network.IP.Protocol.IPv4" "10.10.10.192" 24 "10.10 .10,1"

valor de retorno:

MENSAGEM "o" {

                OBJECT_PATH "/xyz/openbmc_project/network/eth0/_310_2e10_2e10_2e192_2f24";

};

Você também pode pensar no método IP da interface xyz.openbmc_project.Network.IP.Create como uma função que insere informações de IP, adiciona um endereço IP à placa de rede e retorna um caminho de objeto recém-gerado:

string IP (string protocolo, string ip_addr, máscara de rede de caracteres não assinados, string gateway)

Resumindo, o D-Bus é um dos mecanismos importantes para comunicação entre processos no OpenBMC. Ele permite que diferentes processos e aplicações se comuniquem entre si, fornecendo um sistema de barramento de mensagens confiável e flexível. Ele simplifica a complexidade da comunicação entre processos e fornece muitas funções úteis, melhorando assim a confiabilidade e a capacidade de manutenção do sistema OpenBMC.

Bem-vindos a todos para seguir a comunidade OurBMC e aprender mais sobre a tecnologia BMC.

Site oficial da comunidade OurBMC:

https://www.ourbmc.cn/

Os recursos piratas de "Qing Yu Nian 2" foram carregados no npm, fazendo com que o npmmirror suspendesse o serviço unpkg. Zhou Hongyi: Não resta muito tempo para o Google. Sugiro que todos os produtos sejam de código aberto . time.sleep(6) aqui desempenha um papel. Linus é o mais ativo em “comer comida de cachorro”! O novo iPad Pro usa 12 GB de chips de memória, mas afirma ter 8 GB de memória. O People’s Daily Online analisa o carregamento estilo matryoshka do software de escritório: Somente resolvendo ativamente o “conjunto” poderemos ter um futuro . novo paradigma de desenvolvimento para Vue3, sem a necessidade de `ref/reactive `, sem necessidade de `ref.value` MySQL 8.4 LTS Manual chinês lançado: Ajuda você a dominar o novo domínio de gerenciamento de banco de dados Tongyi Qianwen nível GPT-4 modelo principal preço reduzido em 97%, 1 yuan e 2 milhões de tokens
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/ourbmc/blog/11183508
Recomendado
Clasificación