Ao se fazer alterações em uma configuração, poold atua nas direções que você fornece. Você especifica essas direções como uma série de restrições e objetivos. O poold usa suas especificações para determinar o valor relativo de diferentes possibilidades de configuração em relação à configuração existente. O poold em seguida altera as atribuições de recursos da configuração atual para gerar novas configurações candidatas.
Restrições afetam a gama de configurações possíveis eliminando algumas das alterações potenciais que poderiam ser feitas em uma configuração. As restrições a seguir, que são especificadas na configuração libpool, estão disponíveis.
As alocações mínimas e máximas de CPU
Componentes fixos que não estão disponíveis para serem movidos de um conjunto
Para obter mais informações sobre propriedades de grupos, consulte a página do manual libpool(3LIB) e Propriedades de grupos.
Estas duas propriedades colocam limites ao número de processadores que podem ser alocados para um conjunto de processadores, o mínimo e o máximo. Para obter informações sobre estas propriedades, consulte a Tabela 12–1.
Dentro destas restrições, recursos de uma partição de recurso estão disponíveis para serem alocados para outras partições de recurso na mesma instância do Solaris. O acesse ao recurso é obtido pela vinculação a um grupo que esteja associado ao conjunto de recursos. A vinculação é realizada no login ou manualmente pelo administrador que tenha o privilégio PRIV_SYS_RES_CONFIG.
A propriedade cpu-pinned indica que uma determinada CPU não deve ser movida por DRP do conjunto de processadores no qual está localizada. Você pode definir esta propriedade libpool como utilização máxima de cache para um aplicativo específico que esteja sendo executado dentro de um conjunto de processadores.
Para obter informações sobre estas propriedades, consulte a Tabela 12–1.
A propriedade pool.importance descreve a importância relativa de um grupo como definida pelo administrador.
Objetivos são especificados da mesma forma para restrições. O conjunto completo de objetivos está documentado na Tabela 12–1.
Há duas categorias de objetivos.
Um objetivo dependente da carga de trabalho é um objetivo que variará de acordo com a natureza da carga de trabalho em execução no sistema. Um exemplo é o objetivo utilization. Os dados da utilização de um conjunto de recursos variarão de acordo com a natureza da carga de trabalho que esteja ativa no conjunto.
Um objetivo independente de carga de trabalho é um objetivo que não varia de acordo com a natureza da carga de trabalho em execução no sistema. Um exemplo é o objetivo locality de CPU. A medida avaliada de localidade para um conjunto de recursos não varia com a natureza da carga de trabalho que esteja ativa no conjunto.
Você pode definir três tipos de objetivos.
Nome |
Elementos válidos |
Operadores |
Valores |
---|---|---|---|
wt-load |
system |
N/D |
N/D |
locality |
pset |
N/D |
loose | tight | none |
utilization |
pset |
< > ~ |
0–100% |
Objetivos são armazenados em seqüências de propriedades na configuração libpool. Os nomes das propriedades são os seguintes:
system.poold.objectives
pset.poold.objectives
Objetivos têm a seguinte sintaxe:
objectives = objective [; objective]*
objective = [n:] keyword [op] [value]
Todos os objetivos levam um prefixo de importância opcional. A importância atua como um multiplicador para o objetivo, aumentando assim a significância de sua contribuição para a avaliação da função do objetivo. O intervalo é de 0 a INT64_MAX (9223372036854775807). Se não especificado, o valor padrão da importância é 1.
Alguns tipos de elemento fornecem suporte a mais de um tipo de objetivo. Um exemplo é pset. Você pode especificar vários tipos de objetivo para esses elementos. Pode também especificar vários objetivos de utilização em um único elemento pset.
Para exemplos de uso, consulte Como definir objetivos de configuração.
O objetivo wt-load favorece configurações que coincidem alocações de recursos com utilizações de recurso. Um conjunto de recursos que use mais recursos receberão mais recursos quando este objetivo estiver ativo. wt-load significa carga ponderada.
Use este objetivo quando você estiver satisfeito com as restrições estabelecidas usando as propriedades mínimas e máximas, e desejar que o daemon manipule recursos livremente dentro dessas restrições.
O objetivo locality influencia o impacto que a localidade, como medida por dados de grupo de localidade (lgroup), tem sobre a configuração selecionada. Uma definição alternativa para localidade é latência. Um lgroup descreve recursos de CPU e de memória. O lgroup é usado pelo sistema do Solaris para determinar a distância entre recursos, usando o tempo como a medida. Para obter mais informações sobre a abstração do grupo de localidades, consulte Locality Groups Overview no Programming Interfaces Guide.
Este objetivo pode tomar um dos três valores seguintes:
Se definido, as configurações que maximizam a localidade de recursos são favorecidas.
Se definido, as configurações que minimizam a localidade de recursos são favorecidas.
Se definido, o favorecimento de uma configuração não é influenciado pela localidade do recurso. Este é o valor padrão para o objetivo locality.
Em geral, o objetivo locality deve ser definido para tight. No entanto, para maximizar a largura de banda da memória ou para minimizar o impacto das operações DR em um conjunto de recursos, você pode definir este objetivo como loose ou mantê-lo na definição padrão de none.
O objetivo utilization favorece configurações que alocam recursos a partições que não atendem ao objetivo de utilização especificado.
Este objetivo é especificado usando-se operadores e valores. Os operadores são os seguintes:
O operador “less than” indica que o valor especificado representa um valor de destino máximo.
O operador “greater than” indica que o valor especificado represente um valor de destino mínimo.
O operador “about” indica que o valor especificado é um valor de destino em relação ao qual determinada flutuação é aceitável.
Um pset pode ter somente um objetivo de utilização definido para cada tipo de operador.
Se o operador ~ estiver definido, os operadores < e > não podem ser definidos.
Se os operadores < e > estiverem definidos, o operador ~ não pode ser definido. Observe que as configurações do operador < e do operador > não podem se contradizer.
Você pode definir um operador < e um operador > juntos para criar um intervalo. Os valores serão validados para garantir que não se sobreponham.
No exemplo abaixo, poold avalia esses objetivos para o pset:
O utilization deve ser mantido entre 30 por cento e 80 por cento.
O locality deve ser maximizado para o conjunto de processadores.
Os objetivos devem tomar a importância padrão de 1.
pset.poold.objectives "utilization > 30; utilization < 80; locality tight"
Para exemplos adicionais de uso, consulte Como definir objetivos de configuração.
Há quatro categorias de propriedades:
Configuração
Restrição
Objetivo
Parâmetro de objetivo
Nome da propriedade |
Tipo |
Categoria |
Descrição |
---|---|---|---|
system.poold.log-level |
seqüência |
Configuração |
Nível de registro |
system.poold.log-location |
seqüência |
Configuração |
Local de registro |
system.poold.monitor-interval |
uint64 |
Configuração |
Monitoração de intervalo de amostragem |
system.poold.history-file |
seqüência |
Configuração |
Local do histórico de decisão |
pset.max |
uint64 |
Restrição |
Número máximo de CPUs para este conjunto de processadores |
pset.min |
uint64 |
Restrição |
Número mínimo de CPUs para este conjunto de processadores |
cpu.pinned |
bool |
Restrição |
CPUs fixadas a este conjunto de processadores |
system.poold.objectives |
seqüência |
Objetivo |
Seqüência formatada que segue a sintaxe da expressão de objetivo do poold |
pset.poold.objectives |
seqüência |
Objetivo |
Seqüência formatada que segue a sintaxe da expressão do poold |
pool.importance |
int64 |
Parâmetro de objetivo |
Importância atribuída pelo usuário |