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 PDF

Info

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
Application number
BR112014022764-0A
Other languages
English (en)
Other versions
BR112014022764A8 (pt
BR112014022764A2 (pt
Inventor
Amol Dilip Dixit
Bradley Michael Waters
Original Assignee
Microsoft Technology Licensing, Llc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing, Llc filed Critical Microsoft Technology Licensing, Llc
Publication of BR112014022764A2 publication Critical patent/BR112014022764A2/pt
Publication of BR112014022764A8 publication Critical patent/BR112014022764A8/pt
Publication of BR112014022764B1 publication Critical patent/BR112014022764B1/pt

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management 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.
SUMÁRIO
[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.
BREVE DESCRIÇÃO DOS DESENHOS
[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.
DESCRIÇÃO DETALHADA
[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.
Troca de Lista Dinâmica
[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.
BR112014022764-0A 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 BR112014022764B1 (pt)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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.