corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

Criação de perfil de E/S para projetos C/C++ em sistemas operacionais Solaris - Tutorial do NetBeans IDE 6.8/6.9

Conteúdo

O conteúdo desta página se aplica ao IDE NetBeans 6.8 e 6.9
Requisitos
Introdução
Configurando seu ambiente Solaris para o tutorial
Criar o projeto para o tutorial
Definir a configuração do perfil do projeto
Construir e executar o projeto ProfilingDemo
Explorar a utilização de E/S
Consulte também
Resumo

Requisitos

Para seguir este tutorial, você precisa do seguinte software.

Software Versão necessária
Sistemas operacionais Solaris 10 ou OpenSolaris OpenSolaris, Solaris versão 10
NetBeans IDE (incluindo o suporte ao C/C++) Versão 6.8
Java Development Kit (JDK) Versão 6
Compiladores C e C++, make, gdb As versões das ferramentas para Solaris são mostradas em:
Conjuntos de ferramentas C/C++ testados com o NetBeans IDE

Consulte as Instruções de instalação do NetBeans IDE 6.8 e Configurando o NetBeans IDE para o C/C++/Fortran
para obter informações sobre o download e a instalação do software NetBeans necessário.

Introdução

O NetBeans IDE 6.8 com o plug-in C/C++/Fortran apresenta a ferramenta Utilização de E/S para observação do comportamento da entrada/saída dos projetos C/C++. A ferramenta mostra uma visualização gráfica geral das leituras e gravações do seu projeto, e uma visualização mais detalhada dos arquivos individuais lidos e gravados juntamente com a quantidade de bytes.

Este tutorial demonstra como usar a ferramenta Utilização de E/S para projetos C/C++ em execução nos sistemas operacionais Solaris 10 ou OpenSolaris. A ferramenta é suportada somente em sistemas operacionais Solaris porque o utilitário DTrace do Solaris é necessário para coletar os dados do sistema e os dados do programa para a ferramenta. A ferramenta Utilização de E/S é executada por padrão quando o projeto NetBeans C ou C++ é executado em um sistema operacional Solaris. É possível desativá-la nas propriedades do projeto se você desejar.

Se for usuário de Windows ou MacOS X e tiver um sistema Solaris disponível na sua rede, observe que pode executar o IDE localmente no seu PC ou Mac e configurar seu projeto para usar o sistema Solaris como uma máquina de desenvolvimento remoto. O desenvolvimento remoto permite que você use a ferramenta Utilização de E/S e outras ferramentas com base no Solaris mesmo quando você executar o IDE no Windows ou no MacOS X. O recurso de desenvolvimento remoto está disponível no módulo C/C++/Fortran do NetBeans IDE. Consulte o Tutorial de desenvolvimento remoto C/C++ para obter mais informações sobre como configurar a construção em um hospedeiro de desenvolvimento remoto.

Este tutorial usa um projeto em execução em um sistema Solaris baseado em SPARC de núcleo único. Você pode seguir as etapas do tutorial se estiver executando o NetBeans IDE 6.8 em sistemas operacionais Solaris em sistemas baseados em SPARC ou x86. Observe que este tutorial usa "sistemas operacionais Solaris" para se referir tanto ao sistema operacional OpenSolaris quanto ao Solaris 10.

Coleta de dados de E/S

Os dados de entrada/saída são coletados com o DTrace, uma ferramenta para o rastreamento das atividades dos programas em execução nos sistemas operacionais Solaris 10 e OpenSolaris. Um script especial do DTrace intercepta as chamadas aos sistemas Solaris relacionadas a E/S: abrir, criar, fechar, ler, gravar. Este script reúne os dados e os passa para o NetBeans IDE para análise. O IDE, então, exibe as informações graficamente e em forma de tabela quando você clica no botão Detalhes de E/S.

Configurando seu ambiente Solaris para o tutorial

Para poder usar a ferramenta Utilização de E/S, a conta de usuário do Solaris usada ao executar o NetBeans deve ter privilégios suficientes do DTrace para observar o comportamento do sistema. A conta de usuário deve ter os privilégios dtrace_user, dtrace_proc e dtrace_kernel.

Para verificar os seus privilégios do DTrace, digite o seguinte no prompt de comando:
/bin/ppriv $$

Se sua conta tiver os privilégios necessários, o comando ppriv deve retornar algo semelhante a:

E: basic,dtrace_kernel,dtrace_proc,dtrace_user
I: basic,dtrace_kernel,dtrace_proc,dtrace_user
P: basic,dtrace_kernel,dtrace_proc,dtrace_user
L: all

A linha que começa com "I:" é importante porque especifica os privilégios herdados pelos programas iniciados a partir do seu shell. Se a sua conta não tiver os privilégios herdados necessários, e se você não tiver privilégios de administrador ou de acesso raiz ao seu sistema, você deve pedir ao seu administrador de sistema que adicione os privilégios herdáveis dtrace_user, dtrace_proc e dtrace_kernel a sua conta.

Se tiver privilégios de administrador ou acesso raiz ao seu sistema, você pode conceder os privilégios necessários a sua conta de usuário conforme descrito abaixo.

Para conceder permanentemente os privilégios necessários do DTrace a uma conta de usuário:
  1. Certifique-se de que a conta de usuário cujos privilégios você deseja modificar esteja desconectada do sistema.
  2. Efetue logon como superusuário (raiz) ou como outro usuário administrador.
  3. Digite o seguinte no prompt de comando e substitua username pelo nome da conta de usuário que está sendo modificada:
    $ usermod -K defaultpriv=basic,dtrace_kernel,dtrace_user,dtrace_proc username
A seguir, você pode efetuar logon na conta de usuário, iniciar o NetBeans IDE e usar as ferramentas de criação de perfil com o provedor de dados DTrace.

Para conceder temporariamente os privilégios necessários do DTrace a uma conta de usuário:

  1. Digite o seguinte para determinar o ID de processo do shell:
    $ echo $$
  2. Torne-se superusuário (raiz) ou outro usuário administrador.
  3. Digite o seguinte e substitua process-ID pelo ID do processo que o comando echo retornou:
    $ ppriv -s I+dtrace_user,dtrace_proc,dtrace_kernel process-ID
Todos os comandos digitados no shell especificados pelo process-ID agora herdam os privilégios necessários. A conta de usuário pode iniciar o NetBeans IDE neste shell e usar a ferramenta de criação de perfil Utilização de E/S.

Criar o projeto para o tutorial

Para explorar os recursos de criação de perfil da Utilização de E/S, criaremos um projeto a partir do aplicativo de amostra ProfilingDemo que está incluído no IDE.

O aplicativo ProfilingDemo apresenta três estágios nos quais realiza tarefas repetidamente durante 10 segundos, usando três técnicas diferentes para gerar algumas atividades interessantes para serem mostradas nas ferramentas de criação de perfil. A primeira tarefa é gravar alguns dados em um arquivo, um número variável de tarefas subsequentes realiza alguns cálculos. O número de tarefas de cálculos depende do número de CPUs.

  • Em uma máquina com uma única CPU, há duas tarefas: uma que grava em um arquivo e outra que faz alguns cálculos.
  • Em uma máquina com várias CPUs, o número total de tarefas é igual ao número de CPUs. Se N corresponde ao número de CPUs, há N tarefas: uma tarefa que grava em um arquivo e N-1 tarefas que fazem cálculos.

Por exemplo, se uma máquina de desenvolvimento tem 32 núcleos, o programa realiza uma tarefa de gravação e 31 tarefas de cálculo. É necessário pressionar a tecla Enter para iniciar cada tarefa, portanto é preciso prestar atenção na janela Saída.

Os estágios do projeto ProfilingDemo são os seguintes:

  • Sequential Demo possui uma única thread e executa as dois tarefas, uma depois da outra, cada uma durante 10 segundos. Isso pode demorar algum tempo em um sistema com um grande número de CPUs porque mais conjuntos de tarefas são realizados, um após o outro.
  • Parallel Demo possui várias threads e realiza as mesmas tarefas de gravação no arquivo e cálculos simultaneamente em threads diferentes, uma vez em cada CPU. Este estágio é muito mais rápido do que na Sequential Demo em máquinas com vários núcleos porque, na Sequencial Demo, embora se realize o mesmo número de tarefas, tais tarefas são executadas simultaneamente. No entanto, as threads podem acessar os mesmos dados de forma competitiva, o que pode levar à obtenção de resultados imprecisos. No ProfilingDemo, as threads não apresentam dados compartilhados, de modo que não há riscos de obter resultados imprecisos. Porém, em outros programas não existe tal garantia, é claro.
  • Pthread Mutex Demo também possui várias threads e realiza as mesmas tarefas de gravação e cálculos que os outros estágios de demonstração. No entanto, o código usa bloqueios de exclusão mútuos para evitar que várias threads acessem conjuntamente determinadas funções.

Para criar o projeto ProfilingDemo

  1. Abra o assistente para Novo projeto em Arquivo > Novo projeto.
  2. No assistente, selecione a categoria Amostras e, a seguir, selecione a subcategoria C/C++.
  3. Selecione a amostra Profiling Demo como mostrado na figura e clique em Avançar.

    Captura de tela para criar um novo projeto a partir da amostra Profiling Demo

  4. Você pode escolher o nome do projeto e a localização do projeto. Utilizamos o ProfilingDemo_1 padrão em nosso diretório NetBeansProjects.
  5. Clique em Terminar para sair do assistente e criar o projeto.

Definir a configuração do perfil do projeto

As propriedades do projeto incluem a configuração do perfil para permitir que você defina qual das ferramentas de criação de perfil deseja executar ao executar seu projeto. Para ver a ferramenta Utilização de E/S, é necessário usar a configuração de perfil C/C++ DTrace Extended, que especifica todas as ferramentas disponíveis de criação de perfil. No entanto, neste tutorial queremos destacar a ferramenta Utilização de E/S, de modo que faremos nossa própria configuração de perfil a fim de selecionar um conjunto menor de ferramentas de criação de perfil. Esta tarefa é opcional.

Adote o seguinte procedimento para criar uma nova configuração de perfil:

  1. Clique com o botão direito do mouse no nome do projeto e selecione Propriedades para abrir a caixa de diálogo Propriedades do projeto.
  2. Selecione a categoria Perfil. A configuração de perfil C/C++ DTrace Extended está selecionada.
  3. io-profile-configuration-dtrace

  4. Clique no botão "..." ao lado da lista Configuração de perfil para abrir a caixa de diálogo Gerenciador de ferramentas de perfil.
  5. Na lista Configurações do Profiler, selecione Gerenciar configurações...
  6. Na caixa de diálogo Gerenciador de configurações do Profiler, selecione C/C++ DTrace Extended.
  7. Clique em Duplicar.
  8. Clique em Renomear e digite E/S de memória da CPU, em seguida, clique em OK.
  9. Esta captura de tela mostra a caixa de diálogo Nome e as caixas de diálogo anteriores que precisam ser acessadas para chegar a esta caixa de diálogo.

    Caixa de diálogo Gerenciador de ferramentas de perfil

  10. Clique em OK na caixa de diálogo Gerenciador de ferramentas de perfil.
  11. Selecione a nova configuração E/S de memória da CPU na caixa de diálogo Gerenciador de ferramentas de perfil.
  12. Cancele a seleção das ferramentas Microestados da thread e Utilização da thread na lista de ferramentas e clique em OK.
  13. Selecionando ferramentas para uma configuração de perfil

  14. Para usar a configuração, na caixa de diálogo Propriedades do projeto, selecione E/S de memória da CPU na Configuração de perfil e clique em OK.
  15. Selecionando uma nova configuração de perfil

Construir e executar o projeto ProfilingDemo

  1. (Opcional) Se quiser que a saída do projeto seja exibida na janela Saída do NetBeans, conforme ilustrado neste tutorial, clique com o botão direito do mouse no nó do projeto ProfilingDemo e selecione Propriedades. Na caixa de diálogo Propriedades do projeto, clique no nó Executar no painel Categorias e em Tipo de console, selecione Janela Saída. Clique em OK.
  2. Clique com o botão direito do mouse no nó do projeto Profiling Demo e selecione Construir.
  3. A aba Saída mostra os resultados da construção similar aos abaixo mostrados.


  4. O compilador mostrado na captura de tela é o compilador cc do conjunto de ferramentas Sun Studio. Também é possível usar o compilador C GNU, gcc.

  5. Clique com o botão direito do mouse no nó do projeto Profiling Demo e selecione Executar.
    Pressione Enter sempre que for solicitado durante a execução do projeto ProfilingDemo.
  6. A aba Monitor de execução é aberta para exibir os gráficos dinâmicos da ferramenta Utilização de E/S e de qualquer outra ferramenta definida na configuração de perfil. Aqui utilizamos a configuração de perfil E/S de memória da CPU criada por nós, de modo que vemos somente estas três ferramentas.

  7. Monitores de execução

    Se quiser ver todas as ferramentas, pode ser necessário aumentar o tamanho da aba Monitor de execução clicando e arrastando para cima a borda superior da aba Monitor de execução. Na captura de tela acima, a aba Monitor de execução foi aumentada vertical e horizontalmente para facilitar a visualização dos indicadores. Também é possível aumentar a altura de um gráfico em particular arrastando a borda superior da ferramenta.

  8. Observe que a janela de saída do programa ProfilingDemo mostra o que ele está fazendo para que você possa comparar com os dados que o IDE está representando graficamente nas ferramentas. Por exemplo, o programa exibe o tempo de execução transcorrido antes de solicitar que você pressione Enter e exibe a quantidade de memória que está alocando, realiza cálculos e, a seguir, libera a memória. Você pode ver os gráficos refletindo a atividade do programa.
  9. Saída da Sequential Demo
  10. Neste tutorial, execute o programa até o fim, pressionando Enter sempre que for solicitado. Os dados obtidos serão salvos e teremos tempo de analisá-los e explorar os recursos da ferramenta Utilização de E/S.

Explorar a utilização de E/S

A ferramenta Utilização de E/S mostra uma visão geral das atividades de leitura e gravação do programa durante a execução do projeto.

  1. A captura de tela abaixo foi obtida no início da execução do programa, durante a parte SEQUENTIAL DEMO, na qual as duas tarefas são executadas uma depois da outra em uma única thread. Depois de alguns segundos o programa se inicia e espera, então, que o usuário pressione Enter. Quando o usuário pressiona Enter em aproximadamente 0:02 segundos, o programa grava os caracteres em um arquivo temporário. Esta atividade se reflete na ferramenta Utilização de E/S como a linha laranja que mostra os bytes gravados. Observe o seguinte:

    • A linha laranja da ferramenta Utilização de E/S mostra a quantidade de bytes gravados no último segundo. O ProfilingDemo em si relata que grava um total de 39.690.240 bytes ou cerca de 39,7 M durante esta execução da sequential demo. Se você somasse todos os pontos de dados da linha laranja a partir de 2 segundos até 12 segundos, o total seria de aproximadamente 39,7 M bytes.
    • O tempo de uso do sistema da ferramenta Utilização da CPU é alto durante esta fase porque o programa usa as chamadas do sistema para gerar dados e gravá-los no disco.
    • A ferramenta Utilização da memória mostra uma pilha constante de memória de 8 K alocada.


  2. Na parte inferior da janela Monitor de execução, você pode ver as barras deslizantes para controlar a visualização dos gráficos. Coloque o cursor do mouse sobre as extremidades para obter informações sobre elas.
  3. O tutorial de ferramentas de criação de perfil C/C++ inclui um tutorial sobre o uso das barras deslizantes da ferramenta de criação de perfil.

  4. Clique sobre a barra horizontal na parte inferior, mantenha pressionado o botão do mouse e arraste a barra deslizante para a esquerda para ver o início da execução. Todos os gráficos são arrastados em uníssono para que você possa ver o que acontece em cada área (CPU, memória, threads) em qualquer momento e ver a relação entre elas.
  5. Arraste da esquerda para a direita para ver a execução completa.
  6. Clique no botão Detalhes de E/S. A aba de detalhes da Utilização de E/S se abre, exibindo a entrada padrão, a saída padrão e os arquivos temporários que o programa lê e nos quais o programa grava.


  7. Os arquivos com as marcas de verificação foram fechados e os arquivos marcados com um ícone amarelo ainda estão abertos para ações de leitura/gravação.

  8. Observe que este programa precisa somente da entrada da tecla Enter de vez em quando, de modo que a coluna Bytes lidos não é muito útil. Você pode eliminar a coluna Bytes lidos clicando no botão à direita dos cabeçalhos da coluna para exibir a caixa de diálogo Alterar colunas visíveis. Clique na caixa de seleção para desmarcar Bytes lidos e clique em OK.
  9. Vamos supor que você deseja obter mais detalhes sobre como este programa usa todos esses arquivos temporários. Clique em um dos nomes de arquivo na aba Detalhes de E/S para ver as funções que abriram e fecharam o arquivo. Os nomes das funções são exibidos no painel à direita da tabela do arquivo.
  10. Clique duas vezes em uma função no painel direito para abrir o arquivo-fonte onde a função é chamada. Nesse caso, clicamos na função work_run_syscpu e o arquivo common.c abriu.


  11. Na aba Detalhes de E/S, você pode especificar um intervalo de tempo para: selecionar ou digitar o número de segundos do período de início e fim do intervalo que deseja nos dois seletores de tempo. Se digitar os segundos, pode ser necessário pressionar Enter.

    Isso atualiza a lista de funções para que mostre somente os dados que foram coletados durante tal intervalo de tempo, assim você pode ver exatamente quantos bytes foram gravados e lidos em quais arquivos em qualquer período em particular. O gráfico também é atualizado para que mostre o intervalo de tempo selecionado em claro contraste com o resto do tempo de execução, que é mais escuro.
  12. Na janela Monitor de execução, vemos que a atividade de gravação teve início muito próxima ao início da execução. Este é ponto no qual a parte de sequential demo do projeto de criação de perfil começar a gravar em um arquivo temporário. A sequential demo apresentou duas tarefas de 10 segundos cada uma, o que permite supor que, para isolar a atividade da sequential demo, devemos analisar a execução dos segundos 0:00 a 0:27 para considerar os atrasos em pressionar Enter e assim por diante.
  13. Selecione 0:27 como o período final na aba Detalhes de E/S. Os dados são, então, filtrados para que seja possível concentra-se na entrada/saída da fase sequencial. Observe que os indicadores gráficos também mostram o efeito de selecionar o segmento de período a ser filtrado.


  14. Observe que há um arquivo temporário mostrado na aba Detalhes de E/S durante o intervalo da sequential demo. Uma única thread abre e grava no arquivo, em seguida, o fecha. Clique no arquivo para ver as funções que acessam o arquivo e clique duas vezes na função para ver o código-fonte.
  15. De volta à janela Monitor de execução, rolamos a barra deslizante de tempo para aproximadamente 0:30 segundos, onde vemos que a atividade de gravação se inicia novamente após uma pausa. A pausa na gravação ocorre durante a tarefa de cálculo da sequential demo, na qual não ocorre nenhuma gravação no disco. A atividade reiniciada mostra que o programa está entrando na parte da PARALLEL DEMO e o usuário pressiona Enter para iniciar as tarefas, em que a gravação no disco e os cálculos ocorrem simultaneamente em threads diferentes. Para isolar a atividade da parallel demo, no Filtro de tempo da aba Detalhes de E/S, insira 0:28 em Início e 0:41 segundos em Fim, e pressione Enter a fim de filtrar os dados para que destaquem a entrada/saída da fase paralela.


  16. Observe que há vários arquivos temporários mostrados na aba Detalhes de E/S durante o intervalo da parallel demo. Isso ocorre mesmo se houver somente uma thread gravando em um arquivo porque cada segundo ela muda para um novo arquivo. A tarefa de cálculo não grava no disco.
  17. Clique em um dos arquivos temporários e veja que a função parallel_threadfunc está abrindo e fechando arquivos.
  18. Na captura de tela abaixo, aproximadamente em 0:40 segundos, a atividade de E/S se altera novamente. Nesse ponto, o programa entra na parte da PTHREAD MUTEX DEMO e o usuário pressiona Enter. Filtre os dados desta área selecionando 0:41 como hora inicial e o máximo como hora final. Pressione Enter se digitar os valores.

  19. A aba Detalhes de E/S mostra que vários arquivos são abertos durante o intervalo PTHREAD MUTEX DEMO.
    Uma thread está gravando em um arquivo e muda o arquivo ao qual está gravando a cada segundo, como no intervalo da Parallel Demo. No entanto, devido a que os bloqueios de mutex são usados, às vezes a thread de gravação é bloqueada pela thread de cálculo e não pode gravar no arquivo repetidamente.
  20. Tente executar este programa novamente com a ferramenta Utilização da thread ativada. Você pode adicioná-la à configuração de perfil que fizemos neste tutorial selecionando Ferramentas > Ferramentas de perfil, selecionando, a seguir, a configuração e a ferramenta Utilização da thread.

Veja também

Para obter mais informações sobre a tecnologia DTrace usada em segundo plano para compilar dados do projeto em execução, consulte o Portal BigAdmin DTrace.

A ferramenta Microestados da thread é abordada em Usando a ferramenta Microestados da thread nos sistemas operacionais Solaris.

As ferramentas Utilização da CPU, Utilização da thread e Utilização da memória são abordadas no tutorial de criação de perfil C/C++.

Para obter outros tutoriais de C/C++ para o NetBeans IDE, consulte Trilha de aprendizado de aplicativos C/C++.

Resumo

Este tutorial demonstrou os seguintes pontos sobre a ferramenta de criação de perfil Utilização de E/S:

  • As informações de E/S são coletadas automaticamente nas plataformas Solaris com o utilitário DTrace do Solaris.
  • Os indicadores gráficos da criação de perfil exibidos podem ser selecionados através das Configurações do perfil.
  • A ferramenta Utilização de E/S pode ser encontrada somente na configuração de perfil C/C++ DTrace Extended ou na sua própria configuração.
  • As configurações de perfilamento estão localizadas nas propriedades do projeto na categoria Perfil.
  • Ao clicar no botão Detalhes de E/S, são exibidas as informações detalhadas da E/S das funções do programa.
  • Ao clicar nas funções da aba de detalhe, o arquivo-fonte que contém a função é aberto no número da linha onde a função é chamada.
  • Se tiver acesso a um sistema que executa um sistema operacional Solaris em sua rede, você poderá utilizar a ferramenta Utilização de E/S a partir da sua máquina Windows ou Mac ao configurar o sistema Solaris como um host de desenvolvimento remoto para construir e executar seus projetos.