Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um conjunto de referências é a maneira recomendada de entender os efeitos reais de um processo na disponibilidade de memória do sistema como um todo.
Tradicionalmente, o uso de memória tem sido medido pelo conjunto de trabalho do processo em um determinado momento. O conjunto de trabalho de um processo é o conjunto de páginas no espaço de endereço virtual do processo que atualmente residem na memória física. (Para obter mais detalhes sobre conjuntos de trabalho, consulte Conjunto de trabalho no Centro de Desenvolvimento do Windows.)
Limitações de um conjunto de trabalho
Um conjunto de trabalho fornece informações limitadas, pois não mostra toda a memória usada para dar suporte ao processo, como arquivos armazenados em cache e a memória usada pelos serviços do sistema que o processo utiliza. Além disso, um conjunto de trabalho é altamente dependente do estado do computador, da quantidade de RAM e do nível de atividade necessário do subsistema de memória para fornecer todos os processos no sistema com a memória que eles solicitam (o nível de pressão de memória). Além disso, um conjunto de trabalho é muito afetado pelas políticas de corte do sistema operacional. Portanto, um conjunto de trabalho é apenas uma medida momentânea e omite efeitos fora do processo de destino.
Vantagens de um conjunto de referência
Por outro lado, um conjunto de referência é uma medida do conjunto de páginas de memória em todo o sistema que qualquer processo ou atividade no sistema acessou durante um determinado cenário. Ele inclui todas as páginas acessadas em nome do componente que está sendo investigado, independentemente de qual processo tenha acessado a página. O conjunto de referências não varia com base no tamanho da RAM, na pressão de memória ou nas políticas de corte do sistema operacional. Medir um conjunto de referências é uma maneira extremamente precisa de avaliar o uso de memória em todo o sistema para qualquer carga de trabalho, pois as páginas que estão atualmente no conjunto de trabalho de qualquer processo ou que são acessadas por processos ou drivers do sistema, estão incluídas no conjunto de referências. Um conjunto de referências é específico para um cenário, não por um momento: não é válido perguntar, Qual é o conjunto de referências do meu processo neste momento? No entanto, é válido perguntar: Qual é o conjunto de referência do sistema nesse cenário? ou Qual é o conjunto de referências do meu processo nesse cenário?
A ideia por trás de um conjunto de referências é simples: para dar uma imagem precisa da memória referenciada em todo o sistema durante o cenário, as páginas são contadas quando acessadas e quando liberadas. Esse método fornece uma visão abrangente dos picos de uso de memória, bem como do que está pendente no final do cenário (ou seja, uso de estado estável).
Observação
Somente a primeira referência de uma página é capturada.
Um conjunto de referências pode ser considerado aproximadamente como uma medida da quantidade de memória que pode ser retirada do restante do sistema durante a execução do cenário ou, equivalentemente, a quantidade de memória que precisaria ser falha e lida do disco para executar o cenário (se outras partes do sistema tiverem feito com que a memória seja paginada). Portanto, um conjunto de referências é valioso para determinar o impacto no desempenho do uso da memória.
Como coletar dados do conjunto de referência
Você pode usar duas ferramentas de linha de comando diferentes para coletar dados do conjunto de referências: WPR (Gravador de Desempenho do Windows) e Xperf. Você também pode usar a interface de GUI do WPR.
O WPR e o Xperf fazem parte do Windows Performance Tookit, que está incluído no Kit de Avaliação e Implantação do Windows (ADK). Você pode baixar o ADK para Windows 10 no seguinte link: Kit de Avaliação e Implantação do Windows.
Observação
Use um prompt de comandos com privilégios elevados ao coletar dados do conjunto de referências.
Coletar dados com o WPR
Para coletar dados com o WPR, insira:
wpr -start referenceset -filemode
Execute seu cenário e pare de coletar dados inserindo:
wpr -stopfile-name.etl
Coletar dados com Xperf
Ao usar o Xperf para coletar rastreamentos de memória, especifique o mesmo tamanho para buffers mínimo e máximo para garantir que haja uma quantidade consistente de memória do sistema reservada para ETW (Rastreamento de Eventos para Windows). Essa consistência facilita a comparação entre as execuções devido à diminuição da variabilidade. (Esses buffers são definidos automaticamente com o mesmo tamanho ao usar o WPR.)
Para coletar dados com Xperf, insira:
xperf -on referenceset -minbuffers 50 -maxbuffers 50 -buffersize 1024 -stackwalk PageAccess+PageRelease+PageRangeAccess+PageRangeRelease++ PagefileMappedSectionCreate+VirtualFree+PagefileMappedSectionDelete -start user -on Win32HeapRanges -minbuffers 10 -maxbuffers 10 -buffersize 1024
Execute seu cenário e pare de coletar dados inserindo:
xperf -stop user -stop -dfile-name.etl
Coletar dados com o aplicativo da área de trabalho WPR
Você também pode coletar dados usando o aplicativo da área de trabalho WPR, wprui.exe. Na GUI, em Análise de Recursos, selecione Análise do Conjunto de Referências. (Se você não vir essa opção, talvez seja necessário clicar em Mais Opções e expandir Análise de Recursos.)
Para iniciar a gravação, clique em Iniciar e, em seguida, execute seu cenário.
Para interromper a gravação e salvar os dados de rastreamento, clique em Salvar.
Como funciona o rastreamento do conjunto de referências
Quando a WPR começa a coletar o rastreamento de um conjunto de referências, o sistema remove imediatamente todas as páginas de memória dos conjuntos de trabalho de todos os processos, incluindo o sistema. Além disso, todas as páginas que permanecem nos conjuntos de trabalho de um processo ou do sistema são registradas para levar em conta páginas bloqueadas ou marcadas como não pagináveis. Depois disso, no primeiro acesso de uma página que foi movida para a lista em espera, o sistema registra uma falha temporária no rastreamento do conjunto de referências, a página é adicionada ao conjunto de trabalho do processo e o processo continua em execução. Os acessos subsequentes a uma página no conjunto de trabalho do processo ou do sistema não causarão outra falha de página flexível, pois a página já está no conjunto de trabalho. Como resultado, a execução continua sem registrar nenhum acesso adicional às páginas em um conjunto de trabalho e, portanto, o número total de acessos a uma página não é registrado no rastreamento.
Da mesma forma, o primeiro acesso de qualquer outra página no mesmo processo é registrado no rastreamento, incluindo páginas recém-alocadas. As páginas liberadas (como por HeapFree) e os arquivos excluídos têm seu tamanho pendente removido do conjunto de referências no final do intervalo de medição, mas ainda são mostrados como acessados. Os arquivos fechados ou executáveis removidos da memória não são removidos do tamanho pendente, pois não são limpos da RAM no fechamento ou remoção. Se uma página for compartilhada entre dois ou mais processos, o rastreamento registrará o primeiro acesso a essa página em cada processo que a tocar.
Observação
Registrar o rastreamento de um conjunto de referências pode ter um efeito significativo no desempenho do sistema, pois todos os processos devem falhar em um grande número de páginas de volta em seus conjuntos de trabalho depois que seus conjuntos de trabalho forem esvaziados.
Visualizações do conjunto de referências
O WPA oferece as seguintes exibições de dados do conjunto de referência:
- Conjunto de referências tamanho pendente por processo
- Conjunto de referências tamanho pendente por categoria
- Conjunto de referências tamanho pendente por dinâmico/arquivo
Conjunto de referências tamanho pendente por processo
Isso mostra a memória dividida por processo para o visor. Este é um bom lugar para começar se você estiver investigando o efeito na memória de um aplicativo específico.
Para obter os significados das colunas nessa exibição, consulte Definições de coluna importantes, mais adiante neste tópico.
Conjunto de referências tamanho pendente por categoria
Isso mostra páginas de memória por categoria para o visor.
Para obter uma explicação das categorias de página, consulte Categoria da Página (Dinâmica) e Categoria da Página (Arquivo), mais adiante neste tópico.
Conjunto de referências tamanho pendente por dinâmico/arquivo
Isso mostra a memória categorizada por se ela tem suporte de memória ou com suporte de arquivo para o visor.
Observação
As páginas com suporte de memória são apoiadas pelo arquivo de página ou, no caso de pool não paginado, nunca paginadas. As páginas com suporte de memória incluem pilha, heap, VirtualAlloc e outras categorias de página que não são mapeadas diretamente para um arquivo no disco. As páginas com backup de arquivo são apoiadas por arquivos individuais em disco, como imagens de módulo.
Noções básicas sobre dados do conjunto de referência
Conforme mencionado anteriormente, o conjunto de referência representa a memória que foi tocada durante a execução do cenário de interesse. Nesse sentido, o conjunto de referência é o custo real da execução da carga de trabalho e representa a contabilidade mais precisa do volume de memória da carga de trabalho.
Normalmente, você está interessado no volume de memória de um processo específico, portanto, você desejará começar com a tabela Conjunto de Referências Pendentes por Processo . Você desejará examinar os locais em que o uso de memória aumentou ou diminuiu, bem como onde ele atingiu o pico e onde estava estável.
Estado de pico versus estável
Como o conjunto de referência é a medida da quantidade de memória referenciada durante um cenário, pode não ser intuitivo que seu tamanho possa diminuir. Quando a memória é liberada e retornada ao sistema para ser usada para outras finalidades, ela é subtraída do conjunto de referências para refletir o fato de que ela pode ser reutilizado posteriormente.
Isso faz com que um cenário tenha duas métricas de conjunto de referência primária: estado estável e pico.
| Métrica | Descrição |
|---|---|
| Estado estável | Um custo de linha de base do aplicativo ou cenário. Isso pode ser medido executando um cenário (ou vários cenários) e, em seguida, aguardando que o sistema atinja um estado ocioso novamente. Minimizando o número de páginas que seu aplicativo acessa em um estado estável em vários cenários, você pode ver os cenários serem executados mais rapidamente (por exemplo, retomar mais rapidamente) e fornecer uma experiência melhor para o usuário, pois você reduzirá a pressão de memória no sistema. |
| Peak | Alto uso transitório de memória, que pode enviar informações mais valiosas para fora da memória física. Ao reduzir a frequência e a magnitude de qualquer pico de uso, seu aplicativo ou recurso será um "cidadão do sistema" melhor diminuindo o potencial de troca ou encerramento de outros processos. |
Definições de coluna importantes
Ao examinar o rastreamento de um conjunto de referência no WPA, as seguintes colunas no modo de exibição de tabela são especialmente importantes:
- Tipo de Impacto
- Tamanho e tamanho do impacto
- Classe Category
- Categoria de Página (Dinâmico)
- Categoria da Página (Arquivo)
- Pilha de alocação
- Afetando a pilha
Se uma dessas colunas estiver ausente na exibição no WPA, você poderá adicioná-la clicando com o botão direito do mouse em um título de coluna no modo de exibição atual e selecionando a coluna ausente na lista.
Todas as três exibições de conjunto de referência fornecem quatro colunas diferentes, fornecendo tamanhos da memória que está sendo contada:
- Tamanho (Exibição de Processo): o conjunto total de páginas referenciadas pelo processo especificado
- Tamanho (Exibição do Sistema): o conjunto de páginas referenciados por
- Tamanho do Impacto (Modo de Exibição de Processo)
- Tamanho do Impacto (Modo de Exibição do Sistema)
Exibições diferentes mostram colunas diferentes por padrão, mas todas elas estão disponíveis em todas as exibições de refset se você as procurar e elas somam tamanhos da mesma maneira, independentemente das exibições em que você as usa.
Tipo de Impacto
A coluna Tipo de Impacto identifica o tipo de efeito que uma alocação de memória tem na memória atualmente em uso: Impacting, Transient e Persistent.
| Tipo de impacto | Descrição |
|---|---|
| Impactando | Memória que foi (A) alocada antes do início do visor e liberada durante o visor (alocada fora e liberada dentro) ou (B) alocada durante o visor e liberada após o final do visor (alocada dentro e liberada fora). Uma alocação impactando afeta a memória em uso no final do visor. |
| Transitório | Memória alocada e liberada durante o visor (alocada dentro e liberada dentro). Uma alocação transitória está ativa somente no visor atual. As alocações transitórias normalmente contribuem para quaisquer picos de uso em um visor. |
| Persistente | Alocações que foram alocadas antes do início do visor e liberadas após o final dela (alocadas fora e liberadas fora). Uma alocação persistente está ativa durante a totalidade do visor. |
Tamanho e tamanho do impacto
A coluna Tamanho do Conjunto de Referências Pendente por Processo representa a magnitude dos acessos, independentemente do tipo de efeito (mostrado na coluna Tipo de Impacto ) causado por uma alocação, que pode ser um dos impactantes, transitórios ou persistentes. Isso não é muito valioso para análise, mas é necessário para grafo no WPA.
O Tamanho do Impacto representa o efeito sobre o tamanho do carimbo de data/hora inicial até o carimbo de data/hora final para o nível de zoom atual. Uma comparação dos valores grafados no início e no final do campo de exibição, em termos simples, corresponde ao delta. Os acessos transitórios ou persistentes não fazem com que o valor grafado seja alterado para a janela de zoom e, portanto, eles não contam.
Quando dois processos fazem referência à mesma página de memória física, a página é contada para cada processo na coluna Tamanho . Adicionar os dois valores não produz um total de todo o sistema para o conjunto de referência, pois depois que a página é adicionada ao conjunto de trabalho, o acesso subsequente não é contado. A página também é contada na coluna Tamanho do Impacto , apenas uma vez, para o primeiro processo que acessa a página. Adicionar os valores em Tamanho do Impacto para um processo produz um total válido em todo o sistema para o conjunto de referência e faz isso sem perder ou multiplicar a contagem de qualquer página. Portanto, os valores em Tamanho do Impacto representam os efeitos reais em todo o sistema na memória.
Considere um exemplo, de t_start a t_end, com os seguintes valores:
Grafo em t_start: 10 MB
Novos acessos (impactando) na janela: 10 MB
Transitório acessado na janela: 10 MB
Grafo em t_end: 10 (persistente) + 10 (impactando) = 20
Coluna de tamanho: 10 (persistente) + 10 (transitório) + 10 (impacto) = 30
Coluna Tamanho do Impacto: 10 (Impactando)
Observação
Ampliar e reduzir altera o visor e faz com que esses tamanhos sejam recalculados.
Classe Category
Há duas categorias de acesso para páginas de memória, identificadas no WPA na coluna Classe categoria : Dinâmico ou Arquivo.
| Classe Category | Descrição |
|---|---|
| Dinâmico | São alocações sob demanda de memória associadas a um processo ou estado do sistema que não persistem em um desligamento do sistema. As alocações podem ser não paginadas ou apoiadas pelo arquivo de página e podem ser Heap, VirtualAlloc e assim por diante, conforme identificado na coluna Categoria de Página . A memória dinâmica compartilhável também é identificada na Categoria de Página como PFMappedSection. |
| Arquivo | São arquivos referenciados pelo processamento que são apoiados por um arquivo em disco. Arquivos carregados como dados, arquivos carregados como imagens (executável ou DLL) e arquivos de mapa. |
Categoria de Página (Dinâmico)
Na coluna Categoria de Página , quando a classe de categoria é Dinâmica, o WPA exibe uma ou mais das categorias descritas na tabela a seguir.
| Categoria da Página , alocação dinâmica | Descrição |
|---|---|
| Virtualalloc | Essa categoria de página inclui grandes alocações dinâmicas (maiores que 512 KB ou 1 MB, dependendo do sistema) alocações dinâmicas feitas pelo aplicativo (ou feitas pela estrutura em nome do aplicativo) usando as APIs de alocação virtual. |
| Pilha | Essa categoria de página inclui alocações pequenas e dinâmicas feitas pelo aplicativo (ou feitas pela estrutura em nome do aplicativo) usando as APIs de alocação de heap. |
| UserStack | Pilha de modo de usuário para um thread. |
| PFMappedSection | Memória dinâmica compartilhável. Essa categoria de página geralmente mede a quantidade de memória gasta em alocações gráficas. Do ponto de vista do aplicativo, isso inclui não apenas imagens, vídeos, outras alocações de "pipeline de mídia" que seu aplicativo está usando, mas também inclui os blocos de construção básicos da interface do usuário, como as superfícies usadas para renderizar um ListView. |
| CopyOnWriteImage | Páginas de cópia na gravação para módulos carregados no processo. |
| LargePage | |
| AWEPage | Páginas físicas alocadas por um processo. |
| PageTable | |
| PagedPool | Heap de kernel. |
| Non-PagedPool | Heap de kernel não paginável. |
| SessionPrivate | |
| KernelStack | Pilha do modo kernel. |
| Driver | |
| DriverLockedSystemPage | |
| PTEs do sistema |
Categoria da Página (Arquivo)
Na coluna Categoria de Página , quando a classe de categoria é Arquivo, o WPA exibe uma ou mais das categorias descritas na tabela a seguir.
| Categoria da Página, arquivo | Descrição |
|---|---|
| Imagem | Um arquivo carregado como um executável, como uma DLL. |
| Mapfile | Um arquivo carregado como dados. |
| Metarquivo | Um diretório ou um log do sistema. |
| RegistryFile | Um arquivo do Registro. |
| Pré-busca | Informações usadas para acelerar a inicialização de um aplicativo. |
| DriverFile | Um driver que é carregado como um executável. |
Pilha de alocação
A coluna Pilha de Alocação identifica onde a memória é alocada.
Afetando a pilha
A coluna Pilha de Impacto mostra por que a memória é acessada.
Recomendações para medir e melhorar o desempenho em um conjunto de referência
As recomendações gerais a seguir são úteis para medir um conjunto de referências e melhorar os efeitos de um aplicativo ou recurso no sistema. Use estas recomendações na seguinte ordem:
Nota O rastreamento usa memória, que é visível como pool não paginado com a descrição "ETWB" para buffers ETW.
Examinar o uso de estado estável e o uso máximo de memória
Dois aspectos são importantes: (1) a quantidade de uso de memória que está em um estado estável no final do cenário e (2) em que os picos de uso ocorrem no conjunto de referência e por quê. Sua análise deve se concentrar primeiro no impacto de estado estável do cenário e, em seguida, examinar quaisquer picos específicos nos grafos do conjunto de referência.
Concentre-se no processo com os maiores efeitos
Concentre-se em processos que têm o maior efeito sobre o conjunto de referências, incluindo o processo de interesse, bem como outros processos do sistema.
Caracterizar e categorizar páginas de memória
A caracterização precisa ser para classes de categoria de páginas de memória, dinâmicas e de arquivo e divididas ainda mais em subcategorias.
Examinar páginas de memória na categoria Arquivo
A melhor maneira de examinar os acessos a arquivos geralmente é agrupá-los por árvore de caminho e, em seguida, identificar acessos a arquivos relacionados ao sistema (como DLLs) e acessos a arquivos específicos do processo (como bancos de dados locais, arquivos de texto, JPEGs e assim por diante).
Minimizar os acessos a arquivos específicos do processo reduz o tamanho do conjunto de referências. Ele também melhora o desempenho para iniciar o teste antes que o aplicativo ou recurso que está sendo testado seja carregado (um cenário frio).
Essencialmente, diagnosticar a parte do arquivo de um conjunto de referência requer saber quais DLLs são exclusivas para seu cenário e por que elas estão sendo carregadas, bem como todos os arquivos que seu aplicativo ou recurso acessa (por exemplo, arquivos de imagem ao decodificar para uma apresentação de slides).
Examinar páginas de memória na categoria Dinâmica
Use a seguinte sequência para analisar o rastreamento de um conjunto de referência:
Examinar processos do sistema que têm efeitos significativos
Categorize para analisar custos e identificar opções de redução.
Classificar por categoria de página
Classifique por categoria de página para o seguinte: Win32Heap, VirtualAlloc ou PFMappedSection. A categoria pode ser atribuída diretamente ao processo.
As categorias específicas do sistema geralmente podem ser ignoradas para análise inicial, embora as principais contribuições (mais de 2 a 3 MB) do pool paginado ou da pilha de kernel geralmente valham a pena examinar, pois esse volume geralmente indica um uso excessivo de threads ou componentes, como o Registro.
Aplicar marcas de pilha
Aplicar marcas de pilha para categorizar o uso de memória por pilha pode ser muito útil para identificar de onde vem o uso de memória.
Executar rastreamento específico do heap
Embora as marcas de pilha para um conjunto de referência possam fornecer uma ideia geral de quais processos estão usando o heap, muitas vezes você precisa fazer rastreamento específico de heap se o uso de heap tiver um efeito significativo em seu cenário. Um conjunto de referências não fornece a granularidade necessária para analisar o heap de um ponto de vista de alocação, pois o conjunto de referência identifica apenas quais páginas de memória são referenciadas. Um heap muito fragmentado pode mostrar um grande volume de estado estável para uso de heap, mesmo que as próprias alocações de heap sejam pequenas, mas espalhadas por todo o heap.
Examinar pilhas de alocações que têm alto uso
VirtualAlloc: examine pilhas de alocação específicas que têm alto uso de VirtualAlloc. A exibição de VirtualAlloc Commit LifeTimes na guia Análise exibe detalhes sobre o uso da confirmação por processo.
Examinar processos do sistema que têm efeitos significativos
Há outros processos do sistema que têm efeitos maiores na memória como resultado desse cenário? Exemplos de candidatos incluem serviços, agentes de aplicativos e scanners antivírus.
Categorizar para analisar custos e identificar opções de redução
Depois de trabalhar com as recomendações anteriores, use o procedimento a seguir para analisar as pilhas que têm o maior efeito sobre o sistema e explorar maneiras de reduzir os custos de memória.
Identifique as pilhas que têm os custos mais altos.
Use anotações para categorizar as pilhas com um nome para o que cada uma deve fazer.
Considere se o custo de cada categoria e pilha é um valor esperado para o cenário.
Considere se você pode reduzir os picos no cenário ativo, por exemplo, alocando memória somente quando necessário.
Considere se você pode reduzir o uso de memória em estado estável. Por exemplo, você pode liberar recursos durante o estado estável que são específicos do cenário e não são necessários? Exemplos podem incluir caches e recursos em pool. A liberação de recursos pode diminuir o volume de memória de estado estável.