BR112020023084A2 - pontos de interrupção de reprodução de rastreamento baseados em cache usando bits de campos de tags reservados - Google Patents
pontos de interrupção de reprodução de rastreamento baseados em cache usando bits de campos de tags reservados Download PDFInfo
- Publication number
- BR112020023084A2 BR112020023084A2 BR112020023084-7A BR112020023084A BR112020023084A2 BR 112020023084 A2 BR112020023084 A2 BR 112020023084A2 BR 112020023084 A BR112020023084 A BR 112020023084A BR 112020023084 A2 BR112020023084 A2 BR 112020023084A2
- Authority
- BR
- Brazil
- Prior art keywords
- cache
- memory
- address
- cache line
- breakpoint
- Prior art date
Links
- 230000015654 memory Effects 0.000 claims abstract description 248
- 238000000034 method Methods 0.000 claims abstract description 65
- 238000001514 detection method Methods 0.000 claims abstract description 35
- 238000012545 processing Methods 0.000 claims description 21
- 239000000872 buffer Substances 0.000 claims description 15
- 238000012544 monitoring process Methods 0.000 claims description 14
- 238000012795 verification Methods 0.000 claims description 6
- 238000013519 translation Methods 0.000 claims description 3
- 230000008569 process Effects 0.000 abstract description 9
- 238000003860 storage Methods 0.000 description 18
- 230000007246 mechanism Effects 0.000 description 13
- 230000008901 benefit Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000004941 influx Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000014616 translation Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3648—Software debugging using additional hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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
- G06F12/0815—Cache consistency protocols
- G06F12/0817—Cache consistency protocols using directory methods
-
- 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
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0833—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
-
- 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
- G06F12/0815—Cache consistency protocols
- G06F12/0837—Cache consistency protocols with software control, e.g. non-cacheable data
-
- 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/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- 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/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/126—Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/327—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for interrupts
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/328—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/68—Details of translation look-aside buffer [TLB]
- G06F2212/684—TLB miss handling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
A presente invenção refere-se à execução de uma detecção de pontos de interrupção através de um cache incluindo a detecção de uma ocorrência de um acesso à memória e a identificação se alguma linha de cache do cache corresponde a um endereço associado ao acesso à memória ou não. Quando uma linha de cache corresponde ao endereço associado ao acesso à memória, nenhum ponto de interrupção foi encontrado. Quando nenhuma linha de cache corresponde ao endereço associado ao acesso à memória, as modalidades identificam se alguma linha de cache corresponde ao endereço associado ao acesso à memória quando um ou mais bits de flag são ignorados. Quando uma linha de cache corresponde ao endereço associado ao acesso à memória quando o um ou mais bits de flag são ignorados, as modalidades executam uma verificação se um ponto de interrupção foi encontrado. Caso contrário, as modalidades processam uma falha de cache.
Description
Relatório Descritivo da Patente de Invenção para "PONTOS DE INTERRUPÇÃO DE REPRODUÇÃO DE RASTREAMENTO BASE- ADOS EM CACHE USANDO BITS DE CAMPOS DE TAGS RESER- VADOS".
[0001] ANTECEDENTES DA INVENÇÃO
[0002] Ao gravar um código durante o desenvolvimento de aplicati- vos de software, os desenvolvedores geralmente gastam uma quanti- dade significativa de tempo "depurando" o código a fim de encontrar erros de tempo de execução no código. Nesse contexto, os desenvol- vedores podem adotar várias abordagens no sentido de reproduzir e localizar um bug de código-fonte, tal como observar o comportamento de um programa com base em diferentes entradas, inserir um código de depuração (por exemplo, para imprimir valores de variáveis, para ras- trear desvios de execução, etc.), remover temporariamente partes do código, etc. O rastreamento de erros de tempo de execução para iden- tificar bugs de código pode ocupar uma parte significativa do tempo de desenvolvimento do aplicativo.
[0003] Muitos tipos de aplicativos de depuração ("depuradores") fo- ram desenvolvidos a fim de auxiliar os desenvolvedores com o processo de depuração de código. Essas ferramentas oferecem aos desenvolve- dores a capacidade de rastrear, visualizar e alterar a execução do có- digo do computador. Por exemplo, os depuradores podem visualizar a execução de instruções de código, podem apresentar valores variáveis em vários momentos durante a execução do código, podem permitir que os desenvolvedores alterem os caminhos de execução do código e/ou podem permitir que os desenvolvedores definam "pontos de interrup- ção" e/ou "pontos de controle" em elementos de código de interesse (que, quando atingidos durante a execução, fazem com que a execução do código seja suspensa), entre outras coisas. Em geral, um "ponto de interrupção" se refere a um local de memória que armazena uma parte especificada do código executável (por exemplo, uma linha de código, uma definição de variável, uma definição de função, etc.), enquanto um “ponto de controle” se refere a um local de memória que armazena da- dos (por exemplo, um local de memória que armazena o valor de uma variável, constante, estrutura de dados, etc.). Para fins de simplicidade, o uso do termo "ponto de interrupção" se refere tanto a pontos de inter- rupção como a pontos de controle.
[0004] Uma forma emergente de aplicativos de depuração permite a depuração de "viagem no tempo", "reversa" ou "histórica", na qual a execução de um programa é registrada / rastreada por um software e/ou hardware de rastreamento em um ou mais arquivos de rastreamento, que pode ser usado para reproduzir a execução do programa posterior- mente para análise avançada e reversa. Por exemplo, depuradores de “viagem no tempo” podem permitir que um desenvolvedor defina pontos de interrupção avançados (como os depuradores convencionais), bem como pontos de interrupção reversos.
[0005] Um desafio na implementação de depuradores de "viagem no tempo" envolve como detectar quando um endereço de memória de interesse (por exemplo, correspondente a um ponto de interrupção) foi encontrado durante a reprodução de um arquivo de rastreamento de uma maneira flexível e eficiente. Um mecanismo que foi explorado para rastrear endereços de memória de interesse durante uma reprodução é usar pontos de interrupção de hardware implementados em processa- dor. Embora eficaz, o uso de pontos de interrupção de hardware tem a desvantagem de limitar severamente a quantidade de endereços de me- mória que podem ser simultaneamente observados. Por exemplo, a ar- quitetura INTEL x86 provê apenas quatro registradores de depuração (ou seja, DR0 a DR3) para armazenar endereços de memória a serem observados. O uso de pontos de interrupção de hardware tem também a desvantagem de inerentemente vincular uma implementação de de- purador a um hardware de suporte específico (por exemplo, contando com os registradores de depuração x86).
[0006] Outro mecanismo que foi explorado é o uso de pontos de interrupção de software, no qual cada operação rastreada que acessa a memória (por exemplo, uma leitura ou uma gravação de dados de ar- mazenamento de memória, ou uma leitura / busca para execução de um código de programa de armazenamento de memória) é instrumentali- zada com instruções de código adicionais que verificam se o acesso é ou não a um endereço de memória de interesse. No entanto, a instru- mentação tem a grande desvantagem de fazer com que uma verificação da ocorrência de um ponto de interrupção seja feita para cada acesso à memória, independentemente de esse acesso à memória corresponder ou não a um ponto de interrupção. Em muitos ambientes, a execução das instruções de código instrumentalizadas resulta no uso de dezenas a centenas de ciclos de processador adicionais para cada acesso à me- mória, o que tem um importante efeito prejudicial sobre o desempenho da reprodução perceptível a um usuário humano.
[0007] Soluções anteriores do inventor para abordar os desafios acima por meio do uso de caches (por exemplo, um cache de um hardware ou processador emulado, ou alguma outra estrutura de me- mória cache) como parte da detecção de ponto de interrupção. Essas soluções limitam muito a quantidade de ciclos de processador necessá- rios para realizar uma verificação de ponto de interrupção em compara- ção à instrumentação e são descritas no Pedido de Patente dos Estados Unidos Nº de Série 15/405.849, depositado em 13 de janeiro de 2017, e intitulado “EFFICIENT BREAKPOINT DETECTIONS VIA CACHES”.
[0008] Essas soluções usam um cache para limitar as verificações de ponto de interrupção a apenas acessos à memória que causam fa-
lhas de cache, em vez de realizar uma verificação de ponto de interrup- ção em cada acesso à memória. Essas soluções podem oferecer gran- des melhorias de desempenho em relação às soluções de detecção de pontos de interrupção não baseados em cache, e ao mesmo tempo pro- ver uma quantidade virtualmente ilimitada de pontos de interrupção. As mesmas envolvem o desalojamento de uma linha de cache quando a mesma se sobrepõe a um endereço de memória que corresponde a um ponto de interrupção e, nesse caso, “uma única etapa” do processador em cada falha de cache a fim de determinar se um ponto de interrupção foi encontrado. Embora sendo um avanço sobre a instrumentação para a detecção de pontos de interrupção, essas soluções afetam grave- mente o desempenho de execução quando ocorrem falhas de cache (mesmo quando nenhum ponto de interrupção foi atingido em relação à falha de cache), e também fazem com que ocorram falhas de cache mais frequentes do que no caso do não uso do cache para a detecção de pontos de interrupção (ou seja, essas soluções proativamente desa- lojam as linhas de cache que se sobrepõem a um endereço de memória a ser observado).
[0009] BREVE SUMÁRIO DA INVENÇÃO
[0010] Pelo menos algumas modalidades descritas no presente do- cumento promovem a detecção de pontos de interrupção baseados em cache de uma maneira que evita o desalojamento de linhas de cache sobrepostas a endereços de memória que estão sendo observados, e ao mesmo tempo preservam as vantagens das técnicas anteriores de detecção de pontos de interrupção baseados em cache. Em particular, em vez de desalojar uma linha de cache que se sobrepõe a um ende- reço de memória observado, essas modalidades utilizam um ou mais bits "reservados" (ou não usados) no campo das tags da linha de cache (ou mecanismo similar) a fim de sinalizar que a linha de cache se sobre- põe a um endereço de memória observado. Isso não apenas reduz a quantidade de falhas de cache que ocorrem, mas também permite que verificações eficientes de pontos de interrupção sejam realizadas quando houver um acesso subsequente à memória envolvendo a linha de cache (ou seja, ao invés de apenas durante uma falha de cache). Em particular, em vez de precisar reimportar a linha de cache em um acesso à memória subsequente devido a uma falha de cache, uma verificação de ponto de interrupção eficiente poderá ser realizada quando houver um acerto em qualquer linha de cache que tenha um bit reservado defi- nido no campo de tag da linha de cache. Assim, as modalidades descri- tas no presente documento evitam desalojamentos de linha de cache para fins de detecção de pontos de interrupção e adicionam um novo mecanismo de detecção de ponto de interrupção eficiente para as linhas de cache existentes - o que poderá reduzir significativamente o ove- rhead causado por um depurador para a detecção de pontos de inter- rupção durante uma reprodução de rastreamento.
[0011] Em algumas modalidades, a configuração de um cache para a detecção de pontos de interrupção inclui a identificação de um ende- reço de memória que deve ser monitorado e, em seguida, a determina- ção se uma linha de cache sobreposta ao endereço de memória já existe em um cache. Nesse caso, a modalidade inclui a definição de um flag em um campo das tags da linha de cache. Caso contrário, a moda- lidade poderá processar uma falha de cache e definir um flag no campo de tags de uma linha de cache recém-importada ou poderá simples- mente finalizar.
[0012] Em outras modalidades, a execução da detecção de pontos de interrupção por meio de um cache inclui a detecção de uma ocorrên- cia de um acesso à memória e, em seguida, a identificação se alguma linha de cache do cache corresponde a um endereço associado ao acesso à memória. Quando uma linha de cache não corresponde ao endereço associado ao acesso à memória, a modalidade incluirá a de- terminação de que nenhum ponto de interrupção foi encontrado. Quando nenhuma linha de cache corresponde ao endereço associado ao acesso à memória, a modalidade incluirá a identificação se alguma linha de cache corresponde ao endereço associado ao acesso à memó- ria quando um ou mais bits de flag são ignorados. Quando uma linha de cache não corresponde ao endereço associado ao acesso à memória quando um ou mais bits de flag são ignorados, a modalidade incluirá a execução de uma verificação se um ponto de interrupção foi encontrado. De outra forma, a modalidade incluirá o processamento de uma falha de cache, e ao mesmo tempo a execução de uma verificação de pontos de interrupção e/ou a definição de um flag no campo de tags de uma linha de cache recém-importada.
[0013] Este sumário é provido no sentido de apresentar uma sele- ção de conceitos de uma forma simplificada que serão descritos a seguir na Descrição Detalhada. Este Sumário não se destina a identificar as características-chave ou características essenciais da matéria reivindi- cada, tampouco se destina a ser usado como um auxílio na determina- ção do âmbito de aplicação da matéria reivindicada.
[0014] BREVE DESCRIÇÃO DOS DESENHOS
[0015] A fim de descrever a maneira pela qual as vantagens acima citadas e outras vantagens e características da presente invenção po- dem ser obtidas, uma descrição mais particular da invenção brevemente acima apresentada será provida por meio da referência a modalidades específicas das mesmas que são ilustradas nos desenhos em apenso. Entendendo que esses desenhos ilustram tão somente as modalidades típicas da presente invenção e, portanto, não devem ser considerados como limitantes do seu âmbito de aplicação, a presente invenção será descrita e explicada com especificidade e detalhes adicionais por meio do uso dos desenhos em anexo, nos quais:
[0016] A Figura 1 ilustra um ambiente computacional exemplar que facilita os pontos de interrupção de reprodução de rastreamento com base em cache usando bits de campos de tags reservados;
[0017] A Figura 2 ilustra um exemplo de operação de um cache;
[0018] A Figura 3A ilustra um exemplo de endereços de memória usando um alinhamento de memória de 64 bytes;
[0019] A Figura 3B ilustra um exemplo de endereços de memória usando um alinhamento de memória de 32 bytes;
[0020] A Figura 3C ilustra um exemplo de uso de menos bits de tags que o necessário para representar um endereço de memória real, com base na omissão dos bits que são sempre zero devido ao alinhamento da memória;
[0021] A Figura 4 ilustra um exemplo de operação de pontos de in- terrupção baseados em cache usando bits de campos de tags reserva- dos;
[0022] A Figura 5 ilustra um fluxograma de um método exemplar para a configuração de um cache para a detecção de pontos de inter- rupção;
[0023] A Figura 6 ilustra um fluxograma de um método exemplar para a execução da detecção de pontos de interrupção através de um cache; e
[0024] A Figura 7 ilustra um fluxograma de um método exemplar para a execução da detecção de pontos de interrupção em um tempo de retirada da instrução.
[0025] DESCRIÇÃO DETALHADA DA INVENÇÃO
[0026] Pelo menos algumas modalidades descritas no presente do- cumento promovem a detecção de pontos de interrupção baseados em cache de uma maneira a evitar o desalojamento das linhas de cache sobrepostas aos endereços de memória que estão sendo observados, e ao mesmo tempo preservar as vantagens das técnicas anteriores de detecção de pontos de interrupção baseados em cache. Em particular, em vez de desalojar uma linha de cache que se sobrepõe a um ende- reço de memória observado, essas modalidades utilizam um ou mais bits "reservados" (ou não usados) no campo das tags da linha de cache (ou mecanismo similar) a fim de sinalizar que a linha de cache se sobre- põe a um endereço de memória observado. Isso não apenas reduz a quantidade de falhas de cache que ocorrem, mas também permite que eficientes verificações de pontos de interrupção sejam realizadas quando houver um acesso à memória subsequente envolvendo a linha de cache (ou seja, ao contrário de apenas durante uma falha de cache). Em particular, em vez de precisar reimportar a linha de cache em um acesso à memória subsequente devido a uma falha de cache, uma efi- ciente verificação de ponto de interrupção poderá ser executada quando há um acerto em qualquer linha de cache que tenha um bit reservado definido no campo de tag da linha de cache. Assim, as modalidades da presente invenção evitam desalojamentos de linhas de cache para fins de detecção de pontos de interrupção e adicionam um novo mecanismo de detecção de ponto de interrupção eficiente para as linhas de cache existentes - o que poderá reduzir significativamente o overhead causado por um depurador para a detecção de pontos de interrupção durante uma reprodução de rastreamento.
[0027] Inicialmente, a Figura 1 ilustra um exemplo de ambiente computacional 100 que facilita os pontos de interrupção de reprodução de rastreamento com base em cache usando bits de campos de tags reservados. Tal como ilustrado, as modalidades podem compreender ou utilizar um sistema de computador de uso especial ou de uso geral 101 que inclui um hardware de computador, como, por exemplo, um ou mais processadores 102, uma memória de sistema 103, um ou mais armazenadores de dados 104 e/ou um hardware de entrada / saída 105. De acordo com algumas modalidades, o sistema de computador 101 e os componentes nele contidos podem compreender um ambiente virtu- alizado.
[0028] As modalidades dentro do âmbito de aplicação da presente invenção incluem meios físicos ou outros meios legíveis por computador para transportar ou armazenar instruções e/ou estruturas de dados exe- cutáveis por computador. Tais meios legíveis por computador podem ser qualquer meio disponível que pode ser acessado pelo sistema de computador 101. O meio legível por computador que armazena instru- ções e/ou estruturas de dados executáveis por computador é um dispo- sitivo de armazenamento em computador. Os meios legíveis por com- putador que carregam instruções e/ou estruturas de dados executáveis por computador são meios de transmissão. Assim, a título de exemplo, e não como limitação, as modalidades da presente invenção podem compreender pelo menos dois tipos distintamente diferentes de meio legível por computador: dispositivos de armazenamento em computador e meios de transmissão.
[0029] Os meios de armazenamento em computador são dispositi- vos de hardware físicos e tangíveis que armazenam instruções e/ou es- truturas de dados executáveis por computador. Os dispositivos de ar- mazenamento em computador incluem vários hardwares de computa- dor, tais como memória RAM, memória ROM, memória EEPROM, uni- dades de estado sólido ("SSD"), memória flash, memória de mudança de fase ("PCM"), armazenamento em disco óptico, armazenamento em disco magnético, ou outros dispositivos de armazenamento magnético, ou qualquer outro dispositivo de hardware que pode ser usado para ar- mazenar um código de programa na forma de instruções ou estruturas de dados executáveis por computador, e que pode ser acessado e exe- cutado pelo sistema de computador 101 para implementar a funcionali- dade da presente invenção. Assim, por exemplo, os dispositivos de ar-
mazenamento em computador podem incluir a ilustrada memória de sis- tema 103, o ilustrado armazenador de dados 104 que pode armazenar instruções e/ou estruturas de dados executáveis por computador ou ou- tro armazenamento, tal como armazenamento em processador, con- forme descrito mais adiante.
[0030] O meio de transmissão pode incluir uma rede e/ou links de dados que podem ser usados para carregar um código de programa na forma de instruções ou estruturas de dados executáveis por computador e que podem ser acessados pelo sistema de computador 101. Uma "rede" é definida como um ou mais links de dados que permitem o trans- porte de dados eletrônicos entre sistemas e/ou módulos de computador e/ou outros dispositivos eletrônicos. Quando informações são transferi- das ou providas por uma rede ou outra conexão de comunicação (com fio, sem fio, ou uma combinação de com ou sem fio) para um sistema de computador, o sistema de computador poderá ver a conexão como um meio de transmissão. As combinações dos itens acima devem tam- bém ser incluídas no âmbito de aplicação do meio legível por computa- dor. Por exemplo, o hardware de entrada / saída 105 pode compreender um hardware de rede (por exemplo, um módulo de interface de rede com fio ou sem fio) que conecta uma rede um link de dados que poderá ser usado para carregar um código de programa na forma de instruções ou estruturas de dados executáveis por computador.
[0031] Além disso, após atingir vários componentes de sistema de computador, o código do programa na forma de instruções ou estruturas de dados executáveis por computador poderá ser automaticamente transferido do meio de transmissão para os dispositivos de armazena- mento em computador (ou vice-versa). Por exemplo, as instruções ou estruturas de dados executáveis por computador recebidas através de uma rede ou link de dados podem ser armazenadas temporariamente na memória RAM dentro do hardware de rede e, em seguida, eventual- mente transferidas para a memória de sistema 103 e/ou para dispositi- vos de armazenamento em computador menos voláteis (por exemplo, para o armazenador de dados 104) do sistema de computador 101. As- sim, deve ser entendido que os dispositivos de armazenamento em computador podem ser incluídos nos componentes de sistema de com- putador que também (ou mesmo principalmente) utilizam meios de transmissão.
[0032] As instruções executáveis por computador compreendem, por exemplo, instruções e dados que, quando executados no(s) proces- sador(es) 102, fazem com que o sistema de computador 101 execute uma determinada função ou grupo de funções. As instruções executá- veis por computador podem ser, por exemplo, binários, instruções de formato intermediário, tais como uma linguagem assembly ou ainda um código-fonte.
[0033] Os versados na técnica apreciarão que a presente invenção pode ser praticada em ambientes computacionais de rede com muitos tipos de configurações de sistema de computador, incluindo computa- dores pessoais, computadores desktop, laptops, processadores de mensagens, dispositivos portáteis, sistemas multiprocessadores, eletrô- nicos de consumo baseados ou programáveis em microprocessador, PCs em rede, minicomputadores, computadores mainframe, telefones celulares, assistentes PDA, computadores do tipo tablet, operadoras de radiochamada, roteadores, comutadores, ou coisa do gênero. A pre- sente invenção pode também ser praticada em ambientes de sistema distribuídos nos quais sistemas de computador locais e remotos, que se encontram conectados (seja por links de dados com fio, links de dados sem fio, ou por uma combinação de links de dados com e sem fio) atra- vés de uma rede, executam tarefas. Sendo assim, em um ambiente de sistema distribuído, um sistema de computador poderá incluir uma plu- ralidade de sistemas de computador constituintes. Em um ambiente de sistema distribuído, módulos de programa podem ser colocados em dis- positivos de armazenamento de memória locais ou remotos.
[0034] Tal como ilustrado, o armazenador de dados 104 pode ar- mazenar instruções e/ou estruturas de dados executáveis por computa- dor que representam um código de aplicativo, como, por exemplo, um depurador 104a, um kernel de sistema operacional 104b e um aplicativo 104c. O armazenador de dados 104 pode também armazenar outros tipos de dados, tais como um ou mais arquivos de rastreamento 104d. Quando um código de aplicativo está sendo executado (por exemplo, usando o(s) processador(es) 102), a memória de sistema 103 poderá armazenar dados de tempo de execução correspondentes, tais como estruturas de dados de tempo de execução, instruções executáveis por computador, etc. Sendo assim, a Figura 1 ilustra a memória de sistema 103 como incluindo um código de aplicativo 103a e dados de tempo de execução de aplicativo 103b. Embora os arquivos de rastreamento 104d sejam ilustrados como sendo armazenados no armazenador de dados 104, os mesmos poderão também ser gravados exclusivamente ou tem- porariamente na memória de sistema 103, ou em algum outro disposi- tivo de armazenamento (por exemplo, no(s) buffer(s) 102e dentro do(s) processador(es) 102).
[0035] O depurador 104a pode rastrear a execução de rastrea- mento no(s) processador(es) 102 e/ou reprodução de um rastreamento registrado no(s) arquivo(s) de rastreamento 104d. Por exemplo, o depu- rador 104a pode rastrear a execução do aplicativo 104c e armazenar os dados de rastreamento resultantes (por exemplo, os valores de registro, os valores de memória, etc.) no(s) arquivo(s) de rastreamento 104d. Adi- cionalmente, ou de maneira alternativa, o depurador 104a poderá repro- duzir a execução rastreada do aplicativo 104c a partir do(s) arquivo(s)
de rastreamento 104d executando o código de aplicativo 104c no(s) pro- cessador(es) 102, e ao mesmo tempo suprir esse código com os dados rastreados (por exemplo, os valores de registro, os valores de memória, etc.) do(s) arquivo(s) de rastreamento 104d em momentos apropriados. Embora, para resumir, essa funcionalidade de gravação e reprodução seja descrita como uma caixa única (ou seja, como o depurador 104a), deve-se apreciar que essa funcionalidade poderá ser separada em di- ferentes aplicativos ou componentes.
[0036] Por exemplo, um registrador de rastreamento pode fazer parte do depurador 104a, ou poderá ser um aplicativo independente ou integrado em outro componente de software, tal como o kernel de sis- tema operacional 104b, um hipervisor, etc. Um registrador de rastrea- mento poderá também existir em um sistema de computador totalmente diferente. Sendo assim, o(s) arquivo(s) de rastreamento 104d poderiam se originar de outro sistema de computador e ser transferidos (por exemplo, usando o hardware de entrada / saída 105) para o sistema de computador 101 para reprodução pelo depurador 104. Em geral, um re- gistrador de rastreamento registra a execução de uma ou mais porções de código do aplicativo 104c no(s) processador(es) 102 ou em algum outro sistema de computador, e ao mesmo tempo armazena os dados de rastreamento (por exemplo, os valores de memória lidos pelas ins- truções de código, os valores de registrador supridos pelas instruções de código, etc.) nos arquivo(s) de rastreamento 104d. Nesse caso, um componente de reprodução de rastreamento poderá reexecutar a(s) porção/porções de código no(s) processador(es) 102, e ao mesmo tempo suprir esse código com os dados de rastreamento do(s) ar- quivo(s) de rastreamento 104d de modo que o código seja executado substancialmente da mesma maneira que foi executado no tempo de rastreamento.
[0037] A Figura 1 também inclui uma representação simplificada dos componentes de hardware internos do(s) processador(es) 102, mui- tas vezes referidos como uma unidade de processamento central (CPU). Tal como ilustrado, cada processador 102 inclui uma pluralidade de unidades de processamento 102a. Cada unidade de processamento pode ser física (ou seja, um núcleo de processador físico) e/ou lógica (ou seja, um núcleo lógico apresentado por um núcleo físico que suporta um hiperencadeamento, no qual mais de um encadeamento de aplica- tivo é executado simultaneamente no núcleo físico). Assim, por exem- plo, embora o processador 102 possa, em algumas modalidades, incluir apenas uma única unidade de processamento físico (núcleo), o mesmo poderá incluir as duas ou mais unidades de processamento 102a apre- sentadas por aquela única unidade de processamento físico.
[0038] Cada unidade de processamento 102a executa as instruções de processador que são definidas por aplicativos, e cujas instruções são selecionadas a partir de uma arquitetura de conjunto de instruções de processador predefinida. A arquitetura de conjunto de instruções parti- cular de cada processador 102 varia com base no fabricante do proces- sador e no modelo do processador. As arquiteturas de conjunto de ins- truções comuns incluem as arquiteturas IA-64 e IA-32 da INTEL, INC., a arquitetura AMD64 da ADVANCED MICRO DEVICES, INC., e várias arquiteturas Advanced RISC Machine ("ARM") da ARM HOLDINGS, PLC, embora exista um grande número de outras arquiteturas de con- junto de instruções e poderá ser usado pela presente invenção. Em ge- ral, uma “instrução” é a menor unidade de código externamente visível (ou seja, externa ao processador) que pode ser executada por um pro- cessador.
[0039] Cada unidade de processamento 102a obtém instruções de processador a partir de um ou mais cache(s) de processador 102b, e executa as instruções de processador com base nos dados do(s) ca- che(s) 102b, com base nos dados dos registradores 102c (isto é, nos locais de armazenamento baseado em hardware que são definidos com base na arquitetura do conjunto de instruções do(s) processador(es) 102) e/ou sem dados de entrada. Em geral, o(s) cache(s) 102b incluem uma pequena quantidade (isto é, pequena em relação à quantidade tí- pica de memória de sistema 103) de memória de acesso aleatório que armazena no processador cópias de partes da memória de sistema 103. Por exemplo, ao executar o aplicativo 104c, o(s) cache(s) 102b armaze- nam um subconjunto do código de aplicativo de tempo de execução 103a em uma seção de cache de código do(s) cache(s) 102b, e arma- zena outros dados de aplicativo de tempo de execução 103b (por exem- plo, variáveis, estruturas de dados, etc.) em uma seção de cache de dados do(s) cache(s) 102b. Quando a(s) unidade(s) de processamento 102a exigem dados ainda não armazenados no(s) cache(s) 102b, ocorre uma "falha de cache" e esses dados são buscados na memória de sistema 103 (potencialmente desalojando alguns outros dados do(s) cache(s) 102b).
[0040] Embora grande parte da operação do(s) processador(es) 102 seja definida em uma lógica codificada por hardware (isto é, por circuitos), parte da operação do(s) processador(es) 102 pode ser defi- nida com um microcódigo do processador 102d. Em geral, o microcó- digo 102d compreende instruções armazenadas na memória do proces- sador (por exemplo, um meio de armazenamento em computador) que são executáveis pelo(s) processador(es) 102 a fim de direcionar a ope- ração do(s) processador(es) 102. Em alguns processadores, o microcó- digo 102d pode ser reprogramável de tal modo que o microcódigo 102d possa ser reprogramado após sua fabricação. Além disso, o(s) proces- sador(es) 102 podem incluir outro hardware que pode ser utilizável por uma ou mais implementações de pontos de interrupção de reprodução de rastreamento baseados em cache usando bits de campos de tags reservados (ou não usados). Este outro hardware, incluindo o(s) buf- fer(s) 102 e o buffer de consulta de tradução (TLB) 102f, será apresen- tado mais adiante na descrição dessas implementações.
[0041] De acordo com as modalidades apresentadas, o depurador 104a faz uso de um cache a fim de detectar quando um acesso à me- mória encontra um ponto de interrupção definido. Quando implemen- tado no software, esse cache poderá ser um cache na memória, tal como um cache armazenado na memória de sistema 103. Quando im- plementado no software, esse cache pode ser um cache de hardware, tal como um ou mais cache(s) 102b. A fim de ilustrar esses conceitos, como uma questão preliminar, a Figura 2 ilustra um exemplo 200 de operação de um cache 201 de acordo com uma ou mais modalidades.
[0042] Em particular, a Figura 2 representa o cache 201 como uma pluralidade de linhas de cache (ou seja, as linhas ilustradas), cada qual incluindo uma pluralidade de campos (ou seja, as colunas ilustradas). Tal como indicado pelas elipses, um cache 201 pode armazenar um grande número de linhas de cache e não está limitado às cinco linhas mostradas. Tal como mostrado, cada linha de cache pode incluir pelo menos uma tag 202 e um bloco de dados 203 (embora colunas adicio- nais possam ser possíveis). Tal como usado nesta descrição e nas rei- vindicações, a tag 202 pode incluir quaisquer metadados de linha de cache (incluindo dados sem endereço) que podem ser usados para identificar uma correspondência de linha de cache para um endereço de memória em questão. A configuração particular do cache 201 pode va- riar dependendo da arquitetura de processador e do modelo de memó- ria, embora no exemplo ilustrado, cada linha de cache inclua uma tag 202 de 64 bits e um bloco de dados de 32 bytes 203. Em geral, a tag 202 armazena pelo menos um endereço de memória (por exemplo, um endereço físico na memória de sistema 103), enquanto que o bloco de dados 203 armazena um valor corrente para esse endereço de memó- ria.
[0043] Quando ocorre uma falha de cache para um endereço de memória em particular durante uma execução no(s) processador(es) 102, esse endereço de memória (e, opcionalmente, metadados adicio- nais) é colocado na tag 202 de uma linha de cache em particular no cache 201, e o valor armazenado nesse endereço de memória na me- mória de sistema 103 (ou o valor armazenado nesse endereço de me- mória em algum outro cache) é colocado no bloco de dados 203 para aquela linha de cache. Esse valor pode mudar durante a execução do programa, e o valor atualizado é enviado de volta para a memória de sistema 103 (ou algum outro cache) quando a linha de cache é desalo- jada. Na Figura 2, o cache 201 mostra cinco exemplos de endereços de memória (por exemplo, 0x040, 0x100, 0x1A0, 0x120, e 0x200) e os va- lores de memória correspondentes.
[0044] Notavelmente, uma única linha de cache poderá "cobrir" uma pluralidade de endereços de memória. Para ilustrar, no cache 201, cada linha de cache armazena 32 bytes de dados que começam no endereço armazenado na tag 202. No entanto, a arquitetura do processador e o modelo de memória poderão permitir que os endereços de memória se- jam especificados de forma mais granular do que todos os 32 bytes. Por exemplo, suponha que, para os fins deste exemplo, apenas a arquite- tura do processador e o modelo de memória permitem que os endereços de memória sejam especificados em uma granularidade de 8 bytes. Isso significa que cada linha de cache no cache 201 realmente “cobre” quatro endereços de memória endereçáveis (cada um correspondendo a um valor de 8 bytes). A fim de ilustrar essa situação, a Figura 2 inclui uma tabela 204 que divide a primeira linha de cache 201 nesses quatro seg- mentos. Tal como mostrado na tabela 204, e presumindo uma arquite-
tura Big Endian, essa linha de cache de fato “cobre” o endereço de me- mória 0x40 (decimal 64) armazenando o valor de 8 bytes 0xFA, o ende- reço de memória 0x48 (decimal 72) armazenando o valor de 8 bytes 0xAB, o endereço de memória 0x50 (decimal 80) armazenando o valor de 8 bytes 0xDF, e o endereço de memória 0,58 (decimal 88) armaze- nando o valor de 8 bytes 0x21.
[0045] Tal como resumidamente mencionado, as modalidades no presente documento utilizam um ou mais bits de endereço "reservados" ou não usados no campo das tags da linha de cache como flags para indicar se uma linha de cache se sobrepõe a um endereço de memória observado. Tal como será explicado em mais detalhe abaixo, esses bits podem ser reservados ou não usados com base em um ou ambos os alinhamentos de memória (ou seja, resultando em bits "baixos" reserva- dos) ou em um processador que usa menos bits para o endereçamento de memória que os fisicamente disponíveis no cache (ou seja, resul- tando em bits “altos” reservados). Tal como será apreciado em vista da descrição a seguir, um bit pode ser "reservado" ou não usado para uso como um flag quando o bit (a) não é usado para resolver exclusivamente se um endereço existe ou não em um cache, ou quando o bit (b) dispo- nível para fazer determinações depois que uma primeira verificação de linha de cache indica uma não correspondência no cache e/ou disponí- vel para fazer determinações se o endereço existe no cache.
[0046] Inicialmente, as Figuras 3A e 3B ilustram exemplos de bits reservados devido ao alinhamento da memória. Deve-se apreciar que, embora muitas memórias sejam granularmente endereçáveis (por exemplo, tal como em incrementos de 8 bytes no exemplo simples acima, embora os presentes processadores possam permitir acessos à memória mais granulares), os caches podem permitir apenas que as tags de linha de cache sejam endereçadas em um nível mais grosso, tal como a cada 32 ou 64 bytes. Sendo assim, um cache é frequentemente referido como sendo "alinhado à memória" em limites de 32 ou 64 bytes. Esse alinhamento da memória pode simplificar as implementações de barramento de cache e memória (ou seja, layouts de hardware físico) como também pode aumentar as velocidades de acesso à memória. Um efeito colateral do alinhamento da memória é que os endereços arma- zenados no campo de tag de uma linha de cache sempre terão um certo número de bits “baixos” que são zero. Em algumas implementações de CPU, esses bits baixos sempre zero não são de fato armazenados no campo de tags. Em algumas implementações de CPU, esses bits baixos sempre zero não são verificados ao pesquisar se um endereço de me- mória existe em uma linha de cache. O número exato desses bits varia com base no número de bytes usados para o alinhamento da memória. A Figura 3A ilustra um exemplo 300a de endereços de memória usando um alinhamento de memória de 64 bytes, enquanto a Figura 3B ilustra um exemplo 300b de endereços de memória usando um alinhamento de memória de 32 bytes.
[0047] Em particular, a Figura 3A inclui uma tabela 301 que ilustra nove exemplos de endereços de memória - expressos nas formas he- xadecimal, binária e decimal - começando no endereço zero e evoluindo para o endereço 512 em incrementos de 64 bytes. Tal como mostrado em negrito na representação binária, ao usar um alinhamento de me- mória de 64 bytes (ou seja, 26), os seis bits mais baixos do endereço são sempre zero. A Figura 3B, por outro lado, inclui uma tabela 302 que ilustra dezessete exemplos de endereços de memória - expressos nas formas hexadecimal, binária e decimal - também começando no ende- reço zero e evoluindo para o endereço 512 em incrementos de 32 bytes. Tal como mostrado em negrito na representação binária, ao usar um alinhamento de memória de 32 bytes (ou seja, 25), os cinco bits mais baixos do endereço são sempre zero. Em ambos os casos, esses bits baixos podem ser tratados como "reservados" em virtude de serem sempre zero devido ao alinhamento da memória.
[0048] Tal como mencionado, um determinado processador poderá usar menos bits para o endereçamento de memória que a arquitetura do processador teoricamente suporta. Por exemplo, embora uma arqui- tetura de CPU possa suportar ponteiro e endereçamento de 64 bits (e até mesmo usar tais endereços de memória virtual), a CPU pode utilizar menos de 64 bits para endereços de memória no cache. Por exemplo, se houver 64 bits fisicamente disponíveis em cada tag de um cache, uma CPU INTEL contemporânea pode de fato utilizar apenas 48 ou 56 desses bits para os endereços de memória, resultando em 16 ou 8 bits altos (respectivamente) que não são usados pelo processador para en- dereçamento. Como outro exemplo, para uma CPU que suporta um má- ximo de 128 GB (ou seja, 237) de memória física e tem um cache ali- nhado de 64 bytes (ou seja, 26) com base nos endereços de memória física, a tag de cache precisaria de pelo menos 31 bits (ou seja, 37-6) para identificar exclusivamente cada linha de cache possível, come- çando do endereço de memória física.
[0049] Em geral, o número de bits usados para a tag de cache é uma decisão de desenho feita para simplificar a implementação do pro- cessador. Dependendo da implementação do cache, quaisquer bits adi- cionais de alta ordem realmente alocados para a tag do cache, mas não exigidos pelo design de implementação do cache para identificar exclu- sivamente o endereço de memória, podem ser sempre tratados como zero ou podem ser totalmente ignorados. Independentemente de seu número, esses bits altos podem também ser tratados como "reservados" em virtude das características reais de endereçamento de memória do processador.
[0050] A Figura 3C ilustra um exemplo 300c de uso de menos bits de tags que os necessários para representar um endereço de memória real, com base na omissão de bits que são sempre zero devido ao ali- nhamento da memória. Em particular, a Figura 3C mostra os possíveis bits de tag usados em uma CPU que suporta um máximo de 128 GB de memória física, e que usa blocos de dados de 64 bytes em suas linhas de cache. Tal como demonstrado na descrição acima, 37 bits são ne- cessários para identificar exclusivamente cada endereço em 128 GB de memória, e os seis bits inferiores desses 37 bits são garantidos como zero quando representam endereços de memória alinhados de 64 bytes. Na Figura 3C, isso é representado pelo endereço 303 que mostra que, quando o bit mais significativo é contado como bit 36 e o bit menos sig- nificativo é contado como bit 0, os 31 bits do bit 36 ao bit 6 (indicados como x) são os bits "significativos" em um endereço de linha de cache, enquanto os seis bits dos bits 5 ao bit 0 (indicados como z) são garanti- dos como zero no endereço de linha de cache. Sendo assim, as imple- mentações de cache podem escolher não incluir os seis bits inferiores (ou seja, os bits 5 a 0).
[0051] Na Figura 3C, os endereços 304 e 305 mostram, cada um, a mesma representação binária de um endereço de linha de cache. Tal como mostrado no endereço 304, ao considerar apenas os 31 bits “sig- nificativos” desse endereço de linha de cache, esses bits podem ser re- presentados em hexadecimal como 0xC1. Tal como mostrado no ende- reço 305, no entanto, ao considerar todos os bits deste endereço de linha de cache, o endereço é representado em hexadecimal como 0x30
40. A Tabela 306 mostra, em sua primeira linha, que a tag de uma linha de cache pode armazenar apenas esses 31 bits “significativos” (ou seja, 0xC1), em vez de todos os 37 bits (ou seja, 0x30 40) do endereço de linha de cache. A Tabela 306 também mostra algumas outras represen- tações hexadecimais de endereços de linha de cache, juntamente com seus "bits significativos" correspondentes.
[0052] No contexto do cache 301 da Figura 3 e das reservas de bits de endereço acima descrito, a Figura 4 ilustra um exemplo 400 de ope- ração de pontos de interrupção baseados em cache usando bits de cam- pos de tags reservados. Inicialmente, o exemplo 400 inclui um exemplo de cache 401a, que corresponde ao cache 201 da Figura 2. Notavel- mente, cada valor mostrado no cache 401a é idêntico ao valor mostrado no cache 201, exceto que os valores na tag 402 do cache 401a são expressos em binário, enquanto os valores na tag 202 do cache 201 foram expressos em hexadecimal. A Figura 4 novamente presume uma arquitetura Big Endian.
[0053] O exemplo 400 também inclui um cache de 401b, que repre- senta o estado do cache 401a em um momento posterior, após dois pontos de interrupção serem adicionados a uma coleção 404a que com- preende endereços com pontos de interrupção. Tal como mostrado na coleção 404a, esses pontos de interrupção incluem os endereços 0x048 e 0x120, os quais correspondem aos dados já no cache 401b. Por exemplo, tal como descrito com relação à Figura 2, o endereço 0x048 é coberto pela primeira linha de cache, que armazena 32 bytes come- çando no endereço 0x040, e o endereço 0x120 é coberto pela quarta linha de cache. Devido à adição desses pontos de interrupção, no cache 401b um bit inferior reservado 405 na primeira linha de cache é definido como 1. Este bit serve como um flag para indicar que a linha de cache cobre um endereço de memória com um ponto de interrupção. Similar- mente, no cache 401b, um bit inferior reservado 406 na quarta linha de cache foi definido como 1, uma vez que o seu endereço (0x120) também está na coleção 404a. Embora o bit mais baixo em cada endereço tenha sido usado como um flag neste exemplo, deve-se apreciar que imple- mentações poderão usar qualquer bit reservado como um flag.
[0054] A Figura 5 ilustra um fluxograma 500 de um método 500 para a configuração de um cache para detecção de pontos de interrupção, cujo método poderá, por exemplo, ser usado para definir os bits de flag
405 e 406 no cache 401b. O método 500 pode ser executado, por exem- plo, pelo depurador 104a (por exemplo, em uma implementação de sof- tware), ou pode ser executado pelo(s) processador(es) 102 (por exem- plo, em uma implementação de hardware).
[0055] O método 500 começa na etapa 501, na qual há uma solici- tação para definir um ponto de interrupção. A etapa 501 pode compre- ender a identificação de um endereço de memória que deve ser moni- torado. Por exemplo, com base em uma entrada de usuário no depura- dor 104a, um endereço correspondente a um elemento de código po- derá ser identificado para definir um ponto de interrupção, ou um ende- reço correspondente a um elemento de dados poderá ser identificado para definir um ponto de controle. No contexto da Figura 4, por exemplo, o endereço 0x048 ou 0x120 pode ser identificado como um endereço de memória a ser monitorado.
[0056] O método 500 segue para a etapa 502, na qual o endereço identificado é adicionado a uma coleção de monitoramento (ou seja, a uma coleção de endereços monitorados). Por exemplo, os endereços 0x048 e/ou 0x120 podem ser adicionados à coleção 404a.
[0057] O método 500 em seguida prossegue para a etapa 503, na qual é determinado se existe(m) linha(s) de cache sobreposta(s) para o endereço identificado. Dito de outra forma, a etapa 503 pode compre- ender, com base pelo menos na identificação do endereço de memória a ser monitorado, a determinação se uma linha de cache sobreposta ao endereço de memória já existe ou não em um cache. Tal como acima descrito, essas linhas de cache existem para os endereços 0x048 e 0x120. Sendo assim, quando o método 500 é executado para cada um desses endereços, o método 500 segue para a etapa 504, na qual os bits de flag para essas linhas de cache são definidos no campo de tag de cada linha de cache (isto é, conforme refletido no cache 401b).
Quando não existe nenhuma linha de cache, o método 500 poderá fina- lizar na etapa 506, sem definir quaisquer bits de flag (tal como mos- trado). No entanto, tal como mostrado na etapa 505, será possível, op- cionalmente, processar uma falha de cache no endereço identificado e definir um flag na tag da linha de cache recém-importada.
[0058] Por exemplo, suponha que haja uma solicitação para adicio- nar um novo endereço 0x1E0 como um ponto de interrupção. Ao exe- cutar o método 500 no endereço 0x1E0, o endereço será adicionado à coleção na etapa 502 (ou seja, tal como mostrado na coleção 404b). Em seguida, na etapa 503, será determinado que nenhuma linha de cache sobreposta existe para o endereço 0x1E0. O método 500 poderá sim- plesmente finalizar na etapa 506, ou o método 500 poderá executar uma falha de cache no endereço 0x1E0 e definir o flag na linha de cache importada na etapa 505. O desempenho da etapa 505 é refletido no cache 401c, sendo que a quinta linha de cache (correspondente ao en- dereço 0x200) é desalojada e substituída por uma nova linha de cache correspondente ao endereço 0x1E0, com o flag 407 definido na tag da linha de cache.
[0059] Quando o método 500 define bits de flag nas linhas de cache dos campos de tags, esses bits de flag poderão ser reservados com base no campo das tags que contém mais bits que o necessário para endereçar um espaço de endereço completo acessível por um ou mais processadores e/ou poderão ser reservados com base no alinhamento da memória.
[0060] No contexto dos caches 401b e 401c, que agora são confi- gurados com flags de pontos de interrupção, e no contexto das coleções 404a e 404b, a Figura 6 ilustra um fluxograma de um método exemplar 600 para a realização da detecção de pontos de interrupção através de um cache. O método 600 pode ser executado, por exemplo, por um de- purador 104a (por exemplo, em uma implementação de software), ou pode ser executado pelo(s) processador(es) 102 (por exemplo, em uma implementação de hardware).
[0061] O método 600 se inicia na etapa 601, no qual é detectada a ocorrência de um acesso à memória. Esta poderá ser qualquer opera- ção de acesso à memória para um endereço de memória específico, mas poderá ser, mais especificamente, uma operação de leitura ou gra- vação para o endereço de memória. Depois de o acesso à memória ser detectado, o método 600 prosseguirá para a etapa 602, que determina se há uma correspondência de entrada de cache para o acesso à me- mória. Dito de outra maneira, a etapa 602 pode compreender, com base pelo menos na detecção da ocorrência do acesso à memória, a identifi- cação se qualquer a linha de cache do cache corresponde a um ende- reço associado ao acesso à memória.
[0062] Por exemplo, suponha que o acesso à memória seja para o endereço 0x100, que corresponde à segunda linha dos caches 401b/401c. Nesse caso, a tag desta segunda linha de cache (ou seja, 0b0001 0000 0000 ou 0x100) corresponderá ao endereço de acesso à memória (ou seja, 0x100). Uma vez havendo uma correspondência, o método 600 segue para a etapa 603, na qual é determinado que ne- nhum ponto de interrupção foi atingido. Em outras palavras, a etapa 603 pode compreender, quando uma linha de cache não corresponde ao endereço de acesso à memória, a determinação de que nenhum ponto de interrupção foi encontrado.
[0063] Em um segundo exemplo, suponha, em vez disso, que o acesso à memória seja para o endereço 0x120, que, tal como descrito, é armazenado na quarta linha dos caches 401b/401c. No entanto, mesmo que o endereço 0x120 esteja de fato armazenado dentro dos caches 401b/401c, o endereço de memória solicitado não correspon- derá a nenhuma tag dos caches 401b/401c. Isso ocorre porque a confi- guração do bit de flag na segunda linha de cache alterou o valor da tag dessa linha de cache para 0x121, ao invés de para 0x120.
[0064] Uma vez que, neste segundo exemplo, não há correspon- dência para o endereço 0x120, o método 600 prossegue para a etapa 604, na qual é determinado se existe uma correspondência quando os bits de flag são ignorados. Dito de outra forma, a etapa 604 pode com- preender, quando nenhuma linha de cache corresponde ao endereço do acesso à memória, a identificação se alguma linha de cache corres- ponde ou não ao endereço associado ao acesso à memória quando um ou mais bits de flag são ignorados. Por exemplo, os bits de flag em cada tag dos caches 401b/401c podem ser assumidos como zero ou poderão, de outra forma, ser mascarados, e a verificação de uma correspondên- cia poderá ser repetida. Nesse caso, a tag da segunda linha de cache será, portanto, presumida como 0x120 quando os bits de flag são igno- rados, os quais, portanto, corresponderão ao endereço associado ao acesso à memória.
[0065] Uma vez que agora há uma correspondência, o método 600 prossegue para a etapa 605, que verifica se há um ponto de interrupção atingido. Dito de outra forma, a etapa 605 pode compreender, quando uma linha de cache não corresponde ao endereço do acesso à memória quando o um ou mais bits de flag são ignorados, a execução de uma verificação se um ponto de interrupção foi encontrado. Nesse caso, a verificação de um atingimento de ponto de interrupção poderá incluir a comparação do endereço de memória acessado (incluindo qualquer en- dereço de memória coberto) com os endereços listados na coleção 404a/404b. Sendo assim, o método 600 poderá incluir a determinação se algum endereço a partir de uma coleção de monitoramento se sobre- põe a uma pluralidade de endereços de memória cobertos pela linha de cache. Uma vez que o endereço 0x120 está de fato na coleção 404a/404b, um ponto de interrupção é atingido.
[0066] Em um terceiro exemplo, suponha que o acesso à memória seja para o endereço 0x048. Os dados neste endereço existem na pri- meira linha dos caches 401b/401c, que tem o endereço 0x040 na tag (por exemplo, tal como apresentado com relação à tabela 204 da Figura 2). Devido ao alinhamento de memória de 32 bytes dos caches 401b/401c, neste segundo exemplo, a etapa 602 usa o endereço 0x040 como o endereço que está "associado" ao acesso à memória, mesmo que o endereço original que é acessado seja o 0x048. De maneira simi- lar ao segundo exemplo, mesmo que o endereço 0x040 seja de fato armazenado no cache 401b, o endereço de memória solicitado não cor- responderá a nenhuma tag dos caches 401b/401c. Isso ocorre porque a configuração do bit de flag na primeira linha de cache altera o valor da tag dessa linha de cache para 0x041, ao invés de para 0x040.
[0067] Uma vez que neste terceiro exemplo não há correspondên- cia para o endereço 0x040, o método 600 prossegue para a etapa 604, na qual é determinado se há uma correspondência quando os bits de flag são ignorados. Nesse caso, a tag da segunda linha de cache será agora presumida como 0x040 quando os bits de flag são ignorados, os quais agora correspondem ao endereço associado ao acesso à memó- ria. Uma vez que agora existe uma correspondência na etapa 604, o método 600 segue para a etapa 605, a qual verifica se há um ponto de interrupção atingido. Mais uma vez, a verificação de uma ocorrência de acerto de ponto de interrupção poderá incluir a comparação do ende- reço de memória acessado (incluindo qualquer endereço de memória coberto) com os endereços listados na coleção 404a/404b. Embora o endereço 0x040 não esteja na coleção 404a/404b, o endereço coberto 0x048 está. Uma vez que o endereço 0x048 foi o endereço original- mente acessado, um ponto de interrupção é atingido.
[0068] Em um quarto exemplo, suponha que o acesso à memória é para o endereço 0x1E0 e que o método 600 é executado contra o cache 401b e a coleção 404b (isto é, em uma situação na qual o método 500 finaliza na etapa 506 sem realizar a etapa 505). Nesse caso, o método 600 segue para a etapa 604, na qual não haverá nenhuma correspon- dência, mesmo quando o(s) bit(s) de flag é/são ignorado(s). Sendo as- sim, o método 600 continuará a processar uma falha de cache na etapa 606 (ou seja, importará uma linha de cache para o cache). Dito de outra forma, a etapa 606 pode compreender, quando nenhuma linha de cache corresponde ao endereço associado ao acesso à memória quando um ou mais bits de flag são ignorados, o processamento de uma falha de cache.
[0069] Com relação ao processamento da falha de cache, o método 600 poderá executar uma etapa 607 que inclui a execução de uma "ve- rificação de linha de cache de ponto de interrupção" (por exemplo, de- terminando se uma linha de cache importada para o cache com base no processamento da falha de cache se sobrepõe ou não a algum ende- reço de uma coleção de monitoramento) e/ou a configuração em um flag na linha de cache recém-importada. O resultado da etapa 607 poderá ser o cache 401c, no qual a quinta linha de cache corresponderá ao endereço 0x1E0 e tem o flag 407 definido. Ao realizar uma verificação de linha de cache de ponto de interrupção, a etapa 607 poderá comparar o endereço de memória acessado (incluindo qualquer endereço de me- mória coberto) com os endereços listados na coleção 404b a fim de identificar se um ponto de interrupção foi encontrado. Ao executar uma verificação de linha de cache de ponto de interrupção, a etapa 607 de- terminará quais endereços estão na coleção de monitoramento. As im- plementações devem sempre verificar toda a coleção de endereço, ou poderão incluir otimizações de hardware e/ou software que evitem a ve- rificação de endereços na coleção quando linhas de cache correspon- dentes já se encontram no cache. Por exemplo, o software poderá im- plementar essa otimização usando duas coleções (por exemplo, uma com a lista de monitoramento completa, e outra com apenas os endere- ços que não estão no cache), ou o hardware poderá implementar essa otimização usando os flags da coleção (por exemplo, um flag para cada endereço, o qual é usado para indicar se o endereço está no cache ou não).
[0070] Com base nesse quarto exemplo, deve-se apreciar que os pontos de interrupção poderão ser detectados pelo método 600, mesmo quando a etapa 505 é omitida no método 500, ou até mesmo quando uma linha de cache que cobre um endereço em uma coleção de pontos de interrupção é desalojada depois de o seu flag ser definido. Por con- seguinte, as implementações podem optar por omitir a etapa 505 no método 500 a fim de evitar o processamento de falhas de cache poten- cialmente desnecessárias.
[0071] Notavelmente, embora apenas um único bit de flag seja usado nos exemplos acima (ou seja, para sinalizar se uma linha de ca- che se sobrepõe ou não a um endereço que está em uma coleção de endereços monitorada), algumas implementações poderão usar vários bits de flag a fim de prover uma funcionalidade adicional. Por exemplo, um ou mais bits reservados poderão ser usados para especificar um tipo de operação de acesso à memória que acionaria um atingimento de ponto de interrupção. Sendo assim, por exemplo, mais bits reservados poderão ser usados para sinalizar se o ponto de interrupção correspon- dente a uma linha de cache deve ser ou não uma interrupção na grava- ção, uma interrupção na leitura, uma interrupção no acesso, etc. Nesse caso, qualquer uma das etapas acima que realizam uma verificação de linha de cache de ponto de interrupção (ou seja, as etapas 605 e 607) poderá também usar esses bits reservados adicionais no sentido de de- terminar se o tipo de acesso à memória deverá acionar um ponto de interrupção. Além disso, qualquer uma das etapas acima que definem um flag (por exemplo, as etapas 504 e 607) poderá compreender a de- finição de um ou mais flags no campo de tags da linha de cache que indicam um tipo de ponto de interrupção, cujo tipo de ponto de interrup- ção poderá compreender uma interrupção na gravação, uma interrup- ção na leitura, ou uma interrupção no acesso.
[0072] Em algumas implementações, é feita uma decisão quanto a quais bits em cada tag podem ser usados como bits reservados no mo- mento da inicialização do sistema, com base nas características do hardware físico do sistema de computador 101. Por exemplo, ao se usar bits baixos com base em um alinhamento de memória, o número de bits que podem ser reservados poderá ser identificado com base nas carac- terísticas físicas do(s) cache(s) 102b (por exemplo, se os mesmos usam um alinhamento de endereço de memória de 32 bytes ou 64 bytes). De acordo com outra modalidade, ao se usar bits altos com base em uma série de bits de endereço que são de fato usados para um endereça- mento, essa modalidade poderá determinar uma quantidade de memó- ria física de sistema 103 que é instalada. Uma vez que o(s) processa- dor(es) 102 não pode(m) endereçar fisicamente mais memória do que a instalada, mas é/são projetado(s) para suportar pelo menos a quanti- dade máxima de memória daquela CPU na camada de cache, vários bits altos poderão ser reservados com base no número de bits que serão necessários para endereçar a memória física instalada. Isso poderá re- sultar em mais bits altos disponíveis do que simplesmente confiar no número de bits de endereço que são utilizados por padrão pelo proces- sador (por exemplo, 48 ou 56, tal como acima descrito) para um ende- reçamento de memória física. Sendo assim, deve-se apreciar que nos métodos 500 e 600, os bits de flag podem ser reservados no momento da inicialização com base em uma quantidade de memória física dispo- nível. Deve-se observar que os bits reservados não precisam ser usa-
dos apenas para fins de detecção de ponto de interrupção. Mais propri- amente, esses bits poderão ser usados, por exemplo, como parte dos mecanismos de rastreamento baseados em cache usados pelo depura- dor 104a. Em algumas unidades CPU, pelo menos uma das seguintes condições pode ser verdadeira: (a) os bits baixos sempre zero não são armazenados na tag de cache, (b) os bits baixos sempre zero não são disponíveis para fins de comparação de correspondência de entrada de cache, (c) os bits de endereço não utilizados por padrão pelo processa- dor para endereçamento de memória física não são armazenados na tag de cache, e (d) os bits de endereço não utilizados por padrão pelo processador para endereçamento de memória física não são disponí- veis para fins de comparação de correspondência de entrada de cache. Mesmo em uma CPU na qual todas as quatro condições acima são ver- dadeiras, quando a CPU é configurada para usar uma memória inferior a um limite (por exemplo, menos de ½ ou ¼ da memória física máxima que a CPU foi projetada para endereçar), pelo menos um bit disponível para fins de comparação de correspondência de entrada de cache e armazenado na tag se torna disponível para uso como o flag. Este limite pode ser detectado, devido a uma quantidade de memória instalada para a CPU, por um sistema BIOS que limita a memória exposta à CPU em menos que a quantidade instalada, ou por uma instrução provida para a CPU indicando uma memória máxima a usar (mesmo que mais memória esteja disponível para a CPU).
[0073] Ao longo de todo o presente documento, foi feita referência a coleções de endereços de memória observados (por exemplo, as co- leções 404a e 404b). Embora, em implementações de software, uma coleção possa ser armazenada em várias estruturas de dados na me- mória de sistema 103, as implementações de hardware poderão se be- neficiar das coleções armazenadas no(s) processador(es) 102 em si, ou das que são expostas nos mecanismos de acesso à memória existen- tes. Por exemplo, alguns processadores implementam protocolos de co- erência de cache (CCP) que usam um diretório. Nesses processadores, essas coleções podem ser armazenadas no diretório do protocolo CCP. De maneira alternativa, algumas implementações de processador pode- rão incluir buffers em processador (por exemplo, o(s) buffer(s) 102e) que poderão ser usados para armazenar essas coleções. Por exemplo, al- guns mecanismos de rastreamento baseados em hardware podem in- cluir buffers em processador que poderão temporariamente armazenar dados de rastreamento antes de os mesmos serem gravados no(s) ar- quivo(s) de rastreamento 104d. Algumas implementações poderão tam- bém usar esses buffers no sentido de armazenar essas coleções de en- dereços. De acordo com algumas implementações, uma parte do(s) ca- che(s) 102b poderá até mesmo ser usada para tais buffers. Tal como acima apresentado, deve-se apreciar que, nos métodos 500 e 600, a coleção de endereços monitorados pode ser armazenada em uma me- mória em processador, por exemplo, em um diretório de protocolo CCP ou em qualquer outro buffer em processador 102e.
[0074] Outras implementações podem utilizar o buffer TLB 102f do(s) processador(es) 102 a fim de acessar dados de coleta de ende- reço. Tal como será apreciado por aqueles versados na técnica, um buf- fer TLB de modo geral faz parte de uma unidade de gerenciamento de memória do processador e geralmente armazena traduções recentes entre endereços de memória virtual (por exemplo, tal como observado a partir de processos em execução no(s) processador(es) 102) para en- dereços de memória física na memória de sistema 103 (por exemplo, que são de fato usados pelo(s) processador(es) 102, inclusive pelo(s) cache(s) 102b). Quando o(s) processador(es) 102 acessam um ende- reço de memória física que não possui um buffer TLB de entrada, ocorre uma falha de tabela de página, o que faz com que uma ou mais tabelas de página na memória de sistema 103 sejam acessadas a fim de locali- zar o mapeamento virtual para físico apropriado. As implementações podem armazenar a coleção de endereços na memória de sistema 103 e indicar em cada entrada de tabela de páginas se algum endereço de memória na tabela de páginas está incluído ou não na coleção de en- dereços. Desta maneira, as entradas de tabelas de páginas (que são armazenadas no buffer TLB 102f) poderão ser usadas para decidir se a coleção de endereços pode conter ou não uma entrada relevante para um determinado acesso à memória. Sendo assim, no método 600, a execução da verificação para saber se um ponto de interrupção foi en- contrado ou não poderá compreender a consulta de um buffer TLB a fim de determinar se uma tabela de páginas correspondente ao endereço de memória contém algum endereço de memória monitorado. Então, quando uma tabela de páginas correspondente ao endereço de memó- ria contém um endereço de memória monitorado, o método 600 poderá incluir a determinação se algum endereço de uma coleção de monitora- mento se sobrepõe a uma pluralidade de endereços de memória cober- tos pela linha de cache.
[0075] Quando tabelas de página de vários níveis forem usadas, os dados antecedentes podem ser armazenados apenas em folhas, o que resultaria em um tempo de execução constante. De maneira alternativa, os dados antecedentes poderão ser armazenados apenas nas tabelas de página de nível superior (por exemplo, indicando que pelo menos uma tabela de página de nível inferior contém um endereço na coleção de endereços), o que poderá ser feito mais rapidamente do que arma- zenar apenas em folhas, mas que poderia levar a mais falsos positivos (ou seja, a pesquisas de coleção de endereços em situações nas quais o endereço acessado não está de fato na coleção). Sendo assim, a etapa 502 do método 500 poderá incluir a configuração de uma entrada de tabela de página para uma tabela de página de modo a indicar que uma ou mais dentre as tabelas de página ou que uma tabela de página filha contém um endereço de memória monitorado.
[0076] Algumas implementações podem interoperar com mecanis- mos de detecção de ponto de interrupção baseados em hardware exis- tentes, por exemplo, com os registradores de depuração de um proces- sador (tais como, os registradores DR0 a DR3 das arquiteturas INTEL). Essas implementações oferecem os benefícios da detecção de pontos de interrupção baseados em cache (por exemplo, um número virtual- mente ilimitado de pontos de interrupção com baixos overheads de de- tecção), e ao mesmo tempo preservam a compatibilidade com o sof- tware existente (por exemplo, com um software que usa os registradores de depuração de um processador). Tal como será apreciado por aque- les versados na técnica, muitas arquiteturas de processador incluem hardware de “comparação” rápida que compara um endereço de memó- ria que foi acessado por uma instrução obsoleta com o endereço de memória que foi colocado em um registrador de depuração correspon- dente. Quando há uma correspondência, um ponto de interrupção atin- gido poderá ser sinalizado para o software de depuração (por exemplo, por meio de um registrador, uma interrupção, etc.). Implementações po- derão usar esse mesmo processo no sentido de sinalizar quando um ponto de interrupção é detectado por meio de um cache. Por exemplo, assim que um ponto de interrupção baseado em cache é detectado, im- plementações poderão inserir o endereço de memória do ponto de in- terrupção em um registrador apropriado (por exemplo, nos registradores DR0 a DR3 das arquiteturas INTEL), e sinalizar a ocorrência de um ponto de interrupção usando os mecanismos existentes (por exemplo, por meio de um registrador, um interruptor, etc.). Assim sendo, o sof- tware recebe uma notificação do ponto de interrupção por meio de me- canismos tradicionais, mas não fica limitado à quantidade de pontos de interrupção que podem ser observados com base no número de regis- tradores de depuração disponíveis. De maneira alternativa, uma imple- mentação poderá capturar a configuração do correspondente registra- dor de depuração (que pode não existir) e implementar a funcionalidade do registrador de depuração totalmente por meio de uma detecção de pontos de interrupção baseados em cache.
[0077] De acordo com algumas implementações, um bit de flag é verificado no tempo de retirada da instrução, ao invés de em resposta à determinação de que um endereço não tem uma correspondência em um cache (por exemplo, a etapa 604 do método 600). Por exemplo, a Figura 7 ilustra um fluxograma de um método exemplar 700 para a rea- lização de uma detecção de ponto de interrupção no tempo de retirada de instrução. O método 700 começa na etapa 701, na qual uma instru- ção acessa um endereço de memória. Por exemplo, durante a execução do aplicativo 104c no(s) processador(es) 102 com base no(s) arquivo(s) de rastreamento 104d, uma unidade de processamento 102a poderá executar uma instrução do aplicativo 104c que acessa um endereço de memória.
[0078] Com base no acesso à memória, o método 700 prossegue para a etapa 702, a qual verifica se há uma correspondência de entrada de cache para o acesso à memória quando os bits de flag são ignora- dos. Por exemplo, o(s) processador(es) 102 pode(m) verificar o(s) ca- che(s) 102b no sentido de determinar se há uma correspondência de linha de cache para o acesso à memória, presumindo que os flags não estão definidos (por exemplo, são assumidos como zero). Embora não mostrado na Figura 7, o(s) processador(es) 102 pode(m) realizar dife- rentes ações dependendo do resultado da verificação na etapa 702, tais como ler os dados de uma linha de cache já no(s) cache(s) 102b (ou seja, quando houver correspondência) ou processar uma falha de cache no sentido de produzir um influxo dos dados de linha de cache apropri- ados para o(s) cache(s) 102b (ou seja, quando não houver correspon- dência). Independentemente de os dados da linha de cache apropriados já estarem ou não no(s) cache(s) 102b, ou se uma falha de cache foi processada ou não, os processadores 102 poderão iniciar a execução da instrução com base nos dados de linha de cache (por exemplo, inici- ando a execução de micro operações correspondentes à instrução).
[0079] Tal como mostrado na etapa 703, o método 700 pode incluir uma etapa de armazenamento de um bit de flag. Por exemplo, quando há uma correspondência na etapa 702, o(s) processador(es) 102 po- derá/poderão armazenar o bit de flag (quer o mesmo tenha sido definido ou não) de uma tag de linha de cache em um registrador, como parte de uma micro operação, ou em qualquer outro local acessível no mo- mento de retirada de instrução. Se não houver correspondência na etapa 702, o(s) processador(es) 102 poderá/poderão definir o estado de bit de flag em uma tag de linha de cache como parte do processamento de uma falha de cache. Em seguida, o(s) processador(es) 102 po- derá/poderão armazenar esse bit de flag (quer o mesmo tenha sido de- finido ou não) da tag de linha de cache em um registrador, como parte de uma micro operação, ou em qualquer outro local acessível no mo- mento de retirada de instrução.
[0080] Mais adiante, durante o tempo de retirada de instrução, a etapa 704 determina se o bit de flag foi definido na linha de cache. Por exemplo, o(s) processador(es) 102 poderá/poderão acessar o bit de flag na linha de cache a fim de determinar se o mesmo foi definido, ou po- derá/poderão acessar um bit de flag de um local no qual o mesmo foi salvo na etapa 703 (caso o mesmo tenha sido definido). Com base no resultado da etapa 704, o método 700 poderá finalizar na etapa 706 (ou seja, caso o bit de flag não tenha sido definido), ou poderá processar um ponto de interrupção de depuração na etapa 705 (ou seja, caso o bit de flag tenha sido definido). O processamento de um ponto de interrup- ção de depuração na etapa 705 pode incluir a definição de um estado de um registrador de depuração, tal como acima descrito.
[0081] Notavelmente, tal como será apreciado por aqueles versa- dos na técnica, o(s) cache(s) 102b de modo geral compreendem caches de múltiplos níveis tendo, por exemplo, uma camada L1 que é apoiada por uma camada L2, a qual, por sua vez, poderá ser apoiada por uma camada L3 (e assim por diante). Em tais caches de múltiplos níveis, à medida que as linhas de cache se movem entre as camadas, o estado dos bits de flag poderá se mover com as linhas de cache. Sendo assim, por exemplo, quando o cache 401b representa um cache L1, e a pri- meira linha de cache se move para um cache L2, o estado do flag 405 poderá permanecer definido na instância da linha de cache que está no cache L2. De maneira alternativa, os bits de flag podem ser usados ape- nas em um subconjunto de níveis de cache (por exemplo, apenas no nível L1).
[0082] Algumas modalidades podem ser responsáveis por tipos adi- cionais de dados em cache (ou seja, além da localização da memória em cache) que não são externamente visíveis. Por exemplo, alguns pro- cessadores podem manter um cache de instruções de processador de- codificadas (ou seja, o seu correspondente microcódigo). Nessas situa- ções, quando uma instrução é decodificada, o processador poderá veri- ficar se a instrução ainda está no cache de código (e verificar o bit de flag) no sentido de detectar um ponto de interrupção. De maneira alter- nativa, uma sequência de microcódigos poderá ser modificada no sen- tido de conter o fato de que um ponto de interrupção poderá ser atingido, evitando a necessidade de consultar o cache.
[0083] Por conseguinte, pelo menos algumas modalidades promo- vem uma detecção de pontos de interrupção baseados em cache de uma maneira a evitar o desalojamento das linhas de cache sobrepostas aos endereços de memória que estão sendo observados, e pelo menos algumas modalidades promovem uma detecção de pontos de interrup- ção baseados em cache de uma maneira a evitar o influxo de cache em eventos de linhas de cache sobrepostas a endereços de memória que estão sendo observados. Em particular, ao invés de desalojar uma linha de cache que se sobrepõe a um endereço de memória observado, es- sas modalidades poderão utilizar um ou mais bits de endereço “reser- vados” ou correntemente não usados no campo de tag da linha de cache a fim de sinalizar que a linha de cache se sobrepõe a um endereço de memória observado. Isso não apenas reduz a quantidade de falhas de cache e/ou influxos de cache que ocorrem, mas também permite que verificações de linha de cache de ponto de interrupção eficientes sejam realizadas quando ocorre um acesso à memória subsequente envol- vendo a linha de cache (ou seja, ao invés de apenas durante uma falha de cache). Em particular, ao invés de precisar reimportar a linha de ca- che (um influxo de cache) em um subsequente acesso à memória de- vido a uma falha de cache, uma eficiente verificação de linha de cache de ponto de interrupção poderá ser realizada quando houver um acerto em qualquer linha de cache que tenha um bit reservado definido no campo de tag da linha de cache. Sendo assim, as modalidades da pre- sente invenção evitam desalojamentos de linhas de cache para fins de detecção de pontos de interrupção e adicionam um novo mecanismo de detecção de pontos de interrupção eficaz para as linhas de cache exis- tente - ambas as situações podendo grandemente reduzir o overhead causado por um depurador para a detecção de pontos de interrupção durante uma reprodução de rastreamento.
[0084] A operação dessas vantagens sobre as soluções de detec- ção de pontos de interrupção com base em cache da técnica anterior pode ser observada no contexto da Figura 4. Por exemplo, com referên- cia aos caches 401a e 401b e à coleção 404a, ao configurar um acesso à interrupção para o valor de oito bytes no endereço 0x120, as soluções da técnica anterior desalojarão a quarta linha de cache na tag 0x120 do cache 401a. As presentes modalidades, no entanto, evitam fazer esse desalojamento e, em vez disso, modificam a tag da linha de cache para definir o bit de flag 406, resultando na tag 0x121 do cache 401b.
[0085] Em seguida, suponha que uma instrução de código em exe- cução acesse o endereço 0x128. Embora esse endereço não esteja na coleção 404a, o mesmo é “coberto” pela linha de cache endereçada 0x120. Uma vez que a solução da técnica anterior desaloja a quarta linha ao configurar o ponto de interrupção para o endereço 0x120, esse acesso resultará em uma falha de cache e em um influxo de cache, se- guido de um desalojamento de cache depois de a instrução ser retirada. As presentes modalidades, no entanto, mantiveram a linha de cache ao configurar o ponto de interrupção. Sendo assim, embora haja uma falha de endereço inicial devido à configuração do flag 406, a linha de cache será mais adiante descoberta com o flag definido (ou seja, a etapa 604). Assim sendo, nas presentes modalidades, a instrução pode ser retirada sem a necessidade de realizar nenhum influxo de cache.
[0086] Finalmente, suponha que uma outra instrução de código em execução acesse o endereço 0x120 - que se encontra na coleção 404a. Mais uma vez, a solução da técnica anterior resultará em uma outra fa- lha de cache e influxo de cache. As presentes modalidades, no entanto, novamente apresentarão uma falha de endereço inicial devido à confi- guração do flag 406, mas a linha de cache será posteriormente desco- berta com o flag definido (ou seja, a etapa 604). Sendo assim, nas pre- sentes modalidades, a instrução poderá ser mais uma vez retirada sem a necessidade de realizar nenhum influxo de cache.
[0087] Embora a matéria da presente invenção tenha sido descrita em uma linguagem específica com relação a características e/ou a eta-
pas de método, deve-se entender que a matéria definida nas reivindica- ções em anexo não necessariamente se limita às características ou às etapas acima descritas, ou à ordem das etapas acima descritas. Mais propriamente, as características e etapas descritas são apresentadas como formas exemplares de implementação das reivindicações.
[0088] A presente invenção pode ser incorporada de outras manei- ras específicas sem se afastar de seu espírito ou características essen- ciais. As modalidades descritas devem ser consideradas, em todos seus aspectos, tão somente como ilustrativas e não restritivas. O âmbito de aplicação da presente invenção é, portanto, indicado pelas reivindica- ções em apenso, e não pelo relatório descritivo acima. Todas as altera- ções que se encontram dentro do significado e da faixa de equivalência das reivindicações devem ser abrangidas dentro de seu âmbito de apli- cação.
Claims (15)
1. Método, implementado em um sistema de computador que inclui um ou mais processadores, para a execução de detecção de pon- tos de interrupção através de um cache, caracterizado pelo fato de que compreende as etapas de: - detectar uma ocorrência de um acesso à memória; e - com base pelo menos na detecção da ocorrência do acesso à memória, identificar se alguma linha de cache do cache corresponde a um endereço associado ao acesso à memória, e - quando uma linha de cache corresponde ao endereço associado ao acesso à memória, determinar que nenhum ponto de in- terrupção foi encontrado; ou - quando nenhuma linha de cache corresponde ao en- dereço associado ao acesso à memória, identificar se alguma linha de cache corresponde ao endereço associado ao acesso à memória quando um ou mais bits de flag são ignorados, e - quando uma linha de cache corresponde ao en- dereço associado ao acesso à memória quando o um ou mais bits de flag são ignorados, executar uma verificação se um ponto de interrupção foi encontrado; ou - quando nenhuma linha de cache corresponde ao endereço associado ao acesso à memória quando o um ou mais bits de flag são ignorados, processar uma falha de cache.
2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que compreende ainda, quando nenhuma linha de cache corresponde ao endereço associado ao acesso à memória quando um ou mais bits de flag são ignorados, determinar se uma linha de cache importada para o cache com base no processamento da falha de cache se sobrepõe a qualquer endereço de uma coleção de monitoramento.
3. Método, de acordo com a reivindicação 2, caracterizado pelo fato de que compreende ainda, quando a linha de cache importada para o cache se sobrepõe a um endereço da coleção de monitoramento, definir um bit de flag na linha de cache.
4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a execução da verificação se um ponto de interrupção foi encontrado compreende a determinação se algum endereço de uma coleção de monitoramento se sobrepõe a uma pluralidade de endereços de memória cobertos pela linha de cache.
5. Método, de acordo com a reivindicação 4, caracterizado pelo fato de que a coleção de monitoramento é armazenada na memória de sistema.
6. Método, de acordo com a reivindicação 4, caracterizado pelo fato de que a coleção de monitoramento é armazenada em uma memória de processador.
7. Método, de acordo com a reivindicação 6, caracterizado pelo fato de que a memória de processador compreende um diretório de protocolo de coerência de cache.
8. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a execução da verificação se um ponto de interrupção foi encontrado compreende a consulta de um buffer de consulta de tra- dução a fim de determinar se uma tabela de página correspondente ao endereço de memória contém algum endereço de memória monitorado.
9. Método, de acordo com a reivindicação 8, caracterizado pelo fato de que compreende ainda, quando a tabela de página corres- pondente ao endereço de memória contém um endereço de memória monitorado, determinar se algum endereço de uma coleção de monito- ramento se sobrepõe a uma pluralidade de endereços de memória co- bertos pela linha de cache.
10. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que a execução da verificação se um ponto de interrupção foi encontrado compromete a colocação de um endereço da linha de cache em um registrador de depuração de hardware.
11. Sistema de computador, caracterizado pelo fato de que- compreende: - um ou mais processadores; e - um ou mais meios legíveis por computador com instruções executáveis por computador armazenadas nos mesmos que configuram o um ou mais processadores para executar uma detecção de ponto de interrupção através de um cache, incluindo pelo menos: - a detecção de uma ocorrência de um acesso à memó- ria; e - com base pelo menos na detecção da ocorrência do acesso à memória, a identificação se alguma linha de cache do cache corresponde a um endereço associado ao acesso à memória; e - quando uma linha de cache corresponde ao en- dereço associado ao acesso à memória, a determinação de que ne- nhum ponto de interrupção foi encontrado; ou - quando nenhuma linha de cache corresponde ao endereço associado ao acesso à memória, a identificação se alguma linha de cache corresponde ou não ao endereço associado ao acesso à memória quando um ou mais bits de flag são ignorados, e - quando uma linha de cache corresponde ao endereço associado ao acesso à memória quando um ou mais bits de flag são ignorados, a execução de uma verificação se um ponto de interrupção foi encontrado ou não; ou - quando nenhuma linha de cache corresponde ao endereço associado ao acesso à memória quando o um ou mais bits de flag são ignorados, o processamento de uma falha de cache.
12. Sistema de computador, de acordo com a reivindicação
11, caracterizado pelo fato de que um ou mais processadores compre- endem o meio legível por computador e o cache, e em que as instruções executáveis por computador compreendem um microcódigo de proces- sador.
13. Sistema de computador, de acordo com a reivindicação 11, caracterizado pelo fato de que as instruções executáveis por com- putador também configuram um ou mais processadores de modo a de- terminar se uma linha de cache importada para o cache com base no processamento da falha de cache se sobrepõe ou não a qualquer ende- reço de uma coleção de monitoramento quando nenhuma linha de ca- che corresponde ao endereço associado ao acesso à memória quando o um ou mais bits de flag são ignorados.
14. Sistema de computador, de acordo com a reivindicação 11, caracterizado pelo fato de que a execução da verificação se um ponto de interrupção foi encontrado ou não compreende a determinação se algum endereço de uma coleção de monitoramento se sobrepõe a uma pluralidade de endereços de memória cobertos pela linha de cache.
15. Sistema de computador, de acordo com a reivindicação 14, caracterizado pelo fato de que a coleção de monitoramento é arma- zenada em uma memória de processador.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/020,636 | 2018-06-27 | ||
US16/020,636 US10740220B2 (en) | 2018-06-27 | 2018-06-27 | Cache-based trace replay breakpoints using reserved tag field bits |
PCT/US2019/037571 WO2020005625A1 (en) | 2018-06-27 | 2019-06-18 | Cache-based trace replay breakpoints using reserved tag field bits |
Publications (1)
Publication Number | Publication Date |
---|---|
BR112020023084A2 true BR112020023084A2 (pt) | 2021-02-02 |
Family
ID=67138136
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
BR112020023084-7A BR112020023084A2 (pt) | 2018-06-27 | 2019-06-18 | pontos de interrupção de reprodução de rastreamento baseados em cache usando bits de campos de tags reservados |
Country Status (16)
Country | Link |
---|---|
US (1) | US10740220B2 (pt) |
EP (1) | EP3814907B1 (pt) |
JP (1) | JP7348919B2 (pt) |
KR (1) | KR20210021464A (pt) |
CN (1) | CN112368684A (pt) |
AU (1) | AU2019294141B2 (pt) |
BR (1) | BR112020023084A2 (pt) |
CA (1) | CA3102624A1 (pt) |
ES (1) | ES2909580T3 (pt) |
IL (1) | IL279640B2 (pt) |
MX (1) | MX2020013596A (pt) |
PH (1) | PH12020552243A1 (pt) |
RU (1) | RU2769785C1 (pt) |
SG (1) | SG11202012406QA (pt) |
WO (1) | WO2020005625A1 (pt) |
ZA (1) | ZA202006888B (pt) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10268558B2 (en) | 2017-01-13 | 2019-04-23 | Microsoft Technology Licensing, Llc | Efficient breakpoint detection via caches |
US11860782B2 (en) * | 2019-08-13 | 2024-01-02 | Neuroblade Ltd. | Compensating for DRAM activation penalties |
US11086791B2 (en) * | 2019-08-29 | 2021-08-10 | Micron Technology, Inc. | Methods for supporting mismatched transaction granularities |
US11307857B2 (en) | 2019-12-05 | 2022-04-19 | Marvell Asia Pte, Ltd. | Dynamic designation of instructions as sensitive for constraining multithreaded execution |
US11263015B1 (en) * | 2019-12-05 | 2022-03-01 | Marvell Asia Pte, Ltd. | Microarchitectural sensitive tag flow |
US11372647B2 (en) | 2019-12-05 | 2022-06-28 | Marvell Asia Pte, Ltd. | Pipelines for secure multithread execution |
US11714676B2 (en) * | 2020-01-03 | 2023-08-01 | International Business Machines Corporation | Software-directed value profiling with hardware-based guarded storage facility |
Family Cites Families (59)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2593621A1 (fr) * | 1986-01-24 | 1987-07-31 | Intel Corp | Appareil de point de rupture pour microprocesseur |
JPH05113906A (ja) * | 1991-10-22 | 1993-05-07 | Fujitsu Ltd | デバツグ支援装置 |
JP2734468B2 (ja) * | 1992-01-24 | 1998-03-30 | 三菱電機株式会社 | プロセッサ |
US5535318A (en) | 1992-04-30 | 1996-07-09 | Ricoh Company, Ltd. | Debugging system for a hierarchically structured page description language |
US5664159A (en) * | 1994-03-08 | 1997-09-02 | Exponential Technology, Inc. | Method for emulating multiple debug breakpoints by page partitioning using a single breakpoint register |
JP3822885B2 (ja) | 1994-09-09 | 2006-09-20 | 株式会社ルネサステクノロジ | 1チップデータプロセッサ |
JPH1139153A (ja) * | 1997-07-15 | 1999-02-12 | Matsushita Electric Ind Co Ltd | プログラムがromに記録されているマイコンシステムにおけるメンテナンス方法、そのマイコンシステムに用いられる中央処理装置、キャッシュシステム、及びマイコンシステムの応用装置 |
CA2211505C (en) | 1997-07-25 | 2002-02-05 | Ibm Canada Limited-Ibm Canada Limitee | Setting instance breakpoints in object oriented computer programs |
US6106572A (en) | 1998-03-25 | 2000-08-22 | Origins Software Company | Forward and reverse hierarchical page level debugger |
US6237135B1 (en) | 1998-06-18 | 2001-05-22 | Borland Software Corporation | Development system with visual design tools for creating and maintaining Java Beans components |
US6134710A (en) | 1998-06-26 | 2000-10-17 | International Business Machines Corp. | Adaptive method and system to minimize the effect of long cache misses |
US6182208B1 (en) | 1998-08-14 | 2001-01-30 | Lucent Technologies, Inc. | System for debugging (N) break points by dividing a computer program to (n+1) regions each contains no break point and using two registers to define the start and end addresses of each region |
US6795962B1 (en) | 1999-12-30 | 2004-09-21 | Microsoft Corporation | Machine independent debugger |
US6738868B2 (en) * | 2000-06-10 | 2004-05-18 | Hewlett-Packard Development Company, L.P. | System for minimizing directory information in scalable multiprocessor systems with logically independent input/output nodes |
US7000225B2 (en) | 2000-12-07 | 2006-02-14 | International Business Machines Corporation | Method for inserting global breakpoints |
US7047519B2 (en) | 2001-09-26 | 2006-05-16 | International Business Machines Corporation | Dynamic setting of breakpoint count attributes |
US7644394B2 (en) | 2001-11-30 | 2010-01-05 | International Business Machines Corporation | Object-oriented creation breakpoints |
US7296259B2 (en) * | 2002-09-11 | 2007-11-13 | Agere Systems Inc. | Processor system with cache-based software breakpoints |
US7269825B1 (en) | 2002-12-27 | 2007-09-11 | Unisys Corporation | Method and system for relative address translation |
US7650592B2 (en) | 2003-03-01 | 2010-01-19 | Bea Systems, Inc. | Systems and methods for multi-view debugging environment |
US7272826B2 (en) | 2003-05-08 | 2007-09-18 | International Business Machines Corporation | Hierarchical breakpoint groups |
US7249225B1 (en) | 2003-10-31 | 2007-07-24 | Sun Microsystems, Inc | Method and apparatus for supporting read-only objects within an object-addressed memory hierarchy |
US7694278B2 (en) | 2004-07-09 | 2010-04-06 | Microsoft Corporation | Data cube script development and debugging systems and methodologies |
US7634761B2 (en) | 2004-10-29 | 2009-12-15 | Microsoft Corporation | Breakpoint logging and constraint mechanisms for parallel computing systems |
US7447942B2 (en) * | 2005-07-19 | 2008-11-04 | Microsoft Corporation | Fast data breakpoint emulation |
US20070168736A1 (en) | 2005-12-19 | 2007-07-19 | Ottavi Robert P | Breakpoint groups |
JP2007257441A (ja) | 2006-03-24 | 2007-10-04 | Fujitsu Ltd | プロセッサおよびプロセッサ制御方法 |
US8352713B2 (en) * | 2006-08-09 | 2013-01-08 | Qualcomm Incorporated | Debug circuit comparing processor instruction set operating mode |
US7840849B2 (en) | 2006-12-21 | 2010-11-23 | Novell, Inc. | Methods and apparatus for debugging software including divisions of an execution history of a debuggee program |
US8612720B2 (en) | 2007-02-09 | 2013-12-17 | Edgewater Computer Systems, Inc. | System and method for implementing data breakpoints |
US8095861B2 (en) | 2007-09-28 | 2012-01-10 | International Business Machines Corporation | Cache function overloading |
US8336032B2 (en) | 2007-12-05 | 2012-12-18 | International Business Machines Corporation | Implementing enhanced template debug |
US9032374B2 (en) | 2008-04-03 | 2015-05-12 | International Business Machines Corporation | Metadata-integrated debugger |
US8423965B2 (en) | 2009-06-23 | 2013-04-16 | Microsoft Corporation | Tracing of data flow |
US8539209B2 (en) * | 2009-08-24 | 2013-09-17 | Via Technologies, Inc. | Microprocessor that performs a two-pass breakpoint check for a cache line-crossing load/store operation |
JP2011070256A (ja) | 2009-09-24 | 2011-04-07 | Toshiba Corp | デバッガおよびプログラム |
US8745597B2 (en) | 2009-11-25 | 2014-06-03 | International Business Machines Corporation | Providing programming support to debuggers |
US20110154111A1 (en) | 2009-12-23 | 2011-06-23 | International Business Machines Corporation | Memory Based Hardware Breakpoints |
CN101777021B (zh) * | 2010-01-21 | 2012-07-04 | 龙芯中科技术有限公司 | 微处理器中精确数据断点的实现装置及其方法 |
US8578340B1 (en) | 2010-09-24 | 2013-11-05 | Ca, Inc. | Recording and replaying computer program execution with recorded execution event breakpoints |
US9552206B2 (en) | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
US8832659B2 (en) | 2010-12-06 | 2014-09-09 | University Of Washington Through Its Center For Commercialization | Systems and methods for finding concurrency errors |
US8656359B2 (en) | 2011-03-25 | 2014-02-18 | Sap Ag | Debugging data mappings |
US8566537B2 (en) * | 2011-03-29 | 2013-10-22 | Intel Corporation | Method and apparatus to facilitate shared pointers in a heterogeneous platform |
US8522213B2 (en) | 2011-05-12 | 2013-08-27 | International Business Machines Corporation | Debugger and debugging methods using breakpoints conditioned on the static identity of data |
US9880842B2 (en) * | 2013-03-15 | 2018-01-30 | Intel Corporation | Using control flow data structures to direct and track instruction execution |
JP5843801B2 (ja) | 2013-03-19 | 2016-01-13 | 株式会社東芝 | 情報処理装置およびデバッグ方法 |
CN104346274B (zh) | 2013-07-29 | 2017-06-06 | 国际商业机器公司 | 程序调试器及一种程序的调试方法 |
US9021444B2 (en) | 2013-08-19 | 2015-04-28 | Concurix Corporation | Combined performance tracer and snapshot debugging system |
US9292444B2 (en) | 2013-09-26 | 2016-03-22 | International Business Machines Corporation | Multi-granular cache management in multi-processor computing environments |
US9176821B2 (en) * | 2013-10-30 | 2015-11-03 | Freescale Semiconductor, Inc. | Watchpoint support system for functional simulator |
US9436603B1 (en) | 2014-02-27 | 2016-09-06 | Amazon Technologies, Inc. | Detection and mitigation of timing side-channel attacks |
US9875173B2 (en) | 2014-06-30 | 2018-01-23 | Microsoft Technology Licensing, Llc | Time travel debugging in managed runtime |
US9588870B2 (en) | 2015-04-06 | 2017-03-07 | Microsoft Technology Licensing, Llc | Time travel debugging for browser components |
US9996448B2 (en) | 2016-02-25 | 2018-06-12 | Red Hat Israel Ltd | Breakpoint insertion into kernel pages |
US10152425B2 (en) | 2016-06-13 | 2018-12-11 | Advanced Micro Devices, Inc. | Cache entry replacement based on availability of entries at another cache |
US10310977B2 (en) | 2016-10-20 | 2019-06-04 | Microsoft Technology Licensing, Llc | Facilitating recording a trace file of code execution using a processor cache |
US10268558B2 (en) | 2017-01-13 | 2019-04-23 | Microsoft Technology Licensing, Llc | Efficient breakpoint detection via caches |
US10169196B2 (en) | 2017-03-20 | 2019-01-01 | Microsoft Technology Licensing, Llc | Enabling breakpoints on entire data structures |
-
2018
- 2018-06-27 US US16/020,636 patent/US10740220B2/en active Active
-
2019
- 2019-06-18 RU RU2021101399A patent/RU2769785C1/ru active
- 2019-06-18 ES ES19735075T patent/ES2909580T3/es active Active
- 2019-06-18 WO PCT/US2019/037571 patent/WO2020005625A1/en unknown
- 2019-06-18 MX MX2020013596A patent/MX2020013596A/es unknown
- 2019-06-18 BR BR112020023084-7A patent/BR112020023084A2/pt unknown
- 2019-06-18 AU AU2019294141A patent/AU2019294141B2/en active Active
- 2019-06-18 CN CN201980043057.0A patent/CN112368684A/zh active Pending
- 2019-06-18 KR KR1020207035711A patent/KR20210021464A/ko unknown
- 2019-06-18 SG SG11202012406QA patent/SG11202012406QA/en unknown
- 2019-06-18 CA CA3102624A patent/CA3102624A1/en active Pending
- 2019-06-18 EP EP19735075.4A patent/EP3814907B1/en active Active
- 2019-06-18 JP JP2020572938A patent/JP7348919B2/ja active Active
- 2019-06-18 IL IL279640A patent/IL279640B2/en unknown
-
2020
- 2020-11-04 ZA ZA2020/06888A patent/ZA202006888B/en unknown
- 2020-12-22 PH PH12020552243A patent/PH12020552243A1/en unknown
Also Published As
Publication number | Publication date |
---|---|
US20200004662A1 (en) | 2020-01-02 |
IL279640B2 (en) | 2024-06-01 |
JP2021528780A (ja) | 2021-10-21 |
MX2020013596A (es) | 2021-03-09 |
WO2020005625A1 (en) | 2020-01-02 |
RU2769785C1 (ru) | 2022-04-06 |
US10740220B2 (en) | 2020-08-11 |
PH12020552243A1 (en) | 2021-06-28 |
EP3814907A1 (en) | 2021-05-05 |
IL279640A (en) | 2021-03-01 |
EP3814907B1 (en) | 2022-02-16 |
KR20210021464A (ko) | 2021-02-26 |
ZA202006888B (en) | 2022-01-26 |
CN112368684A (zh) | 2021-02-12 |
CA3102624A1 (en) | 2020-01-02 |
IL279640B1 (en) | 2024-02-01 |
SG11202012406QA (en) | 2021-01-28 |
AU2019294141B2 (en) | 2023-10-26 |
ES2909580T3 (es) | 2022-05-09 |
AU2019294141A1 (en) | 2020-11-26 |
JP7348919B2 (ja) | 2023-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
BR112020023084A2 (pt) | pontos de interrupção de reprodução de rastreamento baseados em cache usando bits de campos de tags reservados | |
KR102661543B1 (ko) | 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅 | |
KR102645481B1 (ko) | 상위 계층 캐시의 항목을 기반으로 하위 계층 캐시로의 유입을 로깅함으로써 트레이스 기록 | |
TWI512468B (zh) | 用於位址轉譯之動態及選擇性變化的裝置與方法 | |
BR102014005801A2 (pt) | rastreamento de fluxo de controle de instruções | |
US20130275699A1 (en) | Special memory access path with segment-offset addressing | |
US10558572B2 (en) | Decoupling trace data streams using cache coherence protocol data | |
TWI698745B (zh) | 快取記憶體、用於操作快取記憶體之方法及其之非暫時性電腦可讀媒體 | |
BR112014031436B1 (pt) | Comparar e substituir entrada de tabela dat | |
BR112014031415B1 (pt) | Salvar/ restaurar registradores selecionados em processamento transacional | |
BR112017022547B1 (pt) | Método para acessar memória estendida, dispositivo e sistema | |
BR102014006301A2 (pt) | processadores, métodos e sistemas emuladores de instruções | |
BR112014031437B1 (pt) | Indicações de ramificação de execução transacional | |
JP2009506434A (ja) | Tlbロックインジケータ | |
BR112014031353B1 (pt) | Facilidade de assistência de processador | |
BR112014031350B1 (pt) | Filtragem de interrupção de programa em execução transacional | |
BR112014022763A2 (pt) | equipamento, método e produto de programa de computador para modificação de controle de instrumentação do tempo de execução a partir de um estado menos privilegiado | |
BR102014006118A2 (pt) | sistemas, equipamentos e métodos para determinar um bit de mascaramento menos significativo à direita de um registrador writemask | |
BR102016012096A2 (pt) | Hardware apparatus to improve performance of state dependent computers | |
KR20200123799A (ko) | 디바이스를 디버깅할 때 메타데이터에 액세스하기 위한 장치 및 방법 | |
TWI801622B (zh) | 用於處理保護標籤損失的裝置、方法、電腦程式、與儲存媒體 | |
JP2021515307A (ja) | 処理回路上で実行されるべきプログラムをデバッグするときにメタデータにアクセスする方法 | |
CN117063155A (zh) | 检测卸载操作中的执行风险 | |
BR112017024623B1 (pt) | Método e equipamento para compressão de indicador de cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
B350 | Update of information on the portal [chapter 15.35 patent gazette] |