Paging Pool
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. |