BR112014022764B1 - Método de atribuição de memória e sistema para controle de atribuição de memória para memória que é acessível em um ambiente de sistema operacional de um processador multicore - Google Patents
Método de atribuição de memória e sistema para controle de atribuição de memória para memória que é acessível em um ambiente de sistema operacional de um processador multicore Download PDFInfo
- Publication number
- BR112014022764B1 BR112014022764B1 BR112014022764-0A BR112014022764A BR112014022764B1 BR 112014022764 B1 BR112014022764 B1 BR 112014022764B1 BR 112014022764 A BR112014022764 A BR 112014022764A BR 112014022764 B1 BR112014022764 B1 BR 112014022764B1
- Authority
- BR
- Brazil
- Prior art keywords
- memory
- list
- structures
- blocking
- partitioned
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 230000000903 blocking effect Effects 0.000 claims abstract description 53
- 230000003044 adaptive effect Effects 0.000 claims description 20
- 239000000872 buffer Substances 0.000 claims description 9
- 238000000638 solvent extraction Methods 0.000 claims description 7
- 238000005192 partition Methods 0.000 claims description 3
- 238000007726 management method Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 206010070834 Sensitisation Diseases 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000008313 sensitization Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
- Multi Processors (AREA)
- Memory System (AREA)
Abstract
método e sistema para gerenciar a atribuição de uma pluralidade de elementos de memória e meio de armazenamento legível por computador. a invenção refere-se a sistemas e técnicas de gerenciamento da atribuição de uma pluralidade de elementos de memória armazenados dentro de uma pluralidade de estruturas de lista sem bloqueio que são apresentados. estas estruturas de lista sem bloqueio (tal como slists) podem ser acessíveis dentro de um ambiente de sistema operacional de um processador multicore - e podem ser particionadas dentro do sistema. os elementos de memória também podem ser particionados entre estas estruturas de lista sem bloqueio. quando um processador core (ou outro elemento de processamento) faz uma solicitação para a atribuição de um elemento de memória para si mesmo, o sistema e/ou método pode pesquisar entre as estruturas de lista sem bloqueio para um elemento de memória disponível. quando um elemento de memória adequado e/ou disponível for encontrado, o sistema pode alocar o elemento de memória disponível para solicitar o processador core. dinamicamente, o equilíbrio dos elementos de memória pode ocorrer de acordo com uma métrica de equilíbrio adequado, tal como manter a igualdade numérica substancial dos elementos de memória ou evitar o excesso de atribuição de recursos.
Description
[0001] A presente invenção refere-se a Slists que são estruturas de dados que são implementações sem bloqueio de uma lista LIFO (Last In first out) disponibilizada em sistemas operacionais. Slists são tipicamente escolhas desejadas de estrutura de dados para armazenar buffers de tamanho fixo que podem ser atribuídos e liberados sem a realização de qualquer bloqueio de giro ou outros primitivos de sincronização. Slists também podem ser usados para os conteúdos variáveis de tamanho sob a forma de uma lista isoladamente vinculada sem bloqueio. Outros recursos são providos em um ambiente de sistema operacional - tais como listas lookaside que são construídas em Slists.
[0002] No entanto, em algumas situações, a utilização de Slists pode não ser desejável. Por um exemplo, um único cabeçalho SLIST pode tornar-se um ponto de acesso de contenção de linha de cache em servidores com muitos processadores acessando ao mesmo Slist. Isso pode ser um gargalo de escalabilidade, em ambos os cenários virtualizados nativos e Hiper-V.
[0003] Em outro cenário, Slists são utilizados principalmente como caches de pacotes ou repositórios de buffer de tamanho fixo. No entanto, existem situações em que estruturas de dados mais complexas ou recursos de tamanhos variados, possivelmente, têm de ser mantidos em uma lista sem bloqueio desse tipo. Pode ser desejável ter mais operações do que apenas “de impulso” e “de disparo” para fins tais como equilíbrio de carga, roubo de pacote, consciência NUMA e os demais requisitos de algoritmos. Estes são muitas vezes satisfeitos por outra abstração de estrutura de dados para gerenciar múltiplos Slists. Listas lookaside são um exemplo disso.
[0004] As listas lookaside mantêm um cache de buffers de tamanho fixo para atribuição de memória rápida e solta. Para os benefícios de afinidade do processador, alguns sistemas operacionais também oferecem listas Lookaside por processador. Estas listas Lookaside por processador indivíduo são geralmente (mas não necessariamente) apoiadas por uma lista global para conter pacotes de backup no caso da lista por processador estar vazia. Pode ser desejável ter atribuições de recursos extras para ter uma lista de backup global bastante grande para fornecer uma abstração de um único pool de recursos. Quando a demanda recua, essas atribuições de memória extra podem ser liberadas se houver demanda para a memória. No entanto, em determinados cenários os recursos não podem ser sobre atribuídos. Isto é particularmente verdadeiro para os drivers de hardware que definem limites de sua capacidade - como o número máximo de solicitações I / O que um controlador RAID pode processar. Algoritmos de avanço amarram esses limites a profundidades de Slists e evitam o uso de bloqueio de giro. Também sobrecarga extra de atribuições e livres causam fragmentação da memória e custa ciclos de CPU. Listas Lookaside que atribuem mais do que a quantidade necessária não podem ser utilizadas por estas razões.
[0005] O quadro a seguir apresenta um sumário simplificado da inovação a fim de prover uma compreensão básica de alguns aspectos aqui descritos. Este sumário não é uma visão ampla do assunto reivindicado. Pretende-se nem identificar os elementos chave ou críticos da matéria reivindicada nem delinear o alcance de inovação do assunto. O seu único objetivo é apresentar alguns conceitos da matéria reivindicada de forma simplificada como um prelúdio para a descrição mais detalhada que se apresenta mais tarde.
[0006] Em uma modalidade, sistemas e métodos para gerenciar a atribuição de uma pluralidade de elementos de memória armazenados dentro de uma pluralidade de estruturas de lista sem bloqueio são apresentados. Estas estruturas de lista sem bloqueio (como Slists) podem ser facultadas dentro de um ambiente de sistema operacional de um processador multicore. Em algumas modalidades, as estruturas de lista sem bloqueio, Slists ou similares podem ser incorporadas em outras estruturas de dados comuns, como hashes, árvores, etc., para atender as diferentes necessidades de atribuição de recursos e de gerenciamento.
[0007] Algumas configurações podem particionar essa pluralidade de estruturas de lista sem bloqueio e inicialmente particionar os elementos de memória entre estas estruturas de lista sem bloqueio. Quando um processador core (ou outro elemento de processamento) faz uma solicitação para a atribuição de um elemento de memória para si mesmo, o sistema e/ou método pode pesquisar entre as estruturas de lista sem bloqueio para um elemento de memória disponível. Quando um elemento de memória adequado e/ou disponível for encontrado, o sistema pode alocar o elemento de memória disponível para solicitar o processador core.
[0008] Em algumas modalidades, o sistema e/ou método pode então equilibrar dinamicamente o conjunto de elementos de memória entre as diversas estruturas de lista sem bloqueio de acordo com uma métrica de equilíbrio adequada. Tal possível métrica pode ser para simplesmente manter a igualdade numérica substancial de elementos de memória entre as estruturas de lista sem bloqueio. Outras métricas podem incluir outras considerações de equilíbrio de carga - possivelmente com base no tipo de execução de processo, possíveis situações de contenção ou similar - por exemplo, tal como mencionado acima, como para reduzir a contenção de CPU ou evitar o excesso de atribuição de recursos de memória.
[0009] Outras características e aspectos do presente sistema são apresentados a seguir na descrição detalhada, quando lida em ligação com os desenhos apresentados neste pedido.
[0010] As modalidades exemplares são ilustradas nas figuras referenciadas dos desenhos. Pretende-se que as modalidades e figuras aqui descritas sejam para serem consideradas ilustrativas e não limitativas.
[0011] A figura 1 ilustra um sistema de computador exemplar no qual os sistemas e técnicas do presente pedido de patente podem ser alojados e operacionais.
[0012] A figura 2A é uma modalidade de um sistema de estrutura de hash adaptativa e método para o gerenciamento de Slists.
[0013] A figura 2B é uma modalidade de um sistema de lista de troca dinâmica e método para o gerenciamento de Slists.
[0014] A figura 3 mostra um diagrama de fluxo de uma modalidade de um sistema hash adaptativo, como pode ser implementado na figura 2A.
[0015] Como utilizado aqui, os termos "componente", "sistema", "Interface" e similares pretendem se referir a uma entidade relacionada ao computador, seja de hardware, de software (por exemplo, em execução), e/ou firmware. Por exemplo, um componente pode ser um processo rodando em um processador, um processador, um objeto, um executável, um programa, e/ou um computador. A título de ilustração, tanto um aplicativo que corre em um servidor e o servidor podem ser um componente. Um ou mais componentes podem residir dentro de um processo e um componente pode estar localizado em um computador e/ou distribuído entre dois ou mais computadores.
[0016] A matéria reivindicada é descrita com referência aos desenhos, em que números de referência semelhantes são usados para referir-se a elementos semelhantes como um todo. Na descrição que se segue, para fins de explicação, numerosos detalhes específicos são estabelecidos para prover uma compreensão profunda da inovação do assunto. Pode ser evidente, contudo, que a matéria reivindicada pode ser praticada sem estes detalhes específicos. Em outros casos, estruturas e dispositivos bem conhecidos são mostrados em forma de diagrama em bloco, a fim de facilitar a descrição de inovação do assunto.
[0017] A fim de atender o gargalo potencial de recursos, o presente pedido descreve uma série de modalidades que permitem a utilização eficaz e eficiente dos Slists. Em uma modalidade, Slists podem ser particionados de forma eficaz, que aborde muitas limitações acima referidas, mantendo a natureza sem bloqueio de Slists de recursos, reduzindo a contenção de linha de cache, atribuição de quantidade fixa e compartilhamento/ roubo de recursos entre as listas. Em outras modalidades, estas técnicas podem utilizar a afinidade do processador e sensibilização NUMA para um desempenho ideal.
[0018] A figura 1 mostra um diagrama do sistema de computador que mostra um grupo múltiplo, nó NUMA (ou seja, o soquete do processador), sistema multicore 100. O sistema 100, como mostrado, é composto por 2 grupos - por exemplo, Grupo 0 (102a) e Grupo 1 (102b). Em uma modalidade, cada grupo pode compreender até 64 (por exemplo, marcado com 0 a 63) Processadores lógicos (LPS).
[0019] Será apreciado que um sistema apropriado pode ter um grupo, se houver menos do que 64 processadores lógicos. Da mesma forma, um sistema pode ter mais do que dois grupos. Nós NUMA estão totalmente contidos em um grupo, de modo que pode ser possível que um grupo possa ter menos de 64 processadores lógicos. Um sistema pode ter diversos (mais do que 2 grupos), dependendo do número de processadores lógicos contidos no sistema.
[0020] Conforme é mostrado, cada grupo pode compreender ainda os nós 104 (isto é, bases de processador). Nós no diagrama também podem se referir ao nó NUMA (Memória de Acesso Não Uniforme). Em muitos sistemas atuais, nós NUMA são numerados de 0 a 63 em todo o sistema que abrange todos os grupos; no entanto, os sistemas futuros podem ter um número diferente de nós e o presente pedido de patente não está limitado a tais especificações atuais. Cada tal nó pode ainda compreender núcleos 106. Nesta modalidade, cada LP pode ser um núcleo ou um fio de hardware. Processadores lógicos são numerados exclusivamente de 0 a 63 dentro de cada grupo.
[0021] Em algum ambiente de computação, sistemas com mais de um processador físico - ou sistemas com processadores físicos que têm múltiplos núcleos - podem fornecer o sistema operacional com vários processadores lógicos. Um processador lógico é um mecanismo de computação lógica do ponto de vista do sistema, aplicativo ou driver de funcionamento. Um "núcleo"(ou "core") é uma unidade de processamento, que pode consistir em um ou mais processadores lógicos. Um processador físico pode consistir em um ou mais núcleos. Um processador físico pode ser interpretado da mesma forma como um pacote de processador, um soquete elétrico ou um CPU.
[0022] Além disso, Núcleos 0 a C-1 podem compartilhar um recurso de memória 108. O tempo de acesso à memória local entre os núcleos e à memória em um determinado nó pode ser mais rápido do que o tempo de acesso da memória a outros nós. Conexões 110 entre os nós podem ser tal que todos os nós podem acessar à memória de todos os outros nós, mas o tempo de acesso à memória pode ser mais lento do que o acesso à memória local.
[0023] Deve-se observar que todos os nós podem não ser, necessariamente, totalmente conectados e, ainda, que o acesso à memória de um nó para outro pode precisar atravessar um nó adicional para acessar à memória em um terceiro nó. Gerenciamento slist
[0024] O presente pedido descreve muitas modalidades para o gerenciamento eficaz de estruturas de lista sem bloqueio, Slists ou similares. As figuras 2A e 2B mostram duas dessas modalidades - uma função hash adaptativa (figura 2A). E uma estrutura dinâmica de disparo e de impulso (figura 2B) para gerenciamento Slist. Nestas modalidades, pode ser desejável fornecer recursos ou gerenciamento de pacotes em listas sem bloqueio (como Slists), a fim de: i) reduzir a contenção da linha de cache da CPU; ii) evitar o excesso de atribuição de recursos; iii) prover a partilha e roubo de recursos entre as listas para se adaptar às demandas de recursos com um limite máximo; iv) prover lógica adicional para a consciência da topologia NUMA, a afinidade do processador etc.; e/ou v) prover requisitos específicos de atribuição de memória como alocadores, por exemplo, dentro de certos limites de 4GB e quaisquer outras restrições. Nenhuma atribuição adicional e liberação de memória podem ser desejadas, o que pode resultar em fragmentação, que pode ser um problema - por exemplo, especialmente com limites de 4GB.
[0025] Em geral, as técnicas e modalidades deste presente pedido tendem a incorporar as estruturas de lista sem bloqueio, Slists ou similares em outras estruturas de dados comuns, como hashes, árvores, etc., para atender às diferentes necessidades de atribuição de recursos e de gerenciamento.
[0026] Em muitas das suas modalidades presentes, sistemas e métodos para gerenciar a atribuição de uma pluralidade de elementos de memória armazenados dentro de uma pluralidade de estruturas de lista sem bloqueio são apresentados. Estas estruturas de listas sem bloqueio (tais como Slists) podem ser facultadas dentro de um ambiente de sistema operacional de um processador multicore.
[0027] Estas modalidades podem dividir essa pluralidade de estruturas de lista sem bloqueio e inicialmente dividir os elementos de memória entre estas estruturas de lista sem bloqueio. Quando um processador core (ou outro elemento de processamento) faz uma solicitação para a atribuição de um elemento de memória para si mesmo, o sistema e/ou método pode pesquisar entre as estruturas de lista sem bloqueio para um elemento de memória disponível. Quando um elemento de memória adequado e/ou disponível for encontrado, o sistema pode atribuir o elemento de memória disponível para solicitar o processador core. Tal divisão de estruturas de lista sem bloqueio pode tender a reduzir a contenção de CPU.
[0028] O sistema e/ou método pode então equilibrar dinamicamente o conjunto de elementos de memória entre as diversas estruturas de lista sem bloqueio de acordo com uma métrica de equilíbrio adequado. Tal possível métrica pode ser simplesmente manter a igualdade numérica substancial de elementos de memória entre as estruturas de lista sem bloqueio. Outras métricas podem incluir outras considerações de equilíbrio de carga - possivelmente com base no tipo de processo em execução, possíveis situações de contenção ou similar - por exemplo, tal como mencionado acima como evitar o excesso de atribuição de recursos de memória.
[0029] Em outra modalidade, um módulo de atribuição adequada pode ser implementado dentro do sistema do computador (tal como o mostrado na figura 1 - ou em qualquer outro sistema de processamento multicore adequado). Por apenas um exemplo, um módulo de atribuição pode estar em execução em um dos processadores core e implementar a atribuição de memória dinâmica de lá. Como será discutido em maiores detalhes abaixo, o módulo de atribuição pode gerir a dinâmica de particionamento de elementos de memória em uma variedade de estruturas de dados - por exemplo, estruturas de hash dinâmicas ou estruturas de troca de lista dinâmica ou semelhantes. Endereçamento calculado adaptativo para gerenciamento de Slist
[0030] A figura 2A mostra um sistema e técnica hash dinâmico e adaptativo (200) para o gerenciamento de Slists. Como se mostra, o módulo hash 202 é ligado a um ou mais Slists 204 (por exemplo, Slist 0 a Slist 3). Cada Slist pode ainda compreende zero ou mais elementos de memória 206. Cada um destes elementos de memória 206 pode ser de quaisquer buffers de tamanho fixo ou buffers de tamanho variável e/ou estruturas de dados.
[0031] Nesta modalidade, este hash de diferentes Slists pode ser mantido através da introdução de uma forma que está associada com o sistema de uma forma geral, que se relaciona com a topologia do sistema de computação e/ou a arquitetura do processador multicore. Por exemplo, a figura 2A mostra duas dessas topologias: (1) codificar pelo índice do processador (como mostrado pelas linhas de setas sólidas para o Grupo 0 rotulado 208a); (2) ou codificar pelo número de nó NUMA (como mostrado por linhas de setas tracejadas para o Grupo 0 rotulado 208b, que compreende ainda os nós 210 e LPs 212). Nestas modalidades, o ponto de relacionamento do índice para a topologia do sistema pode ser para otimizar o tempo de acesso para minimizar a latência e contenção com outros processadores no sistema. Como pode ser visto, os elementos de memória podem ser ajustados e/ou equilibrados entre Slists (por exemplo, 214), de acordo com as métricas adequadas para equilíbrio de carga e/ou atribuições de recursos de memória.
[0032] Em uma modalidade, é possível atribuir um único SLIST lógico em múltiplos. Em tal caso, pode ser possível mover as entidades da lista entre listas diferentes, de modo que a atribuição não falhe se um determinado Slist estiver vazio. Todos os Slists em hash podem ser revistados antes de a atribuição falhar. Deve-se observar que diferentes algoritmos de hash podem também atender a objetivos de topologia e de otimização do sistema, tais como extensões de afinidade NUMA ou do processador destas listas.
[0033] A figura 3 retrata um fluxograma possível para o tratamento de SLIST dentro de uma estrutura de hash. Na etapa 300, o sistema começa a alocar recursos de memória e, em 302, o sistema pode calcular um índice de hash com base em um código desejado (por exemplo, o número de CPU ou ID NUMA, tal como indicado na figura 2A). O Slist pode então ser atribuído ao hash (índice), calculado.
[0034] O sistema pode consultar, em 306, se o Slist, em particular, está vazio ou desprovido de elementos de memória - e, se assim for, o sistema pode percorrer os outros Slists para encontrar uma fonte adequada. Uma vez encontrado, o recurso pode ser atribuído de, digamos, o próximo Slist não vazio.
[0035] No caso em que o SLIST não estiver vazio, o recurso pode ser atribuído em 310. Se daí uma atribuição foi feita na etapa 310, ou na etapa 312, o sistema pode consultar se a atribuição foi bem sucedida em 314. Se não, o sistema pode, nesse momento, retornar uma mensagem de erro em 320 e processamento final em 322.
[0036] No entanto, se a atribuição foi bem sucedida, o recurso de memória pode ser utilizado como atribuído em 316. Uma vez que o recurso de memória não é mais necessário, o sistema pode, opcionalmente, liberar o recurso de volta para o Slist original ou doador e terminar o processo em 322.
[0037] A figura 2B mostra ainda outra modalidade do uso de estruturas dinâmicas da troca de lista de dados (250) para o gerenciamento eficaz dos Slists. Como pode ser visto, dois Slists separados - por exemplo, um para operações de impulso (liberar) 252a e outro de disparo (adquirir / atribuir) 252b - pode ser mantido e cada um pode ter elementos de memória 254 para atribuir. Dois ponteiros diferentes (256a e 256b) podem ser utilizados para acessar esses Slists. No decurso da operação, se o Slist de disparo estiver vazio (ou alguma outra métrica adequada para equilibrar os recursos de memória) durante uma tentativa de atribuição, é possível trocar os ponteiros para que o Slist de impulso anterior agora se torna o Slist de disparo e vice-versa. A partir desse ponto, é agora possível tentar atribuir a partir deste novo Slist de disparo. Esta técnica é análoga à manutenção de diferentes listas de "atribuição"e "livres" e trocá-las quando a lista de “atribuição” estiver vazia.
[0038] O que foi descrito acima inclui exemplos de inovação do objeto. Obviamente, não é possível descrever cada combinação possível de componentes ou metodologias para fins de descrição da matéria reivindicada, mas um versado na técnica pode reconhecer que muitos outros tipos de combinações e permutações da inovação do assunto são possíveis. Por conseguinte, a matéria reivindicada tem a intenção de abranger todas essas alterações, modificações e variações que se enquadrem no espírito e âmbito das reivindicações anexas.
[0039] Em particular, e no que diz respeito às várias funções desempenhadas pelos componentes, dispositivos, sistemas, circuitos e outros semelhantes acima descritos, os termos (incluindo a referência a um "meio") usados para descrever tais componentes destinam-se a corresponder, a menos que indicado de outra forma, qualquer componente que desempenha a função especificada do componente descrito (por exemplo, um equivalente funcional), embora não estruturalmente equivalente à estrutura descrita, a qual realiza a função nos aspectos exemplares aqui ilustrados da matéria reivindicada. A este respeito, também é reconhecido que a inovação inclui um sistema, bem como um meio legível por computador possuindo instruções executáveis por computador para a execução dos atos e/ou eventos dos vários métodos da matéria reivindicada.
[0040] Além disso, enquanto uma característica particular da inovação do objeto pode ter sido descrita em relação a apenas uma das várias implementações, tal característica pode ser combinada com uma ou mais outras características das outras implementações como pode ser desejado e vantajoso para qualquer aplicação determinada ou especial. Além disso, à medida que os termos "inclui" e "incluindo" e suas variantes são utilizados tanto na descrição detalhada e nas reivindicações, estes termos destinam-se a ser inclusivos de maneira semelhante ao termo "compreendendo".
Claims (20)
1. Método de atribuição de memória para memória que é acessível em um ambiente de sistema operacional de um processador multicore caracterizado pelo fato de que o método inclui o controle da atribuição da memória para porções de solicitação de memória do processador multicore por meio das etapas: obter uma pluralidade de estruturas de listas sem bloqueio particionadas, sendo que cada uma das estruturas de listas sem bloqueio particionadas inclui uma respectiva pluralidade de elementos de lista, cada um dos respectivos elementos de lista correspondendo a uma respectiva porção da memória que é atualmente elegível para atribuição, sendo que a pluralidade de estruturas de listas sem bloqueio particionadas é particionada pela aplicação de um hash adaptável a cada um dentre uma pluralidade de valores-chave que correspondem a elementos de uma topologia de uma arquitetura do processador multicore; após uma solicitação de atribuição de uma ou mais das respectivas porções da memória a um processador core para uso como memória atribuída, pesquisar a pluralidade de estruturas de listas sem bloqueio particionadas para encontrar um elemento de lista disponível que corresponde a uma respectiva porção da memória disponível que é atualmente elegível para atribuição para uso como memória atribuída, a pesquisa realizada com o uso de um hash adaptável que é codificado para respectivamente calcular o hash de cada uma dentre a pluralidade de estruturas de listas sem bloqueio particionadas; após encontrar o elemento de lista disponível, atribuir a respectiva porção disponível da memória ao processador core para uso como memória atribuída; e equilibrar dinamicamente os elementos de lista disponíveis entre a pluralidade das estruturas de listas sem bloqueio de acordo com uma métrica de equilíbrio que é configurada para otimizar a atribuição da memória.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que as respectivas porções da memória compreendem um ou mais dentre: buffers de tamanho fixo, ou buffers de tamanho variável.
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que as estruturas de listas sem bloqueio particionadas compreendem estruturas Slist.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que obter a pluralidade de estruturas de listas sem bloqueio particionadas inclui: obter uma estrutura de lista sem bloqueio inicial que inclui uma pluralidade inicial de elementos de lista, sendo que cada um dos elementos de lista iniciais corresponde a uma porção da memória respectiva inicial que é atualmente elegível para atribuição; e particionar a estrutura de lista sem bloqueio inicial nas estruturas de listas sem bloqueio particionadas aplicando-se o hash adaptável a cada valor dentre a pluralidade de valores chave que correspondem a elementos da topologia da arquitetura do processador multicore.
5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o hash adaptável é codificado de acordo com a arquitetura do processador multicore.
6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o hash adaptável é codificado de acordo com o índice do processador.
7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o hash adaptável é codificado de acordo com o número de nó de NUMA (Acesso Não Uniforme à Memória).
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a métrica de equilíbrio é configurada para equilibrar recursos de memória.
9. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a métrica de equilíbrio é configurada para manter a igualdade numérica substancial de elementos de memória entre as estruturas de listas sem bloqueio.
10. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a métrica de equilíbrio é configurada para evitar o excesso de atribuição de recursos de memória.
11. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o hash adaptável é configurado para acomodar uma pluralidade de respectivos cabeçalhos de lista que fazem referência, cada um, a respectivas estruturas dentre as estruturas de listas sem bloqueio particionadas.
12. Sistema para controle de atribuição de memória para memória que é acessível dentro de um ambiente de sistema operacional de um processador multicore por meio do controle da atribuição da memória a porções de solicitação de memória do processador multicore, sendo que o sistema é caracterizado pelo fato de que compreende: um primeiro processador que particiona inicialmente uma estrutura de lista sem bloqueio inicial em uma pluralidade de estruturas de listas sem bloqueio particionadas, com uso de um hash adaptável que é codificado de acordo com uma arquitetura do processador multicore; um segundo processador que particiona inicialmente uma pluralidade de elementos de lista entre a dita pluralidade de estruturas de listas sem bloqueio particionadas, sendo que cada um dos respectivos elementos de lista corresponde a uma respectiva porção da memória que é atualmente elegível para atribuição; um terceiro processador que, mediante uma solicitação de atribuição de memória a um processador core que solicita memória, pesquisa a dita pluralidade de estruturas de listas sem bloqueio particionadas para obter um elemento disponível dentre os respectivos elementos de lista, e após encontrar o dito elemento disponível dentre os respectivos elementos de lista, atribui, ao processador core que solicita memória, sendo que a referida respectiva porção da memória que é atualmente elegível para atribuição que corresponde ao referido elemento disponível encontrado dentre os respectivos elementos de lista; e um quarto processador que equilibra dinamicamente os ditos elementos de lista entre a dita pluralidade das ditas estruturas de listas sem bloqueio particionadas de acordo com uma métrica de equilíbrio, sendo que a dita métrica de equilíbrio é aplicada para distribuir os elementos de lista entre as ditas estruturas de listas sem bloqueio particionadas.
13. Sistema, de acordo com a reivindicação 12, caracterizado pelo fato de que: as respectivas porções da memória compreendem um ou mais dentre: buffers de tamanho fixo ou buffers de tamanho variável; e em que a estrutura de lista sem bloqueio inicial compreende uma estrutura Slist.
14. Sistema, de acordo com a reivindicação 12, caracterizado pelo fato de que particionar a estrutura de lista sem bloqueio inicial inclui: particionar a dita estrutura de lista sem bloqueio inicial na pluralidade de estruturas de listas sem bloqueio particionadas, usando o hash adaptável que é codificado de acordo com o índice do processador.
15. Sistema, de acordo com a reivindicação 12, caracterizado pelo fato de que particionar a estrutura de lista sem bloqueio inicial inclui: particionar a dita estrutura de lista sem bloqueio inicial na pluralidade de estruturas de listas sem bloqueio particionadas, usando o hash adaptável que é codificado de acordo com o número de nó de NUMA.
16. Método, caracterizado pelo fato de que compreende as etapas de: controlar a atribuição de memória a porções de solicitação de memória de um processador multicore por meio de: obter uma pluralidade de estruturas de listas sem bloqueio particionadas, sendo que cada uma das estruturas de listas sem bloqueio particionadas inclui uma respectiva pluralidade de elementos de lista, sendo que cada um dos respectivos elementos de lista corresponde a uma respectiva porção da memória que é atualmente elegível para atribuição, sendo que a pluralidade de estruturas de listas sem bloqueio particionadas é particionada com uso de um hash adaptável que é codificado de acordo com uma arquitetura do processador multicore; após uma solicitação de atribuição de uma ou mais das respectivas porções da memória a um processador core para uso como memória atribuída, pesquisar a pluralidade de estruturas de listas sem bloqueio particionadas para obter um elemento de lista disponível que corresponde a uma respectiva porção disponível da memória que é atualmente elegível para atribuição para uso como memória atribuída, sendo que a pesquisa realizada usa o hash adaptável; após encontrar o elemento de lista disponível, alocar a respectiva porção disponível da memória ao processador core para uso como memória atribuída; e equilibrar dinamicamente os elementos de lista disponíveis entre a pluralidade das estruturas de listas sem bloqueio de acordo com uma métrica de equilíbrio que é configurada para otimizar a atribuição da memória.
17. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que o hash adaptável é codificado de acordo com o índice do processador.
18. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que o hash adaptável é codificado de acordo com o número de nó de NUMA.
19. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que a métrica de equilíbrio é configurada para evitar o excesso de atribuição de recursos de memória.
20. Método, de acordo com a reivindicação 16, caracterizado pelo fato de que o hash adaptável é configurado para acomodar uma pluralidade de respectivos cabeçalhos de lista que fazem, cada um, referência a respectivas estruturas correspondentes dentre as estruturas de listas sem bloqueio particionadas.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/458,355 US9652289B2 (en) | 2012-04-27 | 2012-04-27 | Systems and methods for S-list partitioning |
US13/458,355 | 2012-04-27 | ||
PCT/US2013/037266 WO2013163008A1 (en) | 2012-04-27 | 2013-04-19 | Systems and methods for partitioning of singly linked lists for allocation memory elements |
Publications (3)
Publication Number | Publication Date |
---|---|
BR112014022764A2 BR112014022764A2 (pt) | 2017-06-20 |
BR112014022764A8 BR112014022764A8 (pt) | 2017-12-12 |
BR112014022764B1 true BR112014022764B1 (pt) | 2021-10-13 |
Family
ID=48289638
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
BR112014022764-0A BR112014022764B1 (pt) | 2012-04-27 | 2013-04-19 | Método de atribuição de memória e sistema para controle de atribuição de memória para memória que é acessível em um ambiente de sistema operacional de um processador multicore |
Country Status (8)
Country | Link |
---|---|
US (2) | US9652289B2 (pt) |
EP (1) | EP2842032B1 (pt) |
JP (1) | JP6275119B2 (pt) |
CN (1) | CN104254839B (pt) |
BR (1) | BR112014022764B1 (pt) |
RU (1) | RU2639944C2 (pt) |
TW (1) | TWI605340B (pt) |
WO (1) | WO2013163008A1 (pt) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9652289B2 (en) | 2012-04-27 | 2017-05-16 | Microsoft Technology Licensing, Llc | Systems and methods for S-list partitioning |
US9372825B1 (en) * | 2013-02-27 | 2016-06-21 | Netapp, Inc. | Global non-volatile solid-state cache in a network storage system |
US9377954B2 (en) * | 2014-05-09 | 2016-06-28 | Advanced Micro Devices, Inc. | System and method for memory allocation in a multiclass memory system |
US9870328B2 (en) * | 2014-11-14 | 2018-01-16 | Cavium, Inc. | Managing buffered communication between cores |
US10564865B2 (en) | 2016-03-22 | 2020-02-18 | Seagate Technology Llc | Lockless parity management in a distributed data storage system |
CN107969153B (zh) * | 2016-08-19 | 2021-06-22 | 华为技术有限公司 | 一种资源分配方法、装置及numa系统 |
CN107944297B (zh) * | 2017-12-11 | 2020-11-24 | 北京奇虎科技有限公司 | 一种访问文件的控制方法及装置 |
EP3756092A4 (en) * | 2018-05-04 | 2021-04-14 | Samsung Electronics Co., Ltd. | APPARATUS AND METHOD FOR MANAGING A SHARED RESOURCE IN A MULTI-CORE PROCESSOR |
CN111143058A (zh) * | 2019-12-17 | 2020-05-12 | 长沙新弘软件有限公司 | 一种基于后备列表的内存管理方法 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH02162439A (ja) * | 1988-12-15 | 1990-06-22 | Fujitsu Ltd | 共有メモリのフリーリスト管理方式 |
US6058460A (en) * | 1996-06-28 | 2000-05-02 | Sun Microsystems, Inc. | Memory allocation in a multithreaded environment |
US6785888B1 (en) * | 1997-08-29 | 2004-08-31 | International Business Machines Corporation | Memory allocator for a multiprocessor computer system |
US6643754B1 (en) * | 2000-02-15 | 2003-11-04 | International Business Machines Corporation | System and method for dynamically allocating computer memory |
US6986015B2 (en) | 2001-12-10 | 2006-01-10 | Incipient, Inc. | Fast path caching |
US7111289B2 (en) | 2001-12-21 | 2006-09-19 | Agere Systems, Inc. | Method for implementing dual link list structure to enable fast link-list pointer updates |
US7016923B2 (en) | 2002-11-05 | 2006-03-21 | Sun Microsystems, Inc. | Multi-threaded garbage collector employing cascaded memory arrays of task identifiers to implement work stealing queues for task identification and processing |
US7069394B2 (en) | 2002-12-05 | 2006-06-27 | International Business Machines Corporation | Dynamic data routing mechanism for a high speed memory cloner |
US7587566B2 (en) | 2004-02-20 | 2009-09-08 | Microsoft Corporation | Realtime memory management via locking realtime threads and related data structures |
US7844973B1 (en) | 2004-12-09 | 2010-11-30 | Oracle America, Inc. | Methods and apparatus providing non-blocking access to a resource |
US10769215B2 (en) | 2005-07-14 | 2020-09-08 | Conversant Wireless Licensing S.A R.L. | Method, apparatus and computer program product providing an application integrated mobile device search solution using context information |
US7904688B1 (en) * | 2005-12-21 | 2011-03-08 | Trend Micro Inc | Memory management unit for field programmable gate array boards |
EP1936498A1 (en) * | 2006-12-21 | 2008-06-25 | International Business Machines Corporation | A method and system to manage memory accesses from multithread programs on multiprocessor systems |
US8112570B2 (en) * | 2007-03-15 | 2012-02-07 | Broadcom Corporation | Pipelined buffer interconnect with trigger core controller |
US8495641B2 (en) * | 2007-06-29 | 2013-07-23 | International Business Machines Corporation | Efficiently boosting priority of read-copy update readers while resolving races with exiting and unlocking processes |
RU2406127C2 (ru) | 2007-09-18 | 2010-12-10 | Виктор Анатольевич Кущенко | Цифровой процессор кущенко в.а. |
US7941688B2 (en) | 2008-04-09 | 2011-05-10 | Microsoft Corporation | Managing timers in a multiprocessor environment |
US20090259780A1 (en) | 2008-04-10 | 2009-10-15 | Weistech Technology Co., Ltd. | Portable electronic device for controlling under-controlled devices |
US8190827B2 (en) * | 2009-02-27 | 2012-05-29 | Red Hat, Inc. | Memory sharing among computer programs |
US8078825B2 (en) * | 2009-03-11 | 2011-12-13 | Oracle America, Inc. | Composite hash and list partitioning of database tables |
US20100251250A1 (en) * | 2009-03-30 | 2010-09-30 | Microsoft Corporation | Lock-free scheduler with priority support |
TW201112125A (en) | 2009-09-16 | 2011-04-01 | Ibm | Method and system for operating an instance of a data structure |
US20110296437A1 (en) * | 2010-05-28 | 2011-12-01 | Devendra Raut | Method and apparatus for lockless communication between cores in a multi-core processor |
US9652289B2 (en) | 2012-04-27 | 2017-05-16 | Microsoft Technology Licensing, Llc | Systems and methods for S-list partitioning |
-
2012
- 2012-04-27 US US13/458,355 patent/US9652289B2/en active Active
-
2013
- 2013-04-15 TW TW102113317A patent/TWI605340B/zh not_active IP Right Cessation
- 2013-04-19 JP JP2015509034A patent/JP6275119B2/ja active Active
- 2013-04-19 EP EP13720655.3A patent/EP2842032B1/en active Active
- 2013-04-19 BR BR112014022764-0A patent/BR112014022764B1/pt active IP Right Grant
- 2013-04-19 CN CN201380022199.1A patent/CN104254839B/zh active Active
- 2013-04-19 RU RU2014143063A patent/RU2639944C2/ru active
- 2013-04-19 WO PCT/US2013/037266 patent/WO2013163008A1/en active Application Filing
-
2017
- 2017-05-15 US US15/595,088 patent/US10223253B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
RU2639944C2 (ru) | 2017-12-25 |
JP2015515076A (ja) | 2015-05-21 |
RU2014143063A (ru) | 2016-05-20 |
CN104254839B (zh) | 2018-10-12 |
WO2013163008A1 (en) | 2013-10-31 |
BR112014022764A8 (pt) | 2017-12-12 |
US9652289B2 (en) | 2017-05-16 |
US20130290667A1 (en) | 2013-10-31 |
CN104254839A (zh) | 2014-12-31 |
US20170249243A1 (en) | 2017-08-31 |
TWI605340B (zh) | 2017-11-11 |
EP2842032B1 (en) | 2020-05-06 |
JP6275119B2 (ja) | 2018-02-07 |
US10223253B2 (en) | 2019-03-05 |
EP2842032A1 (en) | 2015-03-04 |
BR112014022764A2 (pt) | 2017-06-20 |
TW201405308A (zh) | 2014-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
BR112014022764B1 (pt) | Método de atribuição de memória e sistema para controle de atribuição de memória para memória que é acessível em um ambiente de sistema operacional de um processador multicore | |
US10706101B2 (en) | Bucketized hash tables with remap entries | |
JP6764362B2 (ja) | メモリの重複除去方法及び重複除去dramメモリモジュール | |
US9824011B2 (en) | Method and apparatus for processing data and computer system | |
US9760497B2 (en) | Hierarchy memory management | |
US9836492B1 (en) | Variable sized partitioning for distributed hash tables | |
CN107844267B (zh) | 缓冲区分配和存储器管理 | |
US9336147B2 (en) | Cache and memory allocation for virtual machines | |
US9977609B2 (en) | Efficient accesses of data structures using processing near memory | |
US10852955B2 (en) | Method and system for accessing data objects stored in a storage system using object descriptors allocated by clients | |
JP2018503181A (ja) | キャッシュ一貫性を有するマルチコアプロセッサ | |
US8347293B2 (en) | Mutual exclusion domains to perform file system processes on stripes | |
GB2565146A (en) | Memory control for electronic data processing system | |
US9081503B2 (en) | Methods and systems for maintaining a storage volume with holes and filling holes | |
US9104583B2 (en) | On demand allocation of cache buffer slots | |
US10609139B2 (en) | Coordinator ownership authentication in a distributed system with multiple storage object coordinators | |
CN109313579B (zh) | 低重新分发的负载均衡 | |
US7562204B1 (en) | Identifying and relocating relocatable kernel memory allocations in kernel non-relocatable memory | |
US10082978B2 (en) | Distributed shared log storage system having an adapter for heterogenous big data workloads | |
US20210191777A1 (en) | Memory Allocation in a Hierarchical Memory System | |
CN116719813A (zh) | 一种哈希表的处理方法、装置及电子设备 | |
US11500815B2 (en) | Dual relationship-based hash structure for non-volatile memory technology | |
US20230289288A1 (en) | Direct swap caching with noisy neighbor mitigation and dynamic address range assignment | |
WO2023172319A1 (en) | Direct swap caching with noisy neighbor mitigation and dynamic address range assignment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
B25A | Requested transfer of rights approved |
Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC (US) |
|
B06F | Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette] | ||
B06U | Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette] | ||
B09A | Decision: intention to grant [chapter 9.1 patent gazette] | ||
B16A | Patent or certificate of addition of invention granted [chapter 16.1 patent gazette] |
Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 19/04/2013, OBSERVADAS AS CONDICOES LEGAIS. |