Share via


Paging Pool

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Este tópico descreve o componente de paginação pool de kernel a Windows Embedded CE 6.0. Ele mostra os parâmetros para o pool carregador e o pool arquivo usar como padrão.

Visão geral sobre o pool de paginação

O pool consiste principalmente uma página contador e um segmento aparando. Durante inicialização kernel, o pool carregador e o pool arquivo são criados. Inicialização pool usa parâmetros OEM para definir os tamanhos que operação pool controle. Ele chama in para o físico Gerenciador página para páginas reserva up to o tamanho pool destino. No entanto, no que tempo, o tamanho pool é ainda zero porque ele não foi consumida qualquer uma das páginas reservadas.

O tamanho pool pode intervalo entre zero e o máximo, mas além de destino existe são vários outro intermediário tamanhos que definem o comportamento pool. O pool tem vários parâmetros controlar o tamanho, mostrado a seguinte lista

  • Destino: Quando o pool atinge ou excede seu tamanho destino, o segmento aparando inicia execução às páginas versão.
  • Liberar incremento: Após o segmento aparando inicia execução, ele é executado até que o tamanho pool fica abaixo de destino. O incremento versão é a quantidade de dados abaixo de destino para descartar antes paradas de segmento. Quando o pool atinge este tamanho, o segmento pára até que o pool excede seu tamanho destino novamente. Muito mais dados do que o necessário, gastando memória RAM e afetar desempenho descarta um incremento. Muito pequeno um incremento mantém o segmento execução quase constantemente.
  • Máximo: Não pode exceder o tamanho um pool.
  • Incremento crítico: O crítico incremento é a quantidade de espaço pool que pode ser mantido antes que o segmento vá em alta-prioridade crítico modo. Quando há Less than essa quantidade de espaço à esquerda antes de pool atinge seu máximo, o aparar segmento é executado em prioridade alta. Após o pool atinge este tamanho, o segmento continua execução na prioridade alta até que ele possui paginável sem memória suficiente para que o pool tenha duas vezes o crítico incremento de espaço livre restantes. O segmento, em seguida, retorna para baixa prioridade até que o pool tem menor do que o crítico incremento restante novamente. Muito Grande um incremento inicia o segmento execução muito cedo e torna-o executar por muito tempo. Muito pequeno um incremento Acorda o segmento com muita freqüência.

Implementação de pools de página

O pool tem um tamanho máximo, acima do qual ele não é possível aumentar. Mesmo se houver livre memória no sistema, o pool não pode exceder seu tamanho máximo. Em vez disso, páginas pool devem ser descartadas para espaço livre para novas páginas.

Sempre que o pool é abaixo ou ao seu tamanho destino, sistema ferramentas apresentação de quantidade de memória destino sendo consumida, mesmo se o pool não está usando no momento que quantidade de memória. Quando o pool é maior do que seu destino, o sistema ferramentas apresentação memória adicional ser usada, bem como.

O pool não usar um conjunto predeterminado de físico páginas e o conjunto de físico páginas usadas pelas alterações pool livremente. Não é possível para determinar qual físico páginas estão em uso pelo pool a qualquer momento, apenas quantas páginas estão em uso.

Destino pool e os tamanhos máximo são definidos no início de inicializar e nunca alteração. Não existem planos para tornar os parâmetros pool dinamicamente alterável no momento.

O kernel tem dois pools: Um para páginas carregador (páginas EXE e DLL) e outro para o arquivo armazenar em cache e arquivos mapeados na memória. Os dois pools podem ser controlados de forma independente e pode ser desabilitados pela configuração seus tamanhos para zero. Quando um pool for desativado, há há restrições em uso de memória. O carregador ou arquivo armazenar em cache pode consumir páginas up to o limite de livre físico memória.

Os parâmetros pool são configurável com os valores FIXUPVAR arquivo Config.bib, portanto, é possível modificar esses valores sem modificação codificar ou recriando a camada de adaptação OEM (OAL).

const volatile DWORD LoaderPoolTarget;
const volatile DWORD LoaderPoolMaximum;
const volatile DWORD LoaderPoolReleaseIncrement;
const volatile DWORD LoaderPoolCriticalIncrement;
const volatile DWORD LoaderPoolNormalPriority256;
const volatile DWORD LoaderPoolCriticalPriority256;
const volatile DWORD FilePoolTarget;
const volatile DWORD FilePoolMaximum;
const volatile DWORD FilePoolReleaseIncrement;
const volatile DWORD FilePoolCriticalIncrement;
const volatile DWORD FilePoolNormalPriority256;
const volatile DWORD FilePoolCriticalPriority256;

Os OEMs também podem modificar os valores ao executar-tempo, por chamado um controle OAL I/O, IOCTL_HAL_GET_POOL_PARAMETERSe passar uma estrutura NKPagePoolParameters.

Para depuração fins, o kernel expõe estado pool com um controle E/S. Um aplicativo pode consulta o estado pool por chamado KernelLibIoControl IOCTL_KLIB_GET_POOL_STATEe passando uma estrutura NKPagePoolState.

Definir o tamanho do pool de paginação

Definir o tamanho pool de paginação pela configuração de variável de ambiente PAGINGPOOLSIZE na janela de compilar, seguido por execução makeimg. O seguinte exemplo de código mostra como definir o tamanho pool de paginação para 4.5 MB:

set IMGPAGINGPOOL=1
set PAGINGPOOLSIZE=00480000
makeimg

Coletando dados de desempenho

O tempo inicializar e tempo iniciar aplicativo são afetados por tamanho de pool de paginação. Portanto, eles fornecem dados boas para determinar o melhor tamanho pool de paginação. Ele é importante a medida de tempo inicializar e tempo iniciar aplicativo consistentemente 3 - 5 vezes e, em seguida, use o médio dados.

Tempo de inicialização

Inicia a stopwatch assim você pressionar o botão de energia (método 1) ou quando você vir a Tela carregador inicializar (método 2). Certifique-se ser consistente, como há segundos a few diferença entre os dois métodos. Parar o tempo quando a Tela doméstica leve chaves são desenhadas.

Fazer não medida primeiro alguns dos inicializações após desmarcar memória flash porque executa o software adicional inicialização durante esses inicializações. Horários inicializar subseqüentes devem ser consistente e fornecem dados boa pontos.

Tempo de inicialização do aplicativo

Inicia a stopwatch assim você executar o apropriado entrada usuário para iniciar o aplicativo. Parar o tempo assim o leve chaves são desenhadas para o aplicativo. Caixa de Entrada, Contatos e Calendário são bons candidatos para essas medidas. É importante para iniciar a primeira medida após inicializar. É ainda mais importante para iniciar os aplicativos a mesma ordem em cada inicializar.

Levando vantagens de NOR

Se você tiver memória flash NOR disponível, considere descompactando como muitos pacotes como possíveis para o memória flash NOR. Ele ajuda tanto desempenho e uso memória RAM porque a codificar pode ser executar no local.

Gravar-voltar de cache

Gravar memória flash é um gargalo para muitos cenários sobre o dispositivo. Para atenuar o afunilamento, você pode habilitar a gravação-voltar para o memória flash armazenar em cache sistema de arquivos na plataforma. Um 64-armazenar em cache KB é suficiente para a chave usuário cenários. Ao registrar o memória flash sistema de arquivos em Platform.reg, a seguinte chaves Registro configurar a memória flash sistema de arquivos para um 64 - gravação KB - voltar armazenar em cache. MSFlash deve ser substituído com o nome do perfil para o driver bloco que controla a partição TFAT.

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\FATFS]
   "Flags"=dword:00000014
   "FormatTFAT"=dword:1
   "MountAsBootable"=dword:1
   "MountAsRoot"=dword:1
   "CheckForFormat"=dword:1
   "EnableWriteBack"=dword:1
   "DataCacheSize"=dword:00000080;
   128 sectors(128*512=64KB)

Parâmetros padrão para o pool do carregador

A seguinte tabela mostra os parâmetros usar como padrão para o pool carregador.

Parâmetro Valor Descrição

Destino

4 MB

Tamanho típico pool.

Máximo

6 MB

Deve ser razoável para acomodar casos, como a inicialização, que é executado mais codificar.

Liberar incremento

128 KB

Deixa algumas livre páginas, sem gastando muito de tamanho de destino.

Incremento crítico

64 KB

Não descartar muito dados em alta prioridade, mas deixa 128 KB de salas posteriormente.

Prioridade normal

255 bytes

Mais baixa possível prioridade, para minimizar efeito no desempenho de aparando durante a inicialização e iniciar aplicativo.

Prioridade crítica

247 bytes

Maior que todos os não - real - prioridades tempo para executar antes todos os segmentos aplicativo.

Parâmetros padrão para o pool de arquivos

A seguinte tabela mostra os parâmetros usar como padrão para o pool carregador.

Parâmetro Valor Descrição

Destino

1 MB

Tamanho do cache arquivo típico. Não consumir muita memória no estado estável.

Máximo

10 MB

Durante atividade arquivo pesado, expansão em mais memória.

Liberar incremento

64 KB

Não gastando muito de tamanho de destino. Espaço extra provavelmente não é uma prioridade pois qualquer pessoa que excedem o destino provavelmente ele excede por muita.

Incremento crítico

64 KB

Não descartar muito dados em alta prioridade, mas deixa 128 KB de espaço mais tarde.

Prioridade normal

255 bytes

Mais baixa possível prioridade, para minimizar o efeito no desempenho de aparando durante arquivo atividade.

Prioridade crítica

251 bytes

THREAD_PRIORITY_NORMAL, para evitar causando usuário latência interface (interface do usuário) ou outros problemas notável.

See Also

Concepts

Memory Architecture

Other Resources

Developing a Device Driver
Bringing Up a Hardware Platform