Exercício 3 – Acompanhar o volume do driver e as alocações dinâmicas durante a inicialização
Pool é o recurso de memória para componentes do modo kernel que o sistema operacional e os drivers de dispositivo usam para armazenar suas estruturas de dados. O pool tem quatro áreas de alocação básicas:
Pool não paginado: Alocações garantidas para residir na memória física.
Pool de Páginas: Alocações que podem ser paginada fora da memória para o arquivo de página.
Pool não paginável do NX: Alocações não paginada, que não são executáveis.
Pool de sessões: Alocações feitas por sessão. Eles são pagináveis.
O uso do pool é uma contribuidor significativa para o uso geral de memória em um computador – ele é o maior consumidor de memória imediatamente após a inicialização. Qualquer redução no uso do Pool reduz o uso geral de memória do sistema em todo o sistema operacional, com a memória não paginável sendo a categoria de prioridade mais alta para gerar reduções (para).
Neste exercício, você examinará as alocações de driver da Microsoft na caixa de entrada e seu volume (no momento da inicialização) durante a inicialização.
Etapa 1: Reunir um rastreamento de memória do pool em uma transição de inicialização
Nesta etapa, você coletará um rastreamento de inicialização usando o WPR (Gravador de Desempenho do Windows) que contém dados do pool e do conjunto de residentes.
Abrir o WPR no menu Iniciar
Selecione os provedores de eventos certos:
Uso do pool
Conjunto de Residentes
Triagem de primeiro nível
Selecione inicialização como o cenário de desempenho.
Selecione Arquivo como o modo de registro em log.
Defina 1 como o Número de Iterações.
Clique em Iniciar e selecione um local para salvar o arquivo ETL.
O sistema reinicializa automaticamente, coleta um rastreamento e para depois que a área de trabalho fica visível.
Etapa 2: Examinar dados do pool usando o WPA
Os dados do Pool são expostos por meio da tabela de resumo do Pool Graph no WPA. As principais colunas de interesse estão na tabela a seguir.
Você pode adicionar ou remover colunas se clicar com o botão direito do mouse nos cabeçalhos da coluna.
Terminologia | Descrição |
---|---|
Marca de pool | A marca associada a uma alocação de pool. |
Módulo de marca de pool | O módulo (driver) associado a uma marca de pool. |
Pilha | Mostra o caminho do código em um thread que leva a uma alocação de memória. |
Paginada | Indica se as alocações foram colocadas ou não em um pool de páginas ou em um pool não paginado. |
Tipo de impacto | Mostra se uma alocação contribui para o uso constante de memória de estado ou se é uma alocação transitória. |
Abra o rastreamento capturado na Etapa 1 com WPA.
Abra o menu Rastreamento e selecione Configurar caminho de símbolos.
- Especifique o caminho do cache de símbolos. Para obter mais informações sobre símbolos, consulte a página Suporte a Símbolos no MSDN.
Abra o menu Rastreamento e selecione Carregar símbolos.
Localizar o grafo pool na categoria Memória do Explorer do Graph
Arraste e solte o grafo pool na guia Análise .
Organize a tabela para mostrar estas colunas:
Módulo de marca de pool
Paginada
Tipo de impacto
Pilha
Marca de pool
Count
Afetando tamanho e tamanho
**Observação em marcas de pool: **
Se você for um desenvolvedor de driver, verifique se as marcas de pool usadas pelo driver são claras e facilmente identificáveis para facilitar a análise. Por exemplo, se o nome da sua empresa for Fabrikam, você poderá adicionar um prefixo "Fbk" a todas as marcas de pool: FbkPool1, FbkPool2, FbkBuffer etc.
Desabilitar todas as séries no grafo (clique com o botão direito do mouse em ->Desabilitar ->In Entire Graph ->All Series)
Classifique afetando o tamanho clicando no cabeçalho da coluna Tamanho impactando .
Drivers que têm o maior uso de memória de estado estável são exibidos na parte superior.
Etapa 3: Interceptar dados de alocação do pool
Amplie os primeiros 30 segundos do linha do tempo.
Selecione um driver (por exemplo, ACPI.sys, mas qualquer um fará).
Examine a memória nãopagada e expanda a linha.
A memória não paga deve ser o foco de suas investigações, pois ela não pode ser movida para o arquivo de página quando há pressão de memória sobre o sistema.
Habilite a Legenda para as categorias Impacting e Transient .
Classifique afetando o tamanho clicando no cabeçalho da coluna.
Afetar a memória diretamente contribui para o volume de memória geral do driver em todos os momentos. No exemplo anterior, você pode dizer que ACPI.sys usa alguma memória não paginada o tempo todo e que esse uso de estado constante aumenta duas vezes (primeiro quando o driver está carregando, depois uma segunda vez em cerca de 3 segundos).
Expanda a pilha e navegue por ela. Na parte superior, você deve ver chamadas de função que levam às maiores alocações de pool de estado constante.
No exemplo a seguir, você pode ver que ACPI.sys faz um total de 255 alocações de pool, totalizando 1,2 MB na função ACPIInitStartACPI . É aí que o desenvolvedor do driver deve se concentrar para melhorar o uso constante de memória de estado do driver, pois essa função é responsável pela maioria das alocações de driver.
Classifique por Tamanho clicando no cabeçalho da coluna.
Faça a mesma coisa para a categoria Transiente . Expanda a pilha e navegue por ela. Na parte superior, você deve ver chamadas de função que levam às maiores alocações transitórias do pool.
No exemplo a seguir, você pode ver que o pico inicial de uso transitório de memória é causado principalmente pela execução de DPCs de dispositivos por ACPI (ACPI.sys! ACPIBuildDeviceDpc). O pico que introduziu o código sob essa chamada de função totaliza 455 KB.
Etapa 4: Medir o volume de código do driver
Localize o grafo Conjunto de Residentes na categoria Memória do Explorer do Graph.
Arraste e solte o grafo Conjunto de Residentes na guia Análise.
Certifique-se de remover o grafo (Ctrl+Shift+"-").
Selecione a predefinição de grafo página com backup de arquivo.
Por meio da coluna árvore de caminho , navegue até o driver selecionado na Etapa 3 (por exemplo, ACPI.sys em C:/Windows/drivers).
Expanda a categoria Driver e concentre-se nas páginas Ativas .
O valor na coluna Tamanho representa o impacto que o código do driver tem no volume de memória. No exemplo a seguir, são 0,48 MB.