Que tipo de “mensagens” o Activity Monitor rastreia com as colunas “Mensagens Enviadas” e “Mensagens Recebidas”?

9

No Monitor de Atividade no OS X, é possível adicionar colunas adicionais à exibição da lista de processos. Duas colunas disponíveis nessa lista são "Mensagens Enviadas" e "Mensagens Recebidas", que são exibidas como "Mensagens Enviadas" e "Mensagens de Rcvd", respectivamente. Testemunha:

Parte da janela Monitor de Atividade mostrando as colunas "Mensagens Enviadas" e "Mensagens de Rcvd"

A que tipo de "mensagens" o Monitor de Atividade se refere?

Quando vi "mensagem", pensei no começo das "mensagens" do Objective-C enviadas com objc_msgSend()mas não consigo ver como elas seriam rastreadas pelo sistema operacional, pois a maioria dessas mensagens seria interna ao próprio processo . Um depurador pode rastrear esses tipos de mensagens quando anexado, mas não consigo ver o sistema operacional fazendo isso o tempo todo - sobrecarga muito alta.

Então, acho que essas são mensagens de maior peso. Eles são uma forma de RPC entre processos? Ou, são essas chamadas de mensagens da terra do usuário para o kernel? Procurando referências definitivas. Obrigado.

Chris W. Rea
fonte

Respostas:

7

Esses números correspondem às mensagens de entrada / saída do Mach, então você parece estar correto ao não interpretá-los como o objc_msgSend conta.

Você pode aprender mais sobre contagens de mensagens de nível superior ativando o Instruments (parte do conjunto de ferramentas Xcode disponível para download gratuito ) e acessando um aplicativo específico para ver quais mensagens estão sendo enviadas e quando.

Xcode Instruments Imagem

Ele pode filtrar todas as alocações, bem como as alocações relacionadas ao ObjC, e você pode pesquisar detalhes de nível muito mais baixo do que apenas as contagens de envio de mensagens. A documentação canônica que faz parte do Xcode ajudará você a entender essas estatísticas e como elas se relacionam com o Activity Monitor.

Especificamente, procure NSObjCMessageLoggingEnablede objc_msgSendna parte do Guia de Ferramentas para Magia de Depuração do Mac OS X da Referência, para obter as contagens de objC.

Pesquise mach messageno Xcode e procure a seção IPC / Message Queues do Kernel Programming Guide para obter detalhes da fila de mensagens mach e o que os compõe. Eles são um tráfego de kernel IPC de nível muito mais baixo, como você supôs.

Você provavelmente também pode encontrá-lo no developer.apple.com, mas ter a documentação local no Xcode tem muitas vantagens.

bmike
fonte
11
Obrigado - mas ainda não está claro. Eu suspeitava de três coisas. Você quis confirmar a primeira coisa que suspeitei, ou seja, as objc_msgSend()chamadas são rastreadas para todos os processos ou as suposições das mensagens de maior peso?
Chris W. Rea
11
Eu pensei que eram objc_msgEnviar conta, mas agora vejo que estou errado. Eles são mapeados perfeitamente para as contagens de mensagens disponíveis quando você seleciona um processo no Activity Monitor. Vou revisar minha resposta para ser mais correta e menos errada.
Bmike
Obrigado! O ponteiro para o Guia de programação do kernel é particularmente útil. Não estava ciente disso.
Chris W. Rea
Sim - há muita documentação incrível e, embora eu saiba como e por que ela foi colocada no developer.apple.com, sou muito mais eficiente ao usá-la e encontrá-la quando uso o Xcode para navegar pelos documentos.
bmike