“PROGRAMAÇÃO DE ENCADEAMENTO CIENTE DE ENERGIA E USO DINÂMICO DE PROCESSADORES”
FUNDAMENTOS
O gerenciamento do consumo de energia em um sistema de computador é importante para ampliar a capacidade operacional de uma bateria e reduzir o consumo geral de energia, o que pode benéfico tanto física como ambientalmente. Mesmo para os computadores não móveis, a redução da energia requisitada é benéfica no sentido de economizar recursos globais importantes e prolongar a operação, quando depender de um sistema de backup de bateria, como durante uma interrupção de energia elétrica.
Embora a maioria dos componentes de um sistema de computador use energia durante a operação do sistema, o processador utiliza uma parte desproporcional da energia do sistema. Muitos sistemas de computador, incluindo os sistemas baseados no consumidor, incluem múltiplos processadores e/ou processadores com múltiplos núcleos. Múltiplos processadores permitem aos computadores a execução de níveis crescentes de trabalho em paralelo, no entanto processadores adicionais podem também aumentar o consumo de energia. A maioria dos processadores modernos se caracteriza por estados muito baixos de consumo de energia ociosa, que podem ser aplicados por um núcleo em um sistema de múltiplos núcleos, e que podem ser controlados por um sistema operacional. Além disso, a frequência do processador pode ser escalada em uma base por núcleo ou por grupo de núcleos a fim de reduzir o uso de energia por parte do sistema.
SUMÁRIO
O presente sumário é provido no sentido de introduzir conceitos simplificados de provisão de uma programação de encadeamento ciente de energia e de um uso dinâmico de processadores, o que será descrito abaixo na seção Descrição Detalhada. Este sumário não se destina a identificar as características essenciais da matéria reivindicada, nem é destinada a ser utilizada na determinação do âmbito da matéria reivindicada.
Técnicas e aparelhos exemplares para a provisão de uma programação de encadeamento ciente de energia e do uso dinâmico de processadores são apresentados. De acordo com uma ou mais modalidades, um sistema de múltiplos núcleos é monitorado no sentido de determinar a atividade do núcleo. As diretivas de energia são recuperadas para dar início a um plano de economia de desempenho e energia para os núcleos. Um ou mais dos núcleos do sistema de múltiplos núcleos são estacionados (colocados em um baixo estado de energia especificado pelo sistema) com base na diretiva de energia e na atividade do núcleo. Quando um ou mais núcleos são estacionados, os núcleos não estacionados são deixados para lidar com todas as demais atividades do sistema. Em algumas modalidades, as diretivas de energia podem ser modificadas de modo a incluir fatores adicionais que influenciam a economia de energia ou o desempenho do sistema. Em pelo menos uma outra modalidade, o sistema de múltiplos núcleos pode ajustar dinamicamente um estado de potência de um ou mais núcleos não estacionados além de estacionar um ou mais núcleos.
BREVE DESCRIÇÃO DOS DESENHOS
A descrição detalhada é descrita com referência às figuras em anexo. Nas figuras, o dígito mais à esquerda de um número de referência identifica a figura na qual o número de referência aparece pela primeira vez. O mesmo número de referência em diferentes figuras se refere a itens similares ou idênticos.
A Figura 1 é um sistema ilustrativo que pode ser utilizado para implementar pelo menos uma modalidade de programação de encadeamento ciente de energia e uso dinâmico de processadores.
A Figura 2 mostra um fluxograma de pelo menos uma modalidade de um processo de criação de uma máscara de estacionamento de núcleo e a implementação da máscara com um programador de encadeamento de modo a permitir a alocação de trabalho aos processadores.
As Figuras 3A e 3B mostram utilizações ilustrativas de núcleo de acordo com pelo menos uma modalidade da presente invenção. Mais especificamente, a Figura 3B mostra uma revisão ilustrativa das utilizações de núcleo em resposta a uma utilização ilustrativa de núcleo de sistema, como mostrado na Figura 3A.
A Figura 4 mostra um fluxograma de pelo menos uma modalidade de um processo ilustrativo de avaliação de uma programação de encadeamento e uso dinâmico de processadores e de determinação de uma configuração revisada para os processadores.
A Figura 5 mostra um fluxograma de pelo menos uma modalidade de um processo ilustrativo da provisão de uma programação de encadeamento ciente de energia e uso dinâmico de processadores.
A Figura 6 mostra um outro fluxograma de pelo menos uma modalidade de um processo ilustrativo de provisão de uma programação de encadeamento ciente de energia e uso dinâmico de processadores, incluindo ainda a contagem de domínios ociosos.
A Figura 7 mostra um fluxograma ilustrativo de pelo menos uma modalidade de definições para uma programação de encadeamento ciente de energia e uso dinâmico de processadores.
DESCRIÇÃO DETALHADA
Os processadores podem permitir estados de energia ociosa de baixa potência, incluindo um estado ocioso que não consome energia (zero watt). Um sistema operacional pode direcionar um ou mais processadores (ou simplesmente núcleos) para um estado de energia ociosa (ou seja, um estado de suspensão do processador) quando não há um trabalho útil a realizar. A maximização do tempo despendido nestes estados de baixa potência pode aumentar a eficiência energética do sistema e/ou ampliar o desempenho da bateria.
Além desses estados de energia ociosa do processador, os processadores podem também prover controles para o ajuste da frequência do processador, isoladamente ou em conjunto com uma redução simultânea na voltagem do núcleo do processador. Estes controles podem ser referidos coletivamente como um recurso de gerenciamento de energia do processador (PPM).
Os processadores podem facilitar a execução de milhares de execuções por segundo. Embora tenha uma capacidade tão grande para a execução de instruções de computador, os processadores podem ter uma variação considerável na carga de trabalho em períodos curtos de tempo. Por exemplo, períodos tão curtos como um atraso entre as teclas digitadas por um datilografo podem permitir que o gerenciamento PPM reduza a potência do processador momentaneamente ou mesmo entre em um breve estado de suspensão. Embora uma fração de segundo de energia possa parecer negociável, por períodos mais longos de tempo, a economia de energia cumulativa poderá ser significativa.
Portanto, o gerenciamento PPM pode reduzir as demandas de energia ao direcionar processadores não utilizados para um estado de baixa potência ou um estado de suspensão (estado estacionado), quando os processadores não possuem uma carga de trabalho suficiente para justificar estados mais elevados de energia. Os núcleos estacionados podem ser colocados em um estado de energia ociosa de processador (estado C ACPI), utilizando uma quantidade mínima de energia ou nenhuma energia sequer. O trabalho ativo a ser feito no sistema será de um tempo multiplexado nos processadores não estacionados.
Por conseguinte, são aqui apresentadas, nas diversas seções que se seguem, técnicas e aparelhos para facilitar a provisão de uma programação de encadeamento ciente de energia e uso dinâmico de processadores.
Ambiente Ilustrativo
A Figura 1 é um sistema ilustrativo 100 que pode ser usado para implementar pelo menos uma modalidade de programação de encadeamento ciente de energia e uso dinâmico de processadores. O sistema 100 inclui um dispositivo computacional 102. Por exemplo, o dispositivo computacional pode ser um computador móvel 102(1), um computador de mesa 102(2), e/ou um servidor 102(N), entre outros dispositivos computacionais possíveis. Em uma configuração muito básica, o dispositivo computacional 102 tipicamente inclui um ou mais processadores (processadores) 104. Por exemplo, os processadores 104 podem ser pelo menos um dentre vários processadores independentes configurados em paralelo ou em série ou uma unidade de processamento de múltiplos núcleos, isoladamente ou em combinações diversas. Um processador de múltiplos núcleos pode ter dois ou mais processadores (núcleos) incluídos no mesmo chip ou circuito integrado. Os termos processador, núcleo, e processador lógico podem ser usados indiscriminadamente em todo o presente documento, salvo se especificamente indicado em contrário, com referência a um elemento em particular.
Além disso, o dispositivo computacional 102 inclui uma memória de sistema 106. Dependendo da configuração exata e tipo de dispositivo computacional, a memória de sistema 106 pode ser volátil (como a memória RAM), não volátil (como a memória ROM, a memória flash, etc.), ou uma combinação de ambas. A memória de sistema 106 inclui tipicamente um sistema operacional 108, um ou mais módulos de programa 110, e pode incluir dados de programa 112.
O sistema operacional 108 pode incluir um gerenciador de energia do kernel 114, que é responsável pelo direcionamento do uso dos recursos de gerenciamento de energia de processador (PPM). O gerenciador de energia do kernel 114 pode ajustar o desempenho (por exemplo, a velocidade) dos processadores 104 utilizando um estado de desempenho (estado p) ou um estado de aceleração linear (estado t). Por exemplo, o gerenciador de energia do kernel 114 pode equilibrar o consumo de energia dos processadores 104 com a carga de trabalho corrente a fim de economizar energia quando possível. Adicionalmente ou de maneira alternativa, o gerenciador de energia do kernel 114 pode permitir que os processadores 104 provenham uma capacidade máxima de processamento em resposta a uma demanda de carga de trabalho. Além disso, o gerenciador de energia do kernel 114 pode direcionar um ou mais dos processadores 104 para um estado de suspensão de baixa potência quando nenhum encadeamento ativo está pronto para ser executado, como os encadeamentos do módulo de programa 110.
O sistema operacional 108 pode prover módulos para unidades de trabalho (encadeamentos) de enfileiramento, programação, priorização, e expedição em todos os processadores disponíveis 104 no sistema 100, o que pode ser representado como uma coleção de módulos referidos coletivamente como um programador de encadeamento do kernel 116. Quando um encadeamento ativo está pronto para ser executado, o programador do kernel 116, por um ou mais módulos, despacha o encadeamento para qualquer núcleo disponível para processamento.
De um modo geral, o gerenciador de energia do kernel 114 e o programador do kernel 116 têm interesses conflitantes no controle e operação dos processadores 104. O gerenciador de energia do kernel é configurado para minimizar o consumo de energia dos processadores 104, e, portanto, tenta reduzir a frequência e/ou o estado de potência de um ou mais dos processadores 104. Por outro lado, o programador do kernel 116 é configurado para maximizar a velocidade de processamento e, assim, favorecer o trabalho de distribuição para todos os processadores 104.
O dispositivo computacional 102 pode ter recursos adicionais ou outras funcionalidades. Por exemplo, o dispositivo computacional 102 pode também incluir outros dispositivos de armazenamento de dados (removíveis e/ou não removíveis), como, por exemplo, discos magnéticos, discos óticos, ou fita. Este armazenamento adicional é ilustrado na Figura 1 por meio de um armazenador removível 118 e de um armazenador não removível 120. Os meios de armazenamento de computador podem incluir meios voláteis ou não voláteis, removíveis ou não removíveis implementados em qualquer método ou tecnologia para o armazenamento de informação, tais como instruções legíveis em computador, estruturas de dados, módulos de programa, ou outros dados. A memória de sistema 106, o armazenador removível 118 e o armazenador não removível 120 são exemplos de meios de armazenamento de computador. Portanto, os meios de armazenamento de computador incluem, mas não se limitam a, memória RAM, memória ROM, memória EEPROM, memória flash ou outra tecnologia de memória, CD-ROM, discos digitais versáteis (DVD) ou outro armazenador ótico, fitas cassetes magnéticas, fita magnética, armazenador de disco magnético ou outros dispositivos de armazenamento magnético, ou qualquer outro meio que possa ser usado para armazenar as informações desejadas e que podem ser acessadas pelo dispositivo computacional 102. Quaisquer destes meios de armazenamento de computador podem fazer parte do dispositivo computacional 102.
O dispositivo computacional 102 pode ter também um ou mais dispositivos de entrada 122, como um teclado, um mouse, uma caneta ótica, um dispositivo de entrada de voz, um dispositivo de entrada de toque, etc. Um ou mais dispositivos de saída 124, como um monitor, alto-falantes, uma impressora, etc. também podem ser incluídos diretamente ou através de uma conexão com o dispositivo computacional 102.
O dispositivo computacional 100 pode também incluir uma conexão de comunicação 126 que permite que o dispositivo se comunique com outros dispositivos computacionais, como, por exemplo, por uma rede. A conexão de comunicação 126 é um exemplo de meios de comunicação. Os meios de comunicação podem ser normalmente incorporados por meio de instruções legíveis em computador, estruturas de dados, ou módulos de programa. O termo sinal de dados modulado significa um sinal de que tem uma ou mais de suas características definidas ou alteradas de modo a codificar informações do sinal. A título de exemplo, e não de limitação, os meios de comunicação incluem meios físicos, tais como uma rede física ou uma conexão direta por fio, e meios de comunicação sem fio, tais como meios acústicos, RF (radiofrequência), infravermelhos ou outros meios comunicação sem fio. Os dados legíveis em computador podem ser qualquer tipo de mídia disponível que possa ser acessada pelo dispositivo computacional 102. A título de exemplo, e não de limitação, os meios legíveis em computador podem incluir a mídia de armazenamento de computador e os meios de comunicação.
Vários módulos e técnicas podem ser aqui descritas no contexto geral das instruções executáveis em computador, tais como os módulos de programa, executados por um ou mais computadores ou outros dispositivos. De modo geral, os módulos de programa in cluem rotinas, programas, objetos, componentes, estruturas de dados, etc. para a execução de tarefas específicas ou para implementar tipos de dados abstratos específicos. Estes módulos de programa ou coisa do gênero podem ser executados como um código nativo, ou podem ser baixados e executados, por exemplo, em uma máquina virtual ou em outro ambiente de execução de compilação just-in-time. Normalmente, a funcionalidade dos módulos de programa pode ser combinada ou distribuída como desejado em várias modalidades. Uma implementação desses módulos e técnicas pode ser armazenada ou transmitida através de algum tipo de meio legível em computador.
Configuração Ilustrativa de Processador
A Figura 2 mostra um fluxograma de pelo menos uma modalidade de um processo 200 de criação de uma máscara de estacionamento de núcleo e de implementação da máscara com o programador de encadeamento a fim de permitir a alocação de trabalho aos processadores. O processo 200 é ilustrado como uma coleção de blocos em um gráfico de fluxo lógico, que representam uma sequência de operações que podem ser implementadas em um hardware, software, ou em uma combinação dos mesmos. No contexto de um software, os blocos representam as instruções executáveis em computador que, quando executadas por um ou mais processadores, realizam as operações citadas. Geralmente, as instruções executáveis em computador incluem rotinas, programas, objetos, componentes, estruturas de dados ou coisa do gênero, que executam funções específicas ou implementam tipos de dados abstratos específicos. A ordem na qual as operações são descritas não se destina a ser interpretada como uma limitação, e qualquer número dentre os blocos descritos pode ser combinado em qualquer ordem e/ou em paralelo de modo a implementar o processo. Outros processos descritos através no presente documento, além do processo 200, serão interpretados em conformidade. Para fins de apresentação, o processo 200 é descrito com referência ao sistema 100 da Figura 1.
Como mostrado na Figura 2, a máscara de estacionamento de núcleo é criada na memória de sistema na etapa 202. Por exemplo, o gerenciador de energia do kernel 114 pode criar a máscara de estacionamento de núcleo da etapa 202, que reside no sistema operacional 108. Uma máscara de estacionamento de núcleo ilustrativa (máscara de bits, ou simplesmente máscara) 204 pode prover uma célula representando um núcleo correspondente. Como mostrado na Figura 2, o sistema ilustrativo inclui oito núcleos, no entanto, mais ou menos núcleos podem ser usados. A máscara de bits 204 inclui um valor de bit em cada célula, sendo que 1 representa um núcleo estacionado e 0 representa um núcleo não estacionado. Um núcleo estacionado é um núcleo que é colocado em um estado de suspensão de baixa potência. Em algumas modalidades, um núcleo estacionado não tem consumo de energia, portanto, usa zero watts. Em algumas modalidades, os núcleos têm dependências, tais como um circuito de hardware compartilhado. Quando ambos os núcleos podem ser colocados em um estado de baixa potência, as dependências também podem ser implicitamente colocadas em um estado de baixa potência. Assim, uma máscara de estacionamento de núcleo pode ser selecionada, o que irá maximizar a economia de energia em comparação com outra máscara. Por exemplo, ao se desligar todos os núcleos de um único soquete de processador, será possível economizar mais energia do que ao se desligar a metade dos núcleos em dois soquetes de processador. A máscara de bits 204 inclui quatro núcleos estacionados, numerados (da direita para a esquerda, de zero a sete): 3, 5, 6 e 7. Deste modo, conclui-se que os núcleos 0, 1, 2 e 4 são não núcleos estacionados.
Em conformidade com uma ou mais modalidades, a máscara de bits 204 pode ser invertida na etapa 206 de modo a criar a máscara de bits invertida 208. Por exemplo, o gerenciador de energia do kernel 114 pode criar a máscara de bits invertida 208. A máscara de bits invertida inclui um valor de bit invertido para cada célula (ou seja, o núcleo). Por conseguinte, os núcleos designados com o número 1 podem ser preferidos para processar dados, enquanto os núcleos designados com o número 0 não podem ser preferidos para processar encadeamentos de aplicação.
Na etapa 210, uma programação de aplicação é determinada, tal como pelo programador do kernel 116. Por exemplo, o dispositivo computacional 102 pode executar um ou mais módulos de programa 110. Alguns dos módulos de programa 110 podem incluir programas encadeados únicos, enquanto outros módulos de programa podem incluir módulos multi-encadeados. Normalmente, o programador do kernel 116 programa cada encadeamento para um núcleo disponível, com base em uma série de fatores, tais como prioridade, disponibilidade de núcleo, afinidade (limitações de programação), além de outros fatores. Quando os encadeamentos superam o número de núcleos disponíveis, neste caso, o programador do kernel 116 alterna encadeamentos ou, de outra forma, programa encadeamentos no sentido de garantir que os encadeamentos eventualmente progridem (ou seja, são executados pelo processador). Os processadores 104 podem alternar encadeamentos em um único núcleo muitas vezes por segundo, proporcionando, assim, oportunidades para o programador do kernel 116 efetivamente programar encadeamentos para núcleos disponíveis.
Embora muitos módulos de programa não atribuam encadeamentos a processadores específicos, alguns módulos de programa complexos podem requerer que um encadeamento seja executado por um processador específico, referido como definição da afinidade do processador de encadeamentos. Máscaras de afinidade de encadeamento de módulos de programa 212 representam os núcleos requeridos para o processamento dos encadeamentos, conforme determinado pelos módulos de programa 110. Por exemplo, um primeiro módulo de programa pode ter uma primeira máscara de afinidade 212(1) que indica que os encadeamentos devem ser programados pelo programador do kernel 116 nos núcleos 0 e 1.
Uma segunda máscara de afinidade 212(2) associada a um segundo módulo de programa pode indicar que os encadeamentos podem ser programados nos núcleos 2 e 3, enquanto outro módulo de programa pode incluir uma máscara de afinidade 212(P) indicando que os encadeamentos podem ser programados em qualquer um dos núcleos disponíveis (todos os núcleos são mostrados conforme selecionados). Deve-se notar que a máscara de afinidade 212(P) é um caso especial no sentido de que a mesma efetivamente não inclui nenhuma limitação para a alocação de encadeamentos nos núcleos.
Em algumas modalidades, as máscaras de afinidade de módulo de programa 212 são combinadas, uma de cada vez, com a máscara de bits invertida 208 usando um operador AND 216 no sentido de determinar o conjunto de processadores elegíveis para um conjunto de processadores disponíveis 218. Na etapa 220, a primeira máscara de afinidade 212(1) é usada para criar um primeiro conjunto de processadores disponíveis 218(1). O processo 200 pode incluir um processo iterative de operações 210, 214 e 220 para cada módulo de programa (ou seja, para cada combinação de máscara de bits invertida 208 e máscara de afinidade 212). Sendo assim, a segunda máscara de afinidade 212(2) é usada para criar um segundo conjunto de processadores disponíveis 218(2) durante uma segunda iteração das operações 210, 214 e 220, e assim por diante.
Conforme acima apresentado, os valores de bits para cada núcleo (por exemplo, o núcleo 0, ..., o núcleo 7) são usados para determinar o conjunto de processadores disponíveis 218 para os encadeamentos de programação. O operador AND 216 retorna um valor de bit de núcleo de 1, no qual ambos os operandos (isto é, os valores de bit combinados para um núcleo) incluem o número 1 representando um encadeamento afinizado a um núcleo específico. Por exemplo, quando a primeira máscara de afinidade 212(1) é combinada com a máscara de bits invertida 208, ambos os núcleos 0 e 1 são núcleos ativos e retornarão um valor de bit de núcleo 1, enquanto os demais núcleos 2 a 7 irão incluir um valor de bit de núcleo 0, conforme ilustrativamente mostrado no primeiro conjunto de processadores disponíveis 218(1).
A segunda máscara de afinidade 212(2) inclui um valor de núcleo 1 no núcleo 3, enquanto a máscara de bits invertida 208 indica que o núcleo 3 está estacionado. O programador do kernel 116 pode optar por substituir a máscara de bits invertida a fim de acomodar a segunda máscara de afinidade 212(2), que é representada no segundo conjunto de processadores disponíveis 218(2), no qual o núcleo 3 inclui um valor de núcleo de 1, portanto, deslocando o trabalho para um núcleo designado como estacionado na máscara de bits invertida 208(o qual pode ser em seguida não estacionado). Em algumas modalidades, o encadeamento pode ser programado usando qualquer número de heurísticas. Um núcleo ótimo na afinidade de encadeamentos pode ser utilizado, ignorando a máscara de bits invertida 208. Quando o núcleo ótimo está estacionado, um sistema fallback de restauração de dados poderá incluir a seleção de um processador no mesmo nó de acesso NUMA (acesso de memória não uniforme) como o núcleo preferido. O programador trata a máscara invertida de estacionamento de núcleo como uma sugestão de locais preferidos para executar o encadeamento, porém o programador irá escolher dentre a limitação rígida (a afinidade rígida) o que ele acredita ser a opção realizável.
Quando todos os núcleos são designados como disponíveis, tal como a máscara de afinidade 212(P), o valor de bit poderá ser ignorado, uma vez que o módulo de programa é indicado no sentido de permitir que os encadeamentos sejam executados por qualquer núcleo. A máscara de afinidade 212(P) pode incluir núcleos programados em qualquer um dentre os núcleos indicados pela máscara de bits invertida 208, tais como os núcleos 0, 1, 2 e 4, conforme representado pelo conjunto de processadores disponíveis 218(P), por meio dos valores de núcleo mostrando 1/0 (ou 1 ou 0, quando pelo menos um núcleo deve ter um valor de núcleo de 1 de modo a permitir a programação do trabalho da máscara de afinidade 212(P)). Em algumas modalidades, o conjunto de processadores disponíveis 218(P) pode selecionar núcleos que não estão estacionados ou ociosos ao determinar uma alocação de trabalho para os núcleos disponíveis. De maneira ideal, o deslocamento de trabalho poderá alocar trabalho aos núcleos 0, 1, 2 e 3, deixando, então, o núcleo 4 sem uso e, possivelmente, estacionado em uma ação subsequente. Outras considerações, tais como apresentadas a seguir, poderão determinar quais núcleos são alocados para trabalho em resposta à máscara de afinidade de 212(P) no sentido de criar uma posição preferida. Por exemplo, uma posição preferida pode se basear em fatores tais como o desempenho de acesso de memória opcional.
As operações 210, 214 e 220 podem ser usadas para programar encadeamentos, conforme descrito acima, com referência à Figura. 2. Além disso, outros trabalhos podem ser realizados no processo 200 por meio das operações 210, 214 e 220, tais como uma chamada de procedimento deferidas (DPC), temporizadores, interrupções de processamento, ou outro trabalho do processador.
De acordo com uma ou mais modalidades, a Figura 2 ilustra um exemplo de uso núcleo 222 para uma fatia de tempo. Por exemplo, uma combinação dos núcleos que estão ativos dentre o conjunto de processadores disponíveis 218 poderá resultar no uso de núcleo 222 durante um determinado intervalo de verificação de tempo, como, por exemplo, sem limitação, 100 milissegundos. O núcleo 4 no uso de núcleo 222 poderá ou não ser indicado como usado, dependendo se o trabalho está programado para o núcleo 4 do conjunto de processadores disponíveis 218(P), conforme acima apresentado. Do ponto de vista do gerenciador de energia do kernel 114, o uso de núcleo 222 irá, de preferência, incluir um valor de núcleo de 0 para o núcleo 4, minimizando, assim, o número de núcleos não estacionados e resultando em uma redução do consumo de energia. Independentemente do uso de núcleo 222, uma nova máscara de estacionamento de núcleo poderá ser criada para a fatia de tempo seguinte, que poderá utilizar as informações do uso de núcleo 222 a fim de determinar a nova máscara de estacionamento de núcleo. Em alguns casos, o núcleo 3 poderá não ser necessário, uma vez que o núcleo 2 poderá ter uma utilização de processamento suficiente para atender a segunda máscara de afinidade 212(2) e, mesmo ainda, ser um núcleo não estacionado.
As Figuras 3A e 3B mostram utilizações de núcleo ilustrativas de acordo com pelo menos uma modalidade da presente invenção. Mais especificamente, a Figura 3B mostra uma revisão ilustrativa das utilizações de núcleo em resposta a uma utilização de núcleo de sistema ilustrativa, conforme mostrado na Figura 3A.
Em conformidade com uma ou mais modalidades, a Figura 3A mostra um sistema 300, incluindo um número de núcleos 302, 304, 306 e 308, embora mais ou menos núcleos possam ser incluídos nas modalidades alternativas do sistema 300. O gerenciador de energia do kernel 114 pode controlar os núcleos usando uma diretiva de energia. A diretiva de energia pode determinar o número de núcleos ativos, e influenciar como o gerenciador de energia do kernel 114 poderá calcular o conjunto de núcleos disponíveis. A diretiva de energia pode ser usada para limitar o número de núcleos disponíveis, ou permitir que o gerenciador de energia do kernel 114 ajuste o número de núcleos disponíveis. O número de núcleos suportados por uma plataforma pode variar entre diferentes sistemas, deste modo, um esquema flexível se torna necessário no sentido de permitir que o número de núcleos seja especificado pelo gerenciador de energia do kernel sem saber de antemão quantos núcleos se encontram disponíveis. Portanto, em algumas modalidades, o número de núcleos a ser utilizado pode ser expresso como um percentual de utilização máxima de núcleo. Por conseguinte, uma implementação dos núcleos pode requerer o arredondamento do percentual para o próximo número disponível que representa o número de núcleos. Por exemplo, o percentual de uso de núcleo pode ser calculado como 60 por cento. Quando o sistema inclui quatro núcleos, o percentual pode ser arredondado para 75 % e três núcleos não serão estacionados enquanto um núcleo estiver estacionado.
Cada núcleo inclui uma utilização de núcleo (utilidade de núcleo) 310 que representa a carga de trabalho daquele núcleo, expresso como o percentual de um tempo de execução de núcleo fora do tempo total, independente do estado de desempenho do núcleo. Por exemplo, o núcleo 0 302 pode ter uma utilidade de núcleo de 80 %, indicando que o núcleo está fazendo 20 % menos trabalho do que a capacidade máxima de carga de trabalho do núcleo 0. Por conseguinte, uma utilidade de núcleo de 100 % representa um núcleo trabalhando a uma capacidade máxima, enquanto um núcleo tendo uma utilidade de núcleo de 0 % representa um núcleo não utilizado. Em algumas modalidades, o gerenciador de energia do kernel 114 pode monitorar a utilidade de núcleo 310.
Além disso, cada núcleo pode incluir um estado de desempenho (estado p de configuração avançada e interface de potência (ACPI)) 312. O estado p 312 é uma freqüência de núcleo e definição de tensão e é controlado pelo gerenciador de energia do kernel 114. O estado p 312 é semelhante a um controle de acelerador de um motor. Um estado p 312 de 100 % representa um estado de desempenho máximo de um núcleo, enquanto um estado p de 50 % representa um núcleo na metade da freqüência máxima com um nível de tensão de núcleo reduzido correspondente. Deve-se notar que o consumo de energia real de um núcleo pode não coincidir ou não ser proporcional ao estado p 312. Por exemplo, a duplicação do estado p 312 de um núcleo poderá não dobrar o consumo de energia do núcleo em função de outros fatores, tais como a fuga de energia do núcleo, o consumo de energia da base do núcleo, e/ou outros fatores. Em algumas modalidades, o gerenciador de energia do kernel 114 pode determinar e/ou controlar o estado p 312, tal como fazendo referência às diretivas de energia.
Cada núcleo inclui um valor de utilização de saída (utilidade de saída) 314, que representa a carga de trabalho do núcleo com relação à capacidade total de carga de trabalho. Por exemplo, a utilidade de saída 314 pode ter uma escala de 0 a 10,000, na qual 0 representa nenhuma utilização e 10.000 representa uma utilização máxima. A utilidade de saída 314 pode ser calculada ao se multiplicar a utilidade de núcleo 310 e o estado p 312. Por exemplo, o núcleo 0 302 inclui uma utilidade de núcleo de 80 % e um estado p de 80 %, portanto, a utilidade de saída é de 6,400. Em algumas modalidades, a utilidade de saída 314 é usada pelo gerenciador de energia do kernel 114 a fim de determinar decisões de estacionamento de núcleo e/ou determinar definições de estado p 312, como, por exemplo, com referência às diretivas de energia.
Em algumas modalidades, o sistema 300 pode incluir um bloco de núcleos 316, tal como um primeiro bloco de núcleos 316(1) e um segundo bloco de núcleos 316(2), no entanto mais ou menos blocos de núcleos podem ser implementados no sistema 300. O bloco de núcleos 316 pode representar uma plataforma tendo múltiplos núcleos com um único circuito, tal como um processador de núcleo duplo ou um processador de múltiplos núcleos. Cada bloco de núcleos 316 pode incluir características únicas de consumo de energia. Por exemplo, um núcleo pode incluir um consumo de energia de nível ativo, uma fuga de núcleo, ou outras dissipações de energia que ocorrem quando um dos núcleos do bloco não está estacionado. Por exemplo, quando ambos os núcleos do primeiro bloco de núcleos 316(1) não estão estacionados e têm uma utilidade de saída de 10,000, o consumo de energia combinado pode ser de 2x watts. Quando o núcleo 0 302 do primeiro bloco de núcleos 316(1) é estacionado em seguida (por exemplo, a utilização de saída é 0) e o núcleo 1 304 permanece inalterado, o consumo de energia combinado poderá ser maior que x watts em função de fatores associados ao bloco de núcleos 316, tais como fuga de energia, consumo de energia ativo, e/ou outros fatores. Quando o núcleo 1 é estacionado em seguida, o consumo de energia resultante poderá ser 0 watts. Deste modo, pode ser vantajoso estacionar núcleos de tal modo que todos os blocos de núcleo sejam estacionados antes que outros núcleos sejam estacionados em seguida, maximizando, assim, a economia de energia.
Conforme mostrado na Figura 3A, uma implementação ilustrativa do sistema 300 inclui o núcleo de 3 308 sendo estacionado enquanto os demais núcleos não são estacionados (ou seja, ativos). Embora o núcleo 3 inclua um estado p de 100 %, isso não poderá indicar que a energia seja fornecida para o núcleo 3. Dito de outra forma, o gerenciador de energia do kernel 114 pode estacionar um núcleo, deixando um estado p a um nível superior a 0 %.
Em um cenário de utilização exemplar, o gerenciador de energia do kernel 114 pode calcular a saída do sistema 300 de modo a determinar uma utilidade total de sistema de 12.600 (ou seja, 6400 + 3200 + 3000 = 12600) de uma utilidade máxima total de sistema de 30.000 (ou seja, 3 núcleos não estacionados x 10.000 = 30.000). Os números de utilização acima referidos se destinam a ser explicativos na natureza dos cálculos que podem ser feitos usando a utilidade total de sistema e, portanto, não são limitantes à presente invenção.
A Figura 3B mostra uma revisão ilustrativa das utilizações de núcleo em um sistema revisado 318 em resposta à utilização total do sistema, como mostrado na Figura 3A. O sistema revisado 318 inclui uma revisão na condição estacionada / não estacionada dos núcleos 302, 304, 306 e 308. Como mencionado acima, com referência ao sistema 300, a utilidade total do sistema foi calculada em 12,600 em um exemplo. Portanto, o gerenciador de energia do kernel 114 pode estacionar um núcleo adicional, sem reduzir a capacidade de o sistema atender às demandas correntes de carga de trabalho, uma vez que a utilidade total de sistema é inferior à capacidade máxima de utilização de dois núcleos (ou seja, 12.600 < 20.000). De acordo com algumas modalidades, o gerenciador de energia do kernel 114 pode selecionar um núcleo para estacionar, talvez com base na diretiva de energia ou em outros fatores, que podem ser completamente transparentes a um usuário do sistema. A transparência ao usuário não inclui qualquer sistema perceptível ao usuário ou impacto de desempenho do aplicativo, com exceção de seu objetivo básico de uma melhor eficiência da energia. Quaisquer alterações necessárias para implementar um estacionamento de núcleo podem ser limitadas aos componentes internos do sistema operacional de nível muito baixo, e, portanto, não poderá haver nenhuma mudança comportamental ou de experiência para os usuários finais associados ao estacionamento de núcleos.
Quando um segundo núcleo é estacionado, a utilidade total máxima do sistema do sistema revisado cairá a 20,000 (2 núcleos x 10,000). O gerenciador de energia do kernel 114 pode estacionar qualquer um dos núcleos que estiver ativo no estado anterior (conforme mostrado na Figura 3A). Conforme acima descrito, pode ser vantajoso estacionar o núcleo 2
306 de modo a estacionar completamente o segundo bloco de núcleos 316(2), resultando em um bloco de núcleos estacionado 320. Por conseguinte, o bloco de núcleos estacionado 320 pode aumentar a economia de energia em comparação com o estacionamento do núcleo 0 302 ou do núcleo 1 304 ao invés do núcleo 2 306.
A fim de acomodar uma mudança transparente a qualquer usuário do sistema 318, a utilidade de saída do núcleo estacionado (núcleo 2) deve ser absorvida ou novamente alocada aos demais núcleos não estacionados (ou seja, o núcleo 0 e o núcleo 1). A partir da Figura 3A, a utilidade de saída do núcleo 2 foi de 3,000. Portando, em um caso, os núcleos não estacionados podem também compartilhar a carga ao fazer com que cada núcleo tenha uma utilidade de saída 322 modificada que assume uma utilidade de saída adicional de 1,500 para cada núcleo. Em alguns casos, outras divisões de uma utilidade total do núcleo estacionado podem ser usadas ao alocar utilidade aos núcleos não estacionados. Por exemplo, um núcleo não estacionado pode ser executado próximo à capacidade (utilidade total próxima a 10,000, que vem a ser a utilidade máxima). Neste caso, os núcleos com uma largura de banda maior poderão absorver mais da utilidade total do núcleo estacionado.
Em uma ou mais modalidades, o gerenciador de energia do kernel 114 pode ajustar a utilidade de núcleo 310 do núcleo 0 302 e do núcleo 1 304 a 79 % e 47 %, respectivamente. Além disso, o gerenciador de energia do kernel 114 pode aumentar o estado p 312 para 100 % para ambos os núcleos não estacionados. Sendo assim, a utilidade total de sistema do sistema revisado 318 permanece igual à utilidade total de sistema do sistema 300 a 12,600.
O sistema revisado 318 ilustra uma revisão possível do status estacionado / não estacionado, da utilidade de núcleo 310, e/ou do estado p 312 no sentido de acomodar uma revisão de núcleo que seja transparente aos usuários, ao mesmo tempo resultando em um consumo de energia reduzido para o sistema revisado 318. No entanto, muitas outras revisões podem ser feitas no sistema 318 que resultam no consumo de energia reduzido e que são transparentes aos usuários. Por exemplo, a utilidade do núcleo 310 do núcleo 1 304 pode ser aumentada para 94 %, enquanto o estado p é reduzido para 50 %, resultando em uma utilidade total de 4700. A estratégia de revisão pode ser determinada pela diretiva de energia que pode levar em conta os interesses conflitantes do gerenciador de energia do kernel 114 e do programador do kernel 116.
Outras considerações podem ser implementadas no âmbito da diretiva de energia que podem afetar o sistema revisado 318. Por exemplo, os encadeamentos que não são sensíveis ao tempo (por exemplo, as linhas de fundo) podem ter menos impacto sobre a decisão de estacionamento de núcleo, ao mesmo tempo mantendo as mudanças transparentes aos usuários. Mais especificamente, ao incluir a distribuição de tempos de execução médios através das prioridades de encadeamento executadas em um determinado núcleo, o gerenciador de energia do kernel 114 pode ajustar a utilização calculada de um núcleo de tal modo que os encadeamentos de baixa prioridade e as cargas de trabalho não cheguem a uma contagem tão alta quanto os encadeamentos de alta prioridade e cargas de trabalho.
A Figura 4 mostra um fluxograma de pelo menos uma modalidade de um processo ilustrativo 400 de avaliação de programação de encadeamento e uso dinâmico de processadores e de determinação de uma configuração revisada para os processadores. O processo 400 pode ser implementado pelo gerenciador de energia do kernel 114, além de outros módulos no sistema operacional 108 e/ou residentes na memória de sistema 106.
Em conformidade com uma ou mais modalidades, o gerenciador de energia do kernel 114 avalia um período de tempo para o monitoramento da utilidade de saída 314 (entre outros fatores, incluindo a utilidade de núcleo 310, o estado p 312, etc.) O período de tempo pode ser selecionado igual a, ou maior que, uma fatia de tempo disponível para o processamento de cada encadeamento. Em uma determinada frequência, o gerenciador de energia do kernel 114 pode dar início ao monitoramento dos núcleos.
Na etapa 404, o gerenciador de energia do kernel 114 pode calcular a utilização total do sistema e a utilização máxima total do sistema. O gerenciador de energia do kernel 114 pode revisar a diretiva de energia na etapa 406 de modo a determinar como ajustar o uso de núcleo para equilibrar as necessidades de economia de energia do gerenciador de energia do kernel 114 e as necessidades de disponibilidade de núcleo (desempenho de processamento) do programador do kernel 116. Na etapa 408, outros fatores podem ser usados no sentido de determinar se é conveniente ajustar o uso do núcleo, e em caso afirmativo, como ajustar o uso de modo a atingir as metas do sistema, tais como uma mudança transparente aos usuários, acomodar requisitos de temperatura e/ou acomodar outras limitações.
Na etapa 410, o gerenciador de energia do kernel 114 pode calcular novas configurações para os núcleos. Por exemplo, o gerenciador de energia do kernel pode calcular uma nova máscara de bits 202, conforme mostrado na Figura 2. Em uma ou mais modalidades, a máscara de bits pode ser ajustada de modo a criar o conjunto de processadores disponíveis 218 na etapa 410. Na etapa 412, o gerenciador de energia do kernel 114 pode implementar as configurações da etapa 410. Em algumas modalidades, o processo 400 pode se repetir de modo a criar uma alocação dinâmica de núcleo, como por meio da repetição a uma frequência predeterminada. De maneira alternativa, o processo 400 pode criar uma alocação estática de núcleo por um dado período de tempo.
Operação Ilustrativa
A Figura 5 mostra um fluxograma de pelo menos uma modalidade de um processo ilustrativo 500 de provisão de uma programação de encadeamento ciente de energia e uso dinâmico de processadores. O processo 500 será construído de maneira similar ao processo 200 da Figura 2 com relação à ordenação e implementação do processo. Por exemplo, a ordem na qual as operações do processo 500 são descritas não é concebida como uma limitação, e qualquer número de blocos descritos pode ser combinado em qualquer ordem e/ou em paralelo a fim de implementar o processo. Para fins de apresentação, o processo 500 é descrito com referência ao sistema 100 da Figura 1.
De acordo com uma ou mais modalidades, a rotina de avaliação periódica TimeCheck pode se iniciar na etapa 502. Por exemplo, uma chamada de procedimento deferida (DPC) pode se iniciar na etapa 502. Em algumas modalidades, uma máquina de estado é entrada em cada núcleo através da chamada DPC que é executada a uma taxa periódica fixa configurada por um parâmetro de diretiva de energia TimeCheck em um valor de tempo, como, por exemplo, 100 min, 50 min, ou outro valor de tempo. Na etapa 504, o gerenciador de energia do kernel 114 pode juntar métricas para os núcleos. Por exemplo, a chamada DPC é enfileirada para cada núcleo correntemente ativo a fim de quebrar métricas para os núcleos ativos. As métricas podem incluir a utilização do núcleo, a distribuição de prioridades de encadeamento, um tempo médio de espera para encadeamentos prontos para cada núcleo, e/ou métricas de sucesso e métricas de falha para residência de estado ocioso, entre outras métricas possíveis.
Na etapa 506, o gerenciador de energia do kernel 114 pode calcular a máscara de bits, tal como a máscara de estacionamento de núcleo 204. Por exemplo, um valor novo pode ser calculado para o número alvo de núcleos ativos com base nos limites de utilização, na diretiva de energia, e/ou em quaisquer relacionamentos de dependência. Na etapa 508, um conjunto ativo pode ser atualizado, como, por exemplo, ao implementar porções do processo 200 governadas pelo gerenciador de energia do kernel 114 para criar o conjunto de processadores disponíveis 218.
Na etapa 510, o conjunto ativo pode ser implementado pelo sistema operacional 108. O gerenciador de energia do kernel 114 pode determinar se núcleos foram adicionados (não estacionados) na etapa 512. Quando núcleos não são estacionados, o programador do kernel 116 pode ser notificado na etapa 514 e pode começar usando os núcleos não estacionados para programar encadeamentos. Estes núcleos não estacionados podem ainda ser o destino de uma programação de encadeamento remota (ou seja, a partir de um processador diferente), ou podem ser escolhidos proativamente a fim de selecionar encadeamentos a partir de outros processadores. Em algumas modalidades, os encadeamentos podem ser reatribuídos para serem executados nos núcleos não estacionados, desta forma reduzindo a carga de trabalho de outros núcleos não estacionados.
Na etapa 516, a utilização de saída de núcleo esperada pode ser calculada pelo gerenciador de energia do kernel 114 e pode incluir núcleos não estacionados a partir da etapa 506. Sendo assim, um novo valor para o número de núcleos ativos determinados na etapa 506 é usado para calcular a utilização de processador esperada. Na etapa 518, o gerencia dor de energia do kernel 114 pode calcular um valor novo para o estado p. Em algumas modalidades, a chamada DPC é programada em cada núcleo a fim de atualizar o seu estado p alvo. Em um exemplo, quando a utilização esperada aumenta, o valor do estado p pode também aumentar caso nenhum núcleo não esteja estacionado na etapa 512. No entanto, quando núcleos não são estacionados na etapa 512, o estado p pode aumentar ou diminuir no sentido de equilibrar as necessidades de economia de energia do gerenciador de energia do kernel 114 com as necessidades de processamento do programador do kernel 116.
Na etapa 520, o gerenciador de energia do kernel 114 determina se os valores correntes do estado p e/ou do estado t (estado de aceleração linear) devem ser revisados com base nos resultados do cálculo na etapa 518. Quando o estado p e/ou o estado t são modificados na etapa 520, o gerenciador de energia do kernel 114 poderá enfileirar as chamadas DPC de transição aos núcleos afetados na etapa 522. Deste modo, os encadeamentos programados pelo programador do kernel 116 podem ser programados para os núcleos executados no novo estado p e/ou estado t conforme implementados na etapa 520.
Na etapa 524, o gerenciador de energia do kernel 114 determina se núcleos foram estacionados na etapa 506. Por exemplo, a utilização de saída de núcleo esperada da etapa 516 pode ser menor que a utilização corrente. Quando núcleos são estacionados na etapa 524, o gerenciador de energia do kernel 114 pode notificar o programador do kernel 116 na etapa 526 no sentido de terminar a programação de encadeamentos para os núcleos recém estacionados. Para qualquer núcleo adicionado ou removido à máscara de núcleo ativa, uma chamada DPC é programada para aquele núcleo. Conforme descrito com referência às Figuras 3A e 3B, o trabalho de um núcleo estacionado pode ser realocado para um ou mais núcleos não estacionados. Em algumas modalidades, os núcleos recém estacionados podem ser colocados no estado c mais fundo que se encontrar disponível. Finalmente, na etapa 528 o processo 500 pode ser repetido.
A Figura 6 mostra outro fluxograma de pelo menos uma modalidade de um processo ilustrativo 600 de provisão de uma programação de encadeamento ciente de energia e uso dinâmico de processadores, incluindo ainda uma contagem de domínio ocioso. O processo 600 inclui a maior parte dos sub-processos descritos na Figura 5, e, deste modo, estes sub-processos da Figura 5 não serão novamente descritos.
Na etapa 602, o gerenciador de energia do kernel 114 pode determine se a contagem de domínio ocioso está habilitada. Quando a contagem de domínio ocioso é habilitada, um domínio mestre quebra a métrica para o domínio (por exemplo, o bloco de núcleos 316 ou todos os núcleos) na etapa 604.
Em algumas modalidades, a contagem de domínio ocioso pode iniciar outra decisão na etapa 606. Quando a contagem de domínio ocioso é habilitada, o gerenciador de energia do kernel 114 poderá calcular o estado p do domínio destino na etapa 608. Finalmente, na etapa 610, o processo 600 pode se repetir.
A Figura 7 mostra um fluxograma de pelo menos uma modalidade de um processo 700 de provisão de definições adicionais de diretiva de energia e outras entradas para a programação de encadeamento ciente de energia e uso dinâmico de processadores. Em algumas modalidades, o estacionamento de núcleo pode ser implementado como um aperfeiçoamento à máquina de estado existente que calcula o estado alvo a ser usado para os estados de desempenho de um processador. O número correto de núcleos a ser usado a qualquer momento dado será determinado com base em diversos fatores conforme descritos a seguir com referência ao processo 700.
De acordo com uma ou mais modalidades, a diretiva de energia corrente pode ser usada para definir o número de núcleos a ser utilizado na etapa 702. Na etapa 704, o número mínimo e máximo de núcleos pode ser definido. O gerenciador de energia do kernel 114 pode calcular o número de núcleos ativos requeridos para completar uma dada carga de trabalho com pouco gasto de energia. Em algumas instâncias, a execução do número mínimo de núcleos pode ser benéfica à economia de energia e beneficiar o gerenciador de energia do kernel 114. Em contrapartida, a execução do número máximo de núcleos pode prover o mais alto nível de desempenho, beneficiando, assim, o programador do kernel 116.
Na etapa 706, outros parâmetros de diretiva de energia para o estacionamento de núcleo podem ser implementados pelo gerenciador de energia do kernel 114, usando um ou mais dentre os sub-processos 706(1), ..., 706(4). Na etapa 706(1), o intervalo de tempo requerido para o estacionamento e/ou não estacionamento de núcleos poderá ser ajustado. Por exemplo, a frequência de estacionamento e/ou não estacionamento de núcleos poderá ser manipulada por meio da mudança de um intervalo. Em algumas modalidades, núcleos podem ser estacionados em um primeiro intervalo e não estacionados em um segundo intervalo. Por exemplo, uma diretiva que favorece a economia de energia pode estacionar núcleos de uma forma tão frequente quanto a cada 100 min, mas só poderá não estacionar núcleos a cada 500 min.
Na etapa 706(2), o gerenciador de energia do kernel 114 pode implementar uma diretiva de aumento e/ou de diminuição. Por exemplo, uma primeira opção de diretiva só poderá estacionar um número definido de núcleos por vez, por exemplo, um núcleo por vez. Uma segunda opção de diretiva poderá estacionar ou não estacionar núcleos de modo a obter uma utilização de núcleo ideal, deste modo o estacionamento e/ou não estacionamento de múltiplos núcleos por vez. Uma terceira diretiva poderá ir de um extremo ao outro (ou estacionar tanto quanto possível ou não estacionar tanto quanto possível).
Na etapa 706(3), o limite de utilização requerido pode ser aumentado ou diminuído com base na ocupação dos processadores. Por exemplo, um processador poderá não se submeter a uma alteração em um status de estacionado ou não estacionado até que o pro cessador (ou outros processadores) inclua um estado de atividade para um dado período de tempo. Isto poderá reduzir o salto de um processador entre um estado estacionado e não estacionado em uma rápida sucessão.
Finalmente, na etapa 706(4), a diretiva para o ajuste de núcleos não estacionados poderá ser implementada. Por exemplo, o gerenciador de energia do kernel 114 pode calcular o estado alvo ideal de desempenho de processador com base no número de núcleos de processador no conjunto correntemente ativo. A fim de prover as melhores trocas entre economia de energia, desempenho, e agilidade de resposta às cargas de trabalho específicas, o gerenciador de energia do kernel 114 poderá, com vantagem, executar um número menor de processadores em um estado superior de desempenho, ou em contrapartida, executar um número maior de núcleos em um estado de desempenho inferior.
Na etapa 708, uma heurística de núcleo e ou sistema poderá ser implementada pelo gerenciador de energia do kernel 114, utilizando um ou mais dentre os sub-processos 708(1) e 708(2). Na etapa 708(1), o gerenciador de energia do kernel 114 pode calcular o número de núcleos ativos requeridos e o estado de desempenho ótimo dos núcleos em uso ativo com base no uso bem sucedido de estados profundos de energia ociosa do processador (estados de suspensão). Isto poderá permitir ao gerenciador de energia do kernel detectar quando os estados mais profundos de ociosidade não estão sendo eficientemente usados através do conjunto de núcleos ativos (não estacionados). A fim de economizar energia e ainda prover desempenho, pode ser benéfico colocar mais núcleos no estado estacionado, e aumentar o estado de desempenho dos demais núcleos ativos a fim de garantir que o trabalho é executado com eficiência.
Na etapa 708(2), um tempo médio de espera pode ser usado para os encadeamentos prontos para serem alocados (atribuídos) para um núcleo. Por exemplo, o gerenciador de energia do kernel 114 pode calcular o número de núcleos de processador requerido mediante o uso da distribuição de tempos médios de espera para os encadeamentos no estado pronto, o que permite ao gerenciador de energia do kernel ajustar o número de núcleos em uso a fim de reduzir a latência antes de os encadeamentos no estado pronto poderem ser executados, aumentando, assim, o desempenho e a agilidade de resposta. Em um exemplo, quando um grande número de encadeamentos precisa ser executado, pode ser vantajoso não estacionar núcleos e ao mesmo tempo reduzir o estado p dos núcleos, uma vez que cada núcleo só poderá processar um encadeamento por vez. Sendo assim, uma disponibilidade maior de núcleo possibilitará o processamento de um grande número de encadeamentos em algumas instâncias.
Na etapa 710, as dependências de estado ocioso podem ser usadas pelo gerenciador de energia do kernel 114 a fim de ajustar uma implementação de estacionamento de núcleo. Quando o gerenciador de energia do kernel 114 seleciona quais núcleos específicos devem ser estacionados ou não estacionados, o mesmo primeiramente irá examinar os relacionamentos de dependência de estado ocioso dos núcleos a fim de determinar quais núcleos devem compartilhar recursos de energia ou de relógio, e escolher entre estacionar ou não estacionar núcleos de uma maneira mais eficiente em termos de energia com base nos controles compartilhados.
Na etapa 712, os relacionamentos de estado desempenho e aceleração podem ser considerados ao determinar entre estacionar ou não estacionar um ou mais núcleos. Os núcleos que compartilham um estado de desempenho ou controles de aceleração podem ser estacionados ou não estacionados juntos de modo a produzir maiores eficiências de energia.
Na etapa 714, relacionamentos de pacote de núcleos (bloco) podem ser considerados, tais como as dependências descritas nas Figuras 3A e 3B com relação às eficiências de um bloco de núcleos, e mais especificamente ao estacionamento de um bloco de núcleos antes de estacionar um outro núcleo em um novo bloco de núcleos. Finalmente, na etapa 716, uma localidade de memória poderá ser usada pelo gerenciador de energia do kernel 114 ao implementar considerações de estacionamento de núcleos. Por exemplo, dois ou mais núcleos podem ter relacionamentos de pacote, tais como os núcleos que compartilham um pacote físico de processador tendo um banco de memória compartilhado (por exemplo, um nó de acesso NUMA (acesso de memória não uniforme)). O banco de memória compartilhado pode permitir aos núcleos ter um tempo de acesso de memória reduzido em comparação como os núcleos que não compartilham o banco de memória compartilhado.
Conclusão
Os sistemas, técnicas e aparelhos acima descritos dizem respeito à provisão de uma programação de encadeamento ciente de energia e ao uso dinâmico de processadores. Embora as técnicas, sistemas e aparelhos tenham sido descritos em uma linguagem específica a aspectos estruturais e/ou etapas de método, deve-se entender que as reivindicações em apenso não necessariamente se limitam aos aspectos específicos ou etapas descritas. Ao contrário, os aspectos específicos e etapas são apresentados como formas exemplares de implementação de tais técnicas e aparelhos.