RU2775818C2 - Cache-based trace recording using data of cache coherence protocol - Google Patents

Cache-based trace recording using data of cache coherence protocol Download PDF

Info

Publication number
RU2775818C2
RU2775818C2 RU2020113601A RU2020113601A RU2775818C2 RU 2775818 C2 RU2775818 C2 RU 2775818C2 RU 2020113601 A RU2020113601 A RU 2020113601A RU 2020113601 A RU2020113601 A RU 2020113601A RU 2775818 C2 RU2775818 C2 RU 2775818C2
Authority
RU
Russia
Prior art keywords
data
cache
trace
cache line
logged
Prior art date
Application number
RU2020113601A
Other languages
Russian (ru)
Other versions
RU2020113601A (en
RU2020113601A3 (en
Inventor
Джорди МОЛА
Original Assignee
МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US15/915,930 external-priority patent/US10459824B2/en
Application filed by МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи filed Critical МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи
Publication of RU2020113601A publication Critical patent/RU2020113601A/en
Publication of RU2020113601A3 publication Critical patent/RU2020113601A3/ru
Application granted granted Critical
Publication of RU2775818C2 publication Critical patent/RU2775818C2/en

Links

Images

Abstract

FIELD: computer technology.
SUBSTANCE: it is determined that at least following conditions are fulfilled: (i) the operation has caused the interaction between a specific cache row from the mentioned set of cache rows and the mentioned one or more reserve storages; (ii) the registration is allowed for a specific processing unit from the mentioned set of processing units, which has caused this operation; (iii) the mentioned specific cache row is a registration participant; and (iv) CCP indicates that there is data that should be registered in the trace, based on the mentioned operation; and, based on at least the determination of that the mentioned conditions are fulfilled, data is registered in the trace, wherein data can be used for the reproduction of the mentioned operation.
EFFECT: reduction in a trace file size by several orders and, thereby, significant reduction in the cost of trace recording.
20 cl, 19 dwg, 1 tbl

Description

УРОВЕНЬ ТЕХНИКИBACKGROUND OF THE INVENTION

[0001] При написании кода во время разработки программных приложений разработчики обычно тратят значительное количество времени на "отладку" кода для поиска ошибок времени выполнения и других ошибок в исходном коде. При этом разработчики могут применять несколько подходов к повторению и локализации дефекта в исходном коде, таких как наблюдение за поведением программы на основе разных входных данных, вставка отладочного кода (например, чтобы печатать значения переменных для отслеживания ветвей исполнения, и т.д.), временное удаление частей кода, и т.д. Выискивание ошибок времени выполнения для выявления дефектов кода может отнимать значительную часть времени разработки приложений. [0001] When writing code during the development of software applications, developers typically spend a significant amount of time "debugging" the code to look for run-time errors and other errors in the source code. In doing so, developers can take several approaches to repeating and localizing a defect in the source code, such as observing the behavior of the program based on different inputs, inserting debug code (for example, to print the values of variables to track execution branches, etc.), temporary removal of parts of the code, etc. Tracking down run-time errors to identify code defects can take up a significant amount of application development time.

[0002] Многие типы отладочных приложений ("отладчиков") были разработаны для того, чтобы помочь разработчикам в процессе отладки кода. Эти инструменты предлагают разработчикам возможность выполнять трассировку, визуализировать и изменять исполнение машинного кода. Например, отладчики могут визуализировать исполнение представленных в коде инструкций, могут отражать значения переменных в коде в разное время в ходе исполнения кода, могут позволить разработчикам изменять пути исполнения кода и/или могут позволить разработчикам устанавливать "точки останова" и/или "точки наблюдения" в интересуемых элементах кода (которые, при достижении в ходе исполнения, приводят к приостановке исполнения кода), помимо прочего. [0002] Many types of debugging applications ("debuggers") have been developed to assist developers in the process of debugging code. These tools offer developers the ability to trace, visualize, and modify the execution of native code. For example, debuggers may visualize the execution of instructions presented in the code, may reflect the values of variables in the code at different times during code execution, may allow developers to change code execution paths, and/or may allow developers to set "breakpoints" and/or "watchpoints" in code elements of interest (which, when reached during execution, cause code execution to pause), among other things.

[0003] Перспективная форма отладочных приложений позволяет выполнять отладку "с переходом по времени", "обратную" или "хронологическую" отладку. При отладке "с переходом по времени" исполнение программы (например, исполняемых объектов, таких как потоки выполнения) записывается/трассируется посредством приложения трассировки в один или несколько файлов трассировки. Эти файл(ы) трассировки затем могут использоваться для воспроизведения исполнения программы позже, как для прямого, так и для обратного анализа. Например, отладчики "с переходом по времени" могут позволить разработчику устанавливать точки останова/наблюдения в прямом порядке (как обычные отладчики), а также точки останова/наблюдения в обратном порядке. [0003] The perspective form of debugging applications allows "time-traversing", "reverse", or "chronological" debugging to be performed. In "time-advance" debugging, the execution of a program (eg, executable objects such as threads of execution) is recorded/traced by a trace application into one or more trace files. These trace file(s) can then be used to replay program execution later, either for forward or backward analysis. For example, "jump-in-time" debuggers can allow the developer to set break/watch points in forward order (like regular debuggers) and break/watch points in reverse order.

СУЩНОСТЬ ИЗОБРЕТЕНИЯSUMMARY OF THE INVENTION

[0004] варианты осуществления в данном документе улучшают отладочные записи "с переходом по времени", задействуя разделяемый кэш обрабатывающего устройства (процессора), вместе с его протоколом когерентности кэша (CCP - cache coherence protocol), чтобы определить, какие данные должны регистрироваться (протоколироваться) в файле трассировки. Это может уменьшить размер файла трассировки на несколько порядков по сравнению с прежними подходами, тем самым значительно уменьшая издержки при записи трассировки. [0004] The embodiments herein enhance "time-advance" debug logging by using the processor's shared cache, along with its cache coherence protocol (CCP), to determine what data should be logged (logged). ) in the trace file. This can reduce the size of the trace file by several orders of magnitude compared to previous approaches, thereby significantly reducing the overhead of recording a trace.

[0005] В некоторых случаях варианты осуществления реализуются в вычислительных средах, которые включают в себя (i) множество блоков обработки и (ii) кэш-память, содержащую множество строк кэша, которые используются для кэширования данных из одного или нескольких резервных хранилищ и которые разделяются (совместно используются) множеством блоков обработки. Согласованность данных во множестве строк кэша и одном или нескольких резервных хранилищах регулируется согласно протоколу когерентности кэша. [0005] In some cases, embodiments are implemented in computing environments that include (i) a plurality of processing units and (ii) a cache memory containing a plurality of cache lines that are used to cache data from one or more backing stores and that are shared (shared) by multiple processing units. The consistency of data across multiple cache lines and one or more backing stores is governed by a cache coherence protocol.

[0006] Эти варианты осуществления включают в себя выполнение записи трассировки на основе кэша с использованием данных CCP. Эти варианты осуществления включают в себя определение того, что операция вызвала взаимодействие между конкретной строкой кэша из множества строк кэша и одним или несколькими резервными хранилищами, что регистрация разрешена для конкретного блока обработки из множества блоков обработки, который вызвал операцию, что конкретная строка кэша является участником регистрации, и что CCP указывает, что есть данные, которые должны быть зарегистрированы в трассировке. На основе, по меньшей мере, этих определений, варианты осуществления вызывают регистрацию этих данных в трассировке. Данные могут использоваться для воспроизведения операции. [0006] These embodiments include performing a cache-based trace entry using CCP data. These embodiments include determining that an operation has caused an interaction between a particular cache line of the plurality of cache lines and one or more backing stores, that registration is allowed for a particular processing unit of the plurality of processing units that caused the operation, that the particular cache line is a member logging, and that the CCP indicates that there is data to be logged in the trace. Based on at least these definitions, the embodiments cause this data to be logged in the trace. The data can be used to reproduce the operation.

[0007] Данный раздел "Сущность изобретения" приводится для того, чтобы в упрощенной форме представить подборку концепций, которые дополнительно описаны ниже в разделе "Подробное описание изобретения". Данный раздел "Сущность изобретения" не предназначен для выявления ключевых признаков или основных признаков заявленного изобретения, а также не предназначен для использования в качестве помощи при определении объема заявленного изобретения. [0007] This Summary is provided to introduce in a simplified form a selection of concepts that are further described below in the Detailed Description of the Invention. This Summary is not intended to identify key features or essential features of the claimed invention, nor is it intended to be used as an aid in determining the scope of the claimed invention.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙBRIEF DESCRIPTION OF THE DRAWINGS

[0008] Для того чтобы описать, каким образом могут быть получены вышеупомянутые и другие преимущества и признаки настоящего изобретения, более детальное описание настоящего изобретения, кратко описанного выше, будет предоставлено со ссылкой на его отдельные варианты осуществления, которые проиллюстрированы на прилагаемых чертежах. Подразумевая, что эти чертежи изображают только типичные варианты осуществления настоящего изобретения и, следовательно, не должны рассматриваться как ограничивающие его объем, настоящее изобретение будет описано и объяснено с дополнительной спецификой и детализацией посредством использования сопроводительных чертежей, на которых: [0008] In order to describe how the above and other advantages and features of the present invention can be obtained, a more detailed description of the present invention, briefly described above, will be provided with reference to its separate embodiments, which are illustrated in the accompanying drawings. With the understanding that these drawings depict only exemplary embodiments of the present invention and, therefore, should not be construed as limiting the scope of the present invention, the present invention will be described and explained in further specificity and detail through the use of the accompanying drawings, in which:

[0009] Фиг. 1 показывает иллюстративную вычислительную среду, которая облегчает запись с "точностью до бита" трассировки исполнения кода через разделяемые кэши с использованием данных протокола когерентности кэша (CCP); [0009] FIG. 1 shows an exemplary computing environment that facilitates "bit-accurate" recording of code execution trace across shared caches using Cache Coherence Protocol (CCP) data;

[0010] Фиг. 2 показывает пример разделяемого кэша; [0010] FIG. 2 shows an example of a shared cache;

[0011] Фиг. 3 показывает блок-схему последовательности операций иллюстративного способа для выполнения записи трассировки на основе кэша с использованием данных CCP; [0011] FIG. 3 shows a flowchart of an exemplary method for performing a cache-based trace entry using CCP data;

[0012] Фиг. 4A показывает иллюстративный разделяемый кэш, который расширяет каждую из своих строк кэша одним или несколькими дополнительными учетными битами; [0012] FIG. 4A shows an exemplary shared cache that extends each of its cache lines with one or more additional accounting bits;

[0013] Фиг. 4B показывает пример разделяемого кэша, который включает в себя одну или несколько зарезервированных строк кэша для хранения учетных битов, применимых для обычных строк кэша; [0013] FIG. 4B shows an example of a shared cache that includes one or more reserved cache lines for storing accounting bits applicable to regular cache lines;

[0014] Фиг. 5 показывает пример ассоциативных отображений кэша; [0014] FIG. 5 shows an example of associative cache mappings;

[0015] Фиг. 6A показывает таблицу, которая демонстрирует иллюстративные действия считывания и записи четырьмя блоками обработки на одной строке в разделяемом кэше; [0015] FIG. 6A shows a table that shows exemplary read and write operations by four processing units on a single line in a shared cache;

[0016] Фиг. 6B показывает таблицу, которая демонстрирует иллюстративное состояние когерентности отслеживаемого кэша на основе действий считывания и записи, продемонстрированных на Фиг. 6A; [0016] FIG. 6B shows a table that demonstrates an exemplary watch cache coherence state based on the read and write actions shown in FIG. 6A;

[0017] Фиг. 6C показывает таблицу, которая демонстрирует иллюстративные данные, хранящиеся в учетных битах (т.е. битах блоков, индексных битах и/или флаговых битах) разделяемого кэша на основе действий считывания и записи, продемонстрированных на Фиг. 6A; [0017] FIG. 6C shows a table that shows exemplary data stored in accounting bits (ie, block bits, index bits, and/or flag bits) of a shared cache based on the read and write actions shown in FIG. 6A;

[0018] Фиг. 6D показывает таблицу, которая демонстрирует иллюстративные данные регистрации, которые могут быть записаны в файлы трассировки в связи с действиями считывания и записи, продемонстрированными на Фиг. 6A; [0018] FIG. 6D shows a table that shows exemplary logging data that may be written to trace files in connection with the read and write operations shown in FIG. 6A;

[0019] Фиг. 7A показывает пример, в котором некоторые переходы считывание->считывание могут быть исключены из трассировки в зависимости от того, как отслеживаются обрабатывающие устройства; [0019] FIG. 7A shows an example where some read->read transitions may be excluded from the trace depending on how processors are tracked;

[0020] Фиг. 7B показывает пример регистрации данных, которая пропускает переходы считывание->считывание, выделенные на Фиг. 7A; [0020] FIG. 7B shows an example of data logging that skips the read->read transitions highlighted in FIG. 7A;

[0021] Фиг. 7C показывает таблицу, которая демонстрирует регистрацию данных, которые могут быть записаны, если используются "индексные биты", и индексы обновляются при считываниях; [0021] FIG. 7C shows a table that shows the logging of data that can be written if "index bits" are used and the indices are updated on reads;

[0022] Фиг. 8A показывает иллюстративную вычислительную среду, включающую в себя два обрабатывающих устройства, каждое из которых включает в себя четыре блока обработки, и кэши L1-L3; [0022] FIG. 8A shows an exemplary computing environment including two processors, each including four processing units, and L1-L3 caches;

[0023] Фиг. 8B показывает таблицу, которая демонстрирует иллюстративные операции считывания и записи, выполняемые некоторыми из блоков обработки, показанных на Фиг. 8A; [0023] FIG. 8B shows a table that shows exemplary read and write operations performed by some of the processing units shown in FIG. 8A;

[0024] Фиг. 9A показывает таблицу, которая демонстрирует иллюстративные считывания и записи двумя блоками обработки; [0024] FIG. 9A shows a table that shows exemplary reads and writes by two processing units;

[0025] Фиг. 9B показывает пример таблицы, которая сравнивает, как элементы регистрации могут вноситься средой, которая предоставляет информацию о блоке CCP плюс флаговый бит строки кэша, в отличие от среды, которая предоставляет индексную информацию CCP плюс флаговый бит строки кэша; [0025] FIG. 9B shows an example of a table that compares how registration entries can be contributed by an environment that provides CCP block information plus a cache line flag bit, as opposed to an environment that provides CCP index information plus a cache line flag bit;

[0026] Фиг. 10A показывает пример разных частей адреса памяти и их связь с ассоциативными кэшами; и [0026] FIG. 10A shows an example of different parts of a memory address and their relationship to associative caches; and

[0027] Фиг. 10B показывает пример регистрации кэш-промахов и вытеснений данных из кэша в ассоциативном кэше. [0027] FIG. 10B shows an example of logging cache misses and cache evictions in an associative cache.

ПОДРОБНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯDETAILED DESCRIPTION OF THE INVENTION

[0028] Варианты осуществления в данном документе улучшают отладочные записи "с переходом по времени", задействуя разделяемый кэш обрабатывающего устройства, вместе с его протоколом когерентности кэша, чтобы определить, какие данные должны регистрироваться в файле трассировки. Это может уменьшить размер файла трассировки на несколько порядков по сравнению с прежними подходами, тем самым значительно уменьшая издержки при записи трассировки. [0028] The embodiments herein enhance "time-advance" debug records by using the processor's shared cache, along with its cache coherency protocol, to determine what data should be logged in the trace file. This can reduce the size of the trace file by several orders of magnitude compared to previous approaches, thereby significantly reducing the overhead of recording a trace.

[0029] Фиг. 1 показывает иллюстративную вычислительную среду 100, которая облегчает запись с "точностью до бита" трассировки исполнения кода через разделяемые кэши с использованием данных протокола когерентности кэша. Как изображено, варианты осуществления могут содержать или задействовать компьютерную систему 101, специализированную или общего назначения, которая включает в себя компьютерное аппаратное обеспечение, такое как, например, одно или несколько обрабатывающих устройств 102, системная память 103, одно или несколько хранилищ 104 данных и/или аппаратное обеспечение 105 ввода/вывода. [0029] FIG. 1 shows an exemplary computing environment 100 that facilitates "bit-accurate" recording of code execution traces across shared caches using Cache Coherence Protocol data. As depicted, embodiments may comprise or utilize a computer system 101, whether specialized or general purpose, that includes computer hardware such as, for example, one or more processors 102, system memory 103, one or more data stores 104, and/ or I/O hardware 105.

[0030] Варианты осуществления в пределах объема настоящего изобретения включают в себя физические и другие машиночитаемые носители для переноса или хранения исполняемых компьютером инструкций и/или структур данных. Такие машиночитаемые носители могут быть любыми пригодными носителями, к которым может получить доступ компьютерная система 101. Машиночитаемые носители, которые хранят исполняемые компьютером инструкции и/или структуры данных, представляют собой компьютерные устройства хранения. Машиночитаемые носители, которые переносят исполняемые компьютером инструкции и/или структуры данных, представляют собой средства передачи данных. Таким образом, для примера, но не ограничения, варианты осуществления настоящего изобретения могут содержать, по меньшей мере, два совершенно разных типа машиночитаемых носителей: компьютерные устройства хранения и средства передачи данных. [0030] Embodiments within the scope of the present invention include physical and other computer-readable media for carrying or storing computer-executable instructions and/or data structures. Such computer-readable media can be any suitable media that can be accessed by computer system 101. Computer-readable media that stores computer-executable instructions and/or data structures are computer storage devices. Computer-readable media that carry computer-executable instructions and/or data structures are data transfer media. Thus, by way of example, and not limitation, embodiments of the present invention may comprise at least two distinct types of computer-readable media: computer storage devices and communication media.

[0031] Компьютерные устройства хранения представляют собой физические устройства аппаратного обеспечения, которые хранят исполняемые компьютером инструкции и/или структуры данных. Компьютерные устройства хранения включают в себя различное компьютерное аппаратное обеспечение, такое как ОЗУ, ПЗУ, ЭСППЗУ, твердотельные накопители (SSD), флэш-память, память с изменением фазы (PCM), хранилище на оптических дисках, хранилище на магнитных дисках или другие магнитные устройства хранения, или любое другое устройство(а) аппаратного обеспечения, которое может использоваться для хранения программного кода в форме исполняемых компьютером инструкций или структур данных, и к которым может получить доступ и исполнить компьютерная система 101, чтобы реализовать раскрываемые функциональные возможности настоящего изобретения. Таким образом, например, компьютерные устройства хранения могут включать в себя изображенную системную память 103, изображенное хранилище 104 данных, которое может хранить исполняемые компьютером инструкции и/или структуры данных, или другое хранилище, такое так встроенное в обрабатывающее устройство хранилище, как будет обсуждаться ниже. [0031] Computer storage devices are physical hardware devices that store computer-executable instructions and/or data structures. Computer storage devices include various computer hardware such as RAM, ROM, EEPROM, solid state drives (SSD), flash memory, phase change memory (PCM), optical disk storage, magnetic disk storage, or other magnetic devices. storage device(s), or any other hardware device(s) that can be used to store program code in the form of computer executable instructions or data structures, and that can be accessed and executed by computer system 101 to implement the disclosed functionality of the present invention. Thus, for example, computer storage devices may include the depicted system memory 103, the depicted data store 104, which may store computer-executable instructions and/or data structures, or other storage, such as storage built into the processing device as will be discussed below. .

[0032] Средства передачи могут включать в себя сеть и/или каналы передачи данных, которые могут использоваться для переноса программного кода в форме исполняемых компьютером инструкций или структур данных, и к которым может получить доступ компьютерная система 101. "Сеть" определяется как один или несколько каналов передачи данных, которые обеспечивают возможность транспортировки электронных данных между компьютерными системами и/или модулями и/или другими электронными устройствами. Когда информация перемещается или предоставляется по сети или иному соединению связи (будь то проводное, беспроводное или комбинация проводного или беспроводного) в компьютерную систему, компьютерная система может рассматривать это соединение как средство передачи. Комбинации вышеперечисленного также должны быть включены в объем машиночитаемых носителей. Например, аппаратное обеспечение 105 ввода/вывода может содержать аппаратное обеспечение (например, модуль сетевого интерфейса (например, "NIC")), которое устанавливает соединение с сетью и/или каналом передачи данных, который может использоваться для переноса программного кода в форме исполняемых компьютером инструкций или структур данных. [0032] The transmission media may include a network and/or data channels that can be used to carry program code in the form of computer executable instructions or data structures and that can be accessed by computer system 101. A "network" is defined as one or a plurality of data transmission channels that enable electronic data to be transported between computer systems and/or modules and/or other electronic devices. When information is moved or provided over a network or other communications connection (whether wired, wireless, or a combination of wired or wireless) to a computer system, the computer system may consider the connection as a medium of transmission. Combinations of the above should also be included within the scope of computer readable media. For example, I/O hardware 105 may include hardware (eg, a network interface module (eg, "NIC")) that establishes a connection to a network and/or data link that can be used to carry program code in computer executable form. instructions or data structures.

[0033] Кроме того, при достижении различных компонентов компьютерной системы, программный код в форме исполняемых компьютером инструкций или структур данных может автоматически перемещаться от средств передачи на компьютерные устройства хранения (или наоборот). Например, исполняемые компьютером инструкции или структуры данных, принятые по сети или каналу передачи данных, могут быть помещены в буфер в ОЗУ внутри NIC (например, аппаратное обеспечение 105 ввода/вывода), а впоследствии перемещены в системную память 103 и/или менее энергозависимые компьютерные устройства хранения (например, хранилище 104 данных) в компьютерной системе 101. Таким образом, следует понимать, что компьютерные устройства хранения могут быть включены в состав компонентов компьютерной системы, которые тоже (или даже в первую очередь) используют средства передачи. [0033] In addition, when reaching various components of a computer system, program code in the form of computer-executable instructions or data structures can automatically move from transmission media to computer storage devices (or vice versa). For example, computer-executable instructions or data structures received over a network or data link may be buffered in RAM within the NIC (eg, I/O hardware 105) and subsequently moved to system memory 103 and/or less volatile computer storage devices (eg, data store 104) in computer system 101. Thus, it should be understood that computer storage devices may be included in computer system components that also (or even primarily) use transmission media.

[0034] Исполняемые компьютером инструкции содержат, например, инструкции и данные, которые, при исполнении в обрабатывающем устройстве(ах) 102, заставляют компьютерную систему 101 выполнять определенную функцию или совокупность функций. Исполняемые компьютером инструкции могут быть представлены, например, двоичными данными, инструкциями в промежуточном формате, таком как язык ассемблера, или даже исходным кодом. [0034] Computer-executable instructions comprise, for example, instructions and data that, when executed in processing device(s) 102, cause computer system 101 to perform a specific function or set of functions. The computer-executable instructions may be, for example, binary data, instructions in an intermediate format such as assembly language, or even source code.

[0035] Специалистам в данной области техники будет понятно, что настоящее изобретение может быть реализовано на практике в сетевых вычислительных средах со многими типами конфигураций компьютерных систем, включающих в себя персональные компьютеры, настольные компьютеры, дорожные компьютеры, устройства обработки сообщений, переносные устройства, многопроцессорные системы, микропроцессорную или программируемую бытовую электронику, сетевые ПК, миникомпьютеры, большие многопользовательские компьютеры, подвижные телефоны, КПК, планшеты, устройства персонального вызова, маршрутизаторы, коммутаторы, и тому подобное. Настоящее изобретение также может быть реализовано на практике в средах распределенных систем, где задачи выполняют как локальные, так и удаленные компьютерные системы, которые связаны (посредством либо проводных каналов передачи данных, либо беспроводных каналов передачи данных, либо комбинации проводных и беспроводных каналов передачи данных) через сеть. Собственно, в среде распределенных систем компьютерная система может включать в себя множество составляющих компьютерных систем. В среде распределенных систем программные модули могут быть расположены как в локальных, так и в удаленных запоминающих устройствах. [0035] Those skilled in the art will appreciate that the present invention may be practiced in networked computing environments with many types of computer system configurations, including personal computers, desktop computers, laptop computers, messaging devices, portable devices, multiprocessor systems, microprocessor or programmable consumer electronics, network PCs, minicomputers, large multi-user computers, mobile phones, PDAs, tablets, paging devices, routers, switches, and the like. The present invention may also be practiced in distributed system environments where tasks are performed by both local and remote computer systems that are linked (via either wired data links, wireless data links, or a combination of wired and wireless data links) through the network. As such, in a distributed systems environment, a computer system may include a plurality of component computer systems. In a distributed systems environment, program modules may be located in both local and remote storage devices.

[0036] Специалистам в данной области техники также будет понятно, что настоящее изобретение может быть реализовано на практике в среде облачных вычислений. Среды облачных вычислений могут быть распределенными, хотя это не обязательно. При распределении среды облачных вычислений могут быть распределены по всему миру в рамках организации и/или иметь компоненты, которыми владеют различные организации. В данном описании изобретения и последующей формуле изобретения "облачные вычисления" определяются как модель для предоставления по требованию сетевого доступа к разделяемому пулу настраиваемых вычислительных ресурсов (например, сетей, обслуживающих узлов, хранилищ, приложений и услуг). Определение "облачные вычисления" не ограничивается какими-либо другими многочисленными преимуществами, которые могут быть получены благодаря такой модели при правильном развертывании. [0036] Those skilled in the art will also appreciate that the present invention may be practiced in a cloud computing environment. Cloud computing environments may be distributed, although this is not required. When distributed, cloud computing environments may be distributed throughout the world within an organization and/or have components owned by different organizations. In this specification and the following claims, "cloud computing" is defined as a model for providing on-demand network access to a shared pool of configurable computing resources (eg, networks, hosts, storage, applications, and services). The definition of "cloud computing" is not limited to any of the many other benefits that can be gained from such a model when properly deployed.

[0037] Модель облачных вычислений может складываться из различных характеристик, таких как самообслуживание по требованию, свободный доступ к сети, объединение ресурсов, способность к быстрой адаптации, измеримое обслуживание и так далее. Модель облачных вычислений также может принимать форму различных моделей обслуживания, таких как, например, Программное обеспечение как услуга (SaaS), Платформа как услуга ("PaaS) и Инфраструктура как услуга (IaaS). Модель облачных вычислений также может быть развернута с использованием разных моделей развертывания, таких как частное облако, коллективное облако, публичное облако, гибридное облако, и так далее. [0037] A cloud computing model may be composed of various characteristics such as on-demand self-service, free network access, pooling of resources, adaptability, measurable service, and so on. The cloud computing model can also take the form of different service models such as Software as a Service (SaaS), Platform as a Service (PaaS) and Infrastructure as a Service (IaaS) for example. The cloud computing model can also be deployed using different models deployments such as private cloud, community cloud, public cloud, hybrid cloud, and so on.

[0038] Некоторые варианты осуществления, такие как среда облачных вычислений, могут содержать систему, которая включает в себя один или несколько узлов, каждый из которых способен обеспечивать функционирование одной или нескольких виртуальных машин. Во время работы виртуальные машины эмулируют действующую вычислительную систему, поддерживая операционную систему, а также, возможно, одно или несколько других приложений. В некоторых вариантах осуществления каждый узел включает в себя гипервизор (программу управления операционными системами), который эмулирует виртуальные ресурсы для виртуальных машин, используя физические ресурсы, которые представлены абстрагировано для виртуальных машин. Гипервизор также обеспечивает надлежащую изоляцию между виртуальными машинами. Таким образом, с точки зрения любой данной виртуальной машины, гипервизор создает иллюзию того, что виртуальная машина взаимодействует с физическим ресурсом, даже при том, что виртуальная машина взаимодействует лишь с внешним представлением (например, виртуальным ресурсом) физического ресурса. Примеры физических ресурсов включают в себя вычислительную мощность, память, дисковое пространство, пропускную способность сети, медиа-накопители, и так далее. [0038] Some embodiments, such as a cloud computing environment, may comprise a system that includes one or more nodes, each capable of running one or more virtual machines. While running, virtual machines emulate a live computing system, supporting an operating system and possibly one or more other applications as well. In some embodiments, each node includes a hypervisor (operating system manager) that emulates virtual resources for virtual machines using physical resources that are abstracted to virtual machines. The hypervisor also provides proper isolation between virtual machines. Thus, from the point of view of any given virtual machine, the hypervisor gives the illusion that the virtual machine is interacting with a physical resource, even though the virtual machine is only interacting with an external representation (eg, virtual resource) of the physical resource. Examples of physical resources include processing power, memory, disk space, network bandwidth, media storage, and so on.

[0039] Как показано, хранилище 104 данных может хранить исполняемые компьютером инструкции и/или структуры данных, представляющие прикладные программы, такие как, например, трассировщик 104a, ядро 104b операционной системы и приложение 104c (например, приложение, которое является объектом трассировки для трассировщика 104a, и один или несколько файлов 104d трассировки). Когда эти программы исполняются (например, с использованием обрабатывающего устройства 102), системная память 103 может хранить соответствующие данные времени выполнения, такие как структуры данных времени выполнения, исполняемые компьютером инструкции, и т.д. Поэтому Фиг. 1 показывает системную память 103 как включающую в себя программный код 103a времени выполнения и данные 103b времени выполнения приложения (например, которые соотносятся с приложением 104c). [0039] As shown, data store 104 may store computer-executable instructions and/or data structures representing application programs, such as, for example, tracer 104a, operating system kernel 104b, and application 104c (for example, an application that is a trace object for tracer 104a and one or more trace files 104d). When these programs are executed (eg, using processor 102), system memory 103 may store appropriate run-time data such as run-time data structures, computer-executable instructions, and so on. Therefore, Fig. 1 shows system memory 103 as including runtime program code 103a and application runtime data 103b (eg, which is associated with application 104c).

[0040] Трассировщик 104a может использоваться для записи с точностью до бита трассировки исполнения приложения, такого как приложение 104c, и сохранять данные трассировки в файле(ах) 104d трассировки. В некоторых вариантах осуществления трассировщик 104a является автономным приложением, тогда как в других вариантах осуществления трассировщик 104a интегрирован в другой компонент программного обеспечения, такой как ядро 104b операционной системы, гипервизор, облачная структура, и т.д. Хотя файл(ы) 104d трассировки изображен как хранящийся в хранилище 104 данных, файл(ы) 104d трассировки также может быть записан монопольно или временно в системной памяти 103 или в каком-то другом устройстве хранения. [0040] The tracer 104a may be used to record a bit-accurate trace of the execution of an application, such as application 104c, and store the trace data in the trace file(s) 104d. In some embodiments, the tracer 104a is a standalone application, while in other embodiments, the tracer 104a is integrated into another software component, such as an operating system kernel 104b, a hypervisor, a cloud, and so on. Although trace file(s) 104d are depicted as being stored in data store 104, trace file(s) 104d may also be written exclusively or temporarily in system memory 103 or some other storage device.

[0041] Фиг. 1 включает в себя упрощенное представление внутренних аппаратных компонентов обрабатывающего устройства(в) 102. Как показано, каждое обрабатывающее устройство 102 включает в себя множество блоков 102a обработки. Каждый блок обработки может быть физическим (т.е. физическим ядром обрабатывающего устройства) и/или логическим (т.е. логическим ядром, представленным физическим ядром, которое поддерживает гиперпараллельность, при которой на физическом ядре исполняется более одного потока выполнения приложения). Таким образом, например, даже при том, что обрабатывающее устройство 102 в некоторых вариантах осуществления может включать в себя только один физический блок обработки (ядро), он мог бы включать в себя два или более логических блоков 102a обработки, представленных этим одним физическим блоком обработки. [0041] FIG. 1 includes a simplified representation of the internal hardware components of the processor(s) 102. As shown, each processor 102 includes a plurality of processing units 102a. Each processing unit can be physical (i.e., the physical core of a processing device) and/or logical (i.e., a logical core represented by a physical core that supports hyperparallelism, whereby more than one application execution thread runs on a physical core). Thus, for example, even though the processor 102 in some embodiments may include only one physical processing unit (core), it could include two or more logical processing units 102a represented by that one physical processing unit. .

[0042] Каждый блок 102a обработки исполняет инструкции обрабатывающего устройства, которые задаются приложениями (например, трассировщиком 104a, операционным ядром 104b, приложением 104c, и т.д.), и такие инструкции выбираются из предварительно заданной архитектуры набора инструкций (ISA - instruction set architecture) обрабатывающего устройства. Конкретная ISA каждого обрабатывающего устройства 102 варьируется в зависимости от производителя обрабатывающего устройства и модели обрабатывающего устройства. Распространенные ISA включают в себя архитектуры IA-64 и IA-32 от компании INTEL, INC., архитектуру AMD64 от компании ADVANCED MICRO DEVICES, INC. и различные архитектуры Advanced RISC Machine ("ARM") от компании ARM HOLDINGS, PLC, хотя большое количество других ISA существуют и могут использоваться настоящим изобретением. Вообще, "инструкция" является наименьшей внешне видимой (т.е. внешне по отношению к обрабатывающему устройству) единицей кода, которая может исполняться обрабатывающим устройством. [0042] Each processing unit 102a executes processor instructions that are specified by applications (e.g., tracer 104a, operating core 104b, application 104c, etc.), and such instructions are selected from a predefined instruction set architecture (ISA). architecture) of the processing device. The specific ISA of each processor 102 varies by processor manufacturer and processor model. Common ISAs include the IA-64 and IA-32 architectures from INTEL, INC., the AMD64 architecture from ADVANCED MICRO DEVICES, INC. and various Advanced RISC Machine ("ARM") architectures from ARM HOLDINGS, PLC, although a large number of other ISAs exist and can be used by the present invention. In general, an "instruction" is the smallest externally visible (ie, external to the processor) unit of code that can be executed by the processor.

[0043] Каждый блок 102a обработки получает инструкции обрабатывающего устройства из разделяемого кэша 102b и исполняет инструкции обрабатывающего устройства на основе данных в разделяемом кэше 102b, на основе данных в регистрах 102d, и/или без входных данных. Вообще, разделяемый кэш 102b представляет собой оперативную память небольшого объема (т.е. небольшого по сравнению с обычным объемом системной памяти 103), которая хранит копии на обрабатывающем устройстве частей резервного хранилища, такого как системная память 103 и/или другой кэш. Например, при исполнении кода 103a приложения разделяемый кэш 102b вмещает части данных 103b времени выполнения приложения. Если блоку(ам) 102a обработки требуются данные, еще не сохраненные в разделяемом кэше 102b, то происходит "кэш-промах", и эти данные извлекаются из системной памяти 103 (вероятно, "вытесняя" некоторые другие данные из разделяемого кэша 102b). [0043] Each processing unit 102a receives processor instructions from shared cache 102b and executes processor instructions based on data in shared cache 102b, based on data in registers 102d, and/or no input. In general, shared cache 102b is a small amount of main memory (i.e., small compared to the normal amount of system memory 103) that stores copies on the processor of portions of a backing store, such as system memory 103 and/or other cache. For example, when executing application code 103a, shared cache 102b holds portions of application runtime data 103b. If the processing unit(s) 102a require data not yet stored in shared cache 102b, then a "cache miss" occurs and the data is retrieved from system memory 103 (probably "pushing out" some other data from shared cache 102b).

[0044] Как правило, разделяемый кэш 102b содержит множество "строк кэша", каждая из которых хранит участок памяти из резервного хранилища. Например, Фиг. 2 показывает пример, по меньшей мере, части разделяемого кэша 200, который включает в себя множество строк 203 кэша, каждая из которых включает в себя адресную часть 201 и часть 202 значения. Адресная часть 201 каждой строки 203 кэша может хранить адрес в резервном хранилище (например, системной памяти 103), которому соответствует эта строка, а часть 202 значения может первоначально хранить значение, принятое из резервного хранилища. Часть 202 значения может быть модифицирована блоками 102a обработки, и впоследствии вытеснена обратно в резервное хранилище. Как обозначено эллипсами, разделяемый кэш 200 может включать в себя большое количество строк кэша. Например, современное обрабатывающее устройство INTEL может содержать кэш уровня 1, содержащий 512 или более строк кэша. В этом кэше каждая строка кэша обычно может использоваться для хранения 64-байтового (512-битного) значения со ссылкой на 8-байтовый (64-битный) адрес памяти. [0044] Typically, shared cache 102b contains a plurality of "cache lines", each of which stores a piece of memory from a backing store. For example, Fig. 2 shows an example of at least part of a shared cache 200 that includes a plurality of cache lines 203 each including an address part 201 and a value part 202. The address portion 201 of each cache line 203 may store the address in the backing store (eg, system memory 103) that the line corresponds to, and the value portion 202 may initially store the value received from the backing store. The value portion 202 may be modified by the processing units 102a, and subsequently pushed back into the backing store. As indicated by the ellipses, shared cache 200 may include a large number of cache lines. For example, a modern INTEL processor may contain a level 1 cache containing 512 or more cache lines. In this cache, each cache line can typically be used to store a 64-byte (512-bit) value with a reference to an 8-byte (64-bit) memory address.

[0045] Адрес, хранящийся в адресной части 201 каждой строки 203 кэша, может быть физическим адресом, таким как фактический адрес памяти в системной памяти 103. В качестве альтернативы, адрес, хранящийся в адресной части 201 каждой строки 203 кэша, может быть виртуальным адресом, который является адресом, назначенным физическому адресу для обеспечения абстракции. Такие абстракции могут использоваться, например, чтобы способствовать изоляции памяти между разными процессами, исполняемыми на обрабатывающем устройстве(ах) 102. При использовании виртуальных адресов обрабатывающее устройство 102 может включать в себя буфер 102f быстрого преобразования адреса (TLB - translation lookaside buffer) (обычно это составная часть блока управления памятью (MMU - memory management unit)), который поддерживает отображение между физическим и виртуальным адресом памяти. [0045] The address stored in the address portion 201 of each cache line 203 may be a physical address, such as an actual memory address in system memory 103. Alternatively, the address stored in the address portion 201 of each cache line 203 may be a virtual address , which is the address assigned to the physical address to provide abstraction. Such abstractions can be used, for example, to help isolate memory between different processes executing on processor(s) 102. When using virtual addresses, processor 102 can include a translation lookaside buffer (TLB) 102f (typically part of a memory management unit (MMU) that maintains a mapping between physical and virtual memory addresses.

[0046] Разделяемый кэш 102b может включать в себя часть кэша кода и часть кэша данных. Например, при исполнении кода 103a приложения, часть кода разделяемого кэша 102b хранит, по меньшей мере, часть инструкций обрабатывающего устройства, хранящихся в коде 103a приложения, а часть данных разделяемого кэша 102b хранит, по меньшей мере, часть структур данных из данных 103b времени выполнения приложения. Часто кэш обрабатывающего устройства разделяется на отдельные ярусы/уровни (например, уровень 1 (L1), уровень 2 (L2) и уровень 3 (L3)), причем некоторые ярусы (например, L3), теоретически, существуют отдельно от обрабатывающего устройства(в) 102. Таким образом, разделяемый кэш 102b может содержать один из этих уровней (L1) или может содержать множество этих уровней. [0046] Shared cache 102b may include a code cache part and a data cache part. For example, when executing application code 103a, the code portion of the shared cache 102b stores at least a portion of the processor instructions stored in the application code 103a, and the data portion of the shared cache 102b stores at least a portion of the data structures from the runtime data 103b. applications. Often the processor cache is split into separate tiers/levels (e.g., level 1 (L1), level 2 (L2), and level 3 (L3)), with some tiers (e.g., L3) theoretically existing separately from the processor (in ) 102. Thus, shared cache 102b may contain one of these levels (L1) or may contain multiple of these levels.

[0047] При использовании нескольких уровней кэша блок(и) 102a обработки взаимодействуют непосредственно с самым нижним уровнем (L1). В большинстве случаев данные перетекают между уровнями (например, при считывании кэш L3 взаимодействует с системной памятью 103 и подает данные в кэш L2, а кэш L2, в свою очередь, подает данные в кэш L1). Когда блок 102a обработки должен выполнить запись, кэши координируются, чтобы гарантировать, что в тех кэшах, которые имели подвергшиеся изменению данные, которые разделялись блоком(ами) 102a обработки, их больше нет. Эта координация выполняется с использованием протокола когерентности кэша (обсуждается позже). [0047] When using multiple cache levels, the processing unit(s) 102a interact directly with the lowest level (L1). In most cases, data flows between layers (for example, on a read, the L3 cache interacts with system memory 103 and feeds data to the L2 cache, and the L2 cache in turn feeds data to the L1 cache). When the processing unit 102a is about to write, the caches are coordinated to ensure that those caches that had changed data shared by the processing unit(s) 102a no longer have it. This coordination is done using the Cache Coherence Protocol (discussed later).

[0048] Кэши могут быть инклюзивными, эксклюзивными, или включать в себя как инклюзивное, так и эксклюзивное поведение. Например, в инклюзивном кэше уровень L3 будет хранить надмножество данных в уровнях L2 ниже него, а уровни L2 хранят надмножество уровней L1 ниже них. В эксклюзивных кэшах уровни могут быть непересекающимися, например, если в кэше L3 имеются данные, которые нужны кэшу L1, они могут обмениваться информацией, такой как данные, адрес, и тому подобное. [0048] Caches can be inclusive, exclusive, or include both inclusive and exclusive behavior. For example, in an inclusive cache, the L3 layer would store a superset of the data in the L2 layers below it, and the L2 layers would store a superset of the L1 layers below it. In exclusive caches, levels can be non-overlapping, for example, if the L3 cache has data that the L1 cache needs, they can exchange information such as data, address, and the like.

[0049] Каждый блок 102 обработки также включает в себя микропрограмму 102c, которая содержит управляющую логику (т.е. исполняемые инструкции), которая управляет работой обрабатывающего устройства 102, и которая обычно выполняет функцию интерпретатора между аппаратным обеспечением обрабатывающего устройства и ISA обрабатывающего устройства, раскрытой обрабатывающим устройством 102 для исполнения приложений. Микропрограмма 102 может быть на практике реализована во встроенном в обрабатывающее устройство хранилище, таком как ПЗУ, ЭСППЗУ, и т.д. [0049] Each processing unit 102 also includes firmware 102c, which contains control logic (i.e., executable instructions) that controls the operation of the processing device 102, and which typically acts as an interpreter between the processing device hardware and the processing device ISA, disclosed by the processing device 102 for executing applications. The firmware 102 may be practiced in a storage device embedded in the processing device such as ROM, EEPROM, etc.

[0050] Регистры 102d представляют собой аппаратные ячейки хранения, которые задаются на основе ISA обрабатывающего устройства(в) 102, и из которых осуществляется считывание и/или в которые осуществляется запись благодаря инструкциям обрабатывающего устройства. Например, регистры 102d обычно используются для хранения значений, извлеченных из разделяемого кэша 102b, для использования инструкциями, для хранения результатов исполнения инструкций и/или для хранения статуса или состояния, к примеру, некоторых побочных эффектов исполнения инструкций (например, признак изменения значения, достижение значением нуля, возникновение переноса, и т.д.), счетчика циклов обрабатывающего устройства, и т.д. Поэтому некоторые регистры 102d могут содержать "флаги", которые используются, чтобы сигнализировать о некотором изменении состояния, вызванном исполнением инструкций обрабатывающего устройства. В некоторых вариантах осуществления обрабатывающие устройства 102 также могут включать в себя управляющие регистры, которые используются для управления разными аспектами работы обрабатывающего устройства. [0050] Registers 102d are hardware storage locations that are defined based on the ISA of the processor(s) 102 and read from and/or written to by instructions from the processor. For example, registers 102d are typically used to store values retrieved from shared cache 102b for use by instructions, to store results of instruction execution, and/or to store status or state, such as some side effects of instruction execution (e.g., indication of value change, achievement value of zero, the occurrence of a carry, etc.), the processor cycle counter, etc. Therefore, some registers 102d may contain "flags" that are used to signal some state change caused by the execution of processor instructions. In some embodiments, processors 102 may also include control registers that are used to control various aspects of the processor's operation.

[0051] В некоторых вариантах осуществления обрабатывающее устройство(а) 102 может включать в себя один или несколько буферов 102e. Как будет обсуждаться в данном документе ниже, буфер(ы) 102e может использоваться в качестве временной ячейки хранения для данных трассировки. Таким образом, например, обрабатывающее устройство(а) 102 может хранить части данных трассировки в буфере(ах) 102e, и сбрасывать эти данные в файл(ы) 104d трассировки в подходящее время, к примеру, когда не занята полоса пропускания шины памяти. В некоторых реализациях буфер(ы) 102e может быть составной частью разделяемого кэша 102b. [0051] In some embodiments, processor(s) 102 may include one or more buffers 102e. As will be discussed herein below, buffer(s) 102e may be used as a temporary storage location for trace data. Thus, for example, processor(s) 102 may store portions of trace data in buffer(s) 102e, and flush that data to trace file(s) 104d at an appropriate time, such as when memory bus bandwidth is not busy. In some implementations, buffer(s) 102e may be part of a shared cache 102b.

[0052] Как упоминалось выше, обрабатывающие устройства, обладающие разделяемым кэшем 102b, работают с кэшем согласно протоколу когерентности кэша (CCP). В частности, CCP задают, как поддерживается согласованность между данными в разделяемом кэше 102b и резервном хранилище данных (например, системной памяти 103 или другом кэше), поскольку различные блоки 102a обработки считывают и записывают данные в разделяемом кэше 102b, и как обеспечивается, чтобы различные блоки 102a обработки всегда считывали действительные данные из данной ячейки в разделяемом кэше 102b. Как правило, CCP связаны с моделью памяти, заданной ISA обрабатывающего устройства 102, и приспособлены к ней. [0052] As mentioned above, processors having a shared cache 102b operate the cache according to the Cache Coherence Protocol (CCP). Specifically, the CCP specifies how consistency is maintained between data in shared cache 102b and a backing data store (e.g., system memory 103 or other cache) as different processing units 102a read and write data in shared cache 102b, and how it is ensured that different processing units 102a have always read valid data from a given location in shared cache 102b. Typically, CCPs are associated with and adapted to the memory model specified by the processor 102 ISA.

[0053] Примеры общих CCP включают в себя протокол MSI (т.е. Modified, Shared, and Invalid - Модифицированная, Разделяемая и Недействительная), протокол MESI (т.е. Modified, Exclusive, Shared, and Invalid - Модифицированная, Эксклюзивная, Разделяемая и Недействительная), и протокол MOESI (т.е. Modified, Owned, Exclusive, Shared, and Invalid - Модифицированная, Собственная, Эксклюзивная, Разделяемая и Недействительная). Каждый из этих протоколов определяет состояние для отдельных ячеек (например, строк) в разделяемом кэше 102b. "Модифицированная" ячейка кэша содержит в себе данные, которые были модифицированы в разделяемом кэше 102b и поэтому, вероятно, не согласованы с соответствующими данными в резервном хранилище (например, в системной памяти 103 или в другом кэше). Когда ячейка, имеющая состояние "модифицированная", вытесняется из разделяемого кэша 102b, общие CCP требуют, чтобы кэш гарантировал, что его данные записаны обратно в резервное хранилище, или что другой кэш взял на себя эту ответственность. "Разделяемая" ячейка кэша содержит в себе данные, которые не модифицированы по сравнению с данными в резервном хранилище, находятся в состоянии только для чтения и разделяются блоком(ами) 102a обработки. Разделяемый кэш 102b может вытеснить эти данные, не записывая их в резервное хранилище. "Недействительная" ячейка кэша не содержит в себе действительных данных и может считаться пустой и пригодной для сохранения данных в результате кэш-промаха. "Эксклюзивная" ячейка кэша содержит в себе данные, которые совпадают с резервным хранилищем, и используется только одним блоком 102a обработки. Она может быть изменена на состояние "разделяемая" в любое время (т.е. в ответ на запрос на считывание) или может быть изменена на состояние "модифицированная" при записи в нее. "Собственная" ячейка кэша разделяется двумя или более блоками 102a обработки, но один из блоков обработки имеет эксклюзивное право вносить в нее изменения. Когда такой блок обработки вносит изменения, он прямо или косвенно уведомляет другие блоки обработки, так как уведомляемым блокам обработки может потребоваться признание недействительности или обновление, в зависимости от реализации CCP. [0053] Examples of common CCPs include the MSI protocol (i.e., Modified, Shared, and Invalid), the MESI protocol (i.e., Modified, Exclusive, Shared, and Invalid - Modified, Exclusive, Shared and Invalid), and the MOESI protocol (i.e. Modified, Owned, Exclusive, Shared, and Invalid). Each of these protocols defines the state for individual cells (eg, rows) in shared cache 102b. A "modified" cache location contains data that has been modified in shared cache 102b and is therefore likely not consistent with corresponding data in a backing store (eg, system memory 103 or another cache). When a cell in the "modified" state is evicted from shared cache 102b, the common CCPs require the cache to ensure that its data is written back to the backing store, or that another cache takes over the responsibility. A "shared" cache location contains data that is not modified from backing data, is in a read-only state, and is shared by processing unit(s) 102a. The shared cache 102b can evict this data without writing it to the backing store. An "invalid" cache location does not contain valid data and can be considered empty and usable for storing data as a result of a cache miss. The "exclusive" cache location contains data that matches the backing store and is used by only one processing unit 102a. It may be changed to the "shared" state at any time (ie, in response to a read request), or may be changed to the "modified" state when written to it. The "own" cache location is shared by two or more processors 102a, but one of the processors has the exclusive right to make changes to it. When such a processing unit makes changes, it directly or indirectly notifies other processing units, as notifiable processing units may need to be invalidated or updated, depending on the CCP implementation.

[0054] Степень детализации, с которой разные CCP отслеживают когерентность кэша и делают эти данные когерентности кэша доступными для трассировщика 104a, может варьироваться. Например, на одной границе диапазона, некоторые CCP отслеживают когерентность кэша для каждой строки кэша, а также для каждого блока обработки. Следовательно, эти CCP могут отслеживать состояние каждой строки кэша, и как она связана с каждым блоком обработки. Как будет продемонстрировано в примере, который последует применительно к Фиг. 6A-6D, это означает, что отдельная строка кэша может иметь информацию о своем состоянии, и как она связана с каждым блоком 102a обработки. Другие CCP менее детализированы и отслеживают когерентность кэша только на уровне строки кэша (и не имеют информации по каждому блоку обработки). На другой границе диапазона производители обрабатывающих устройств могут выбирать для отслеживания когерентности кэша только уровень строки кэша для эффективности, поскольку одновременно только одно обрабатывающее устройство может эксклюзивно владеть строкой (эксклюзивной, модифицированной и т.д.). В качестве примера средней степени детализации CCP может отслеживать когерентность кэша для каждой строки кэша, а также индекс (например, 0, 1, 2, 3 для обрабатывающего устройства с четырьмя блоками обработки) для блока обработки, который имеет текущее состояние строки кэша. [0054] The granularity with which different CCPs monitor cache coherency and make this cache coherency data available to tracer 104a may vary. For example, at one end of the range, some CCPs keep track of cache coherence for each cache line as well as for each processing unit. Therefore, these CCPs can keep track of the state of each cache line, and how it is related to each processing unit. As will be shown in the example that follows with respect to FIG. 6A-6D, this means that an individual cache line may have information about its state and how it is associated with each processing unit 102a. Other CCPs are less granular and only track cache coherence at the cache line level (and don't have per-processor information). At the other end of the range, processor vendors may choose to track cache coherence only at the cache line level for efficiency, since only one processor at a time can exclusively own a line (exclusive, modified, etc.). As an example of medium granularity, the CCP can keep track of the cache coherency for each cache line, as well as an index (eg, 0, 1, 2, 3 for a processor with four processing units) for the processing unit that has the current state of the cache line.

[0055] Варианты осуществления задействуют разделяемый кэш 102b обрабатывающего устройства, чтобы эффективно записывать с точностью до бита трассировку исполнения приложения 104c и/или ядра 104b операционной системы. Эти варианты осуществления строятся на наблюдении, что обрабатывающее устройство 102 (включающее в себя разделяемый кэш 102b) формирует полу- или квазизамкнутую систему. Например, после загрузки части данных для обработки (т.е. данных кода и данных приложения времени выполнения) в разделяемый кэш 102b, обрабатывающее устройство 102 может работать само по себе, без какого-либо ввода данных, как полу- или квазизамкнутая система в течение коротких интервалов времени. В частности, один или несколько блоков 102a обработки исполняют инструкции из части кода разделяемого кэша 102b, используя данные времени выполнения, хранящиеся в частях данных разделяемого кэша 102b, и используя регистры 102d. [0055] Embodiments employ the processor's shared cache 102b to efficiently capture bit-accurate execution trace of application 104c and/or operating system kernel 104b. These embodiments build on the observation that the processor 102 (including the shared cache 102b) forms a semi- or semi-closed system. For example, after loading a portion of the data to be processed (i.e., code data and runtime application data) into the shared cache 102b, the processor 102 may operate on its own, without any input, as a semi- or quasi-closed system for short time intervals. In particular, one or more processing units 102a execute instructions from the code portion of the shared cache 102b using the runtime data stored in the data portions of the shared cache 102b and using the registers 102d.

[0056] Когда блоку 102a обработки требуется некоторое поступление информации (например, потому что инструкция, которую он исполняет, будет исполнять или может исполнить, обращается к данным кода или к данным времени выполнения, которых еще нет в разделяемом кэше 102b), происходит "кэш-промах", и эта информация заносится в разделяемый кэш 102b из системной памяти 103. Например, если кэш-промах данных происходит, когда исполняемая инструкция выполняет операцию в памяти по адресу памяти в пределах данных 103b времени выполнения приложения, данные из этого адреса памяти заносятся в одну из строк кэша части данных разделяемого кэша 102b. Аналогично, если происходит кэш-промах кода, когда инструкция выполняет операцию в памяти по коду 103a приложения с адресом памяти, хранящемуся в системной памяти 103, код из этого адреса памяти заносится в одну из строк кэша части кода разделяемого кэша 102b. Затем блок 102a обработки продолжает исполнение, используя новую информацию в разделяемом кэше 102b, пока новая информация снова не будет занесена в разделяемый кэш 102b (например, вследствие другого кэш-промаха или некэшированного считывания). [0056] When processing unit 102a needs some information to arrive (for example, because an instruction it executes, will execute, or can execute accesses code data or run-time data that is not yet in shared cache 102b), a "cache -miss", and this information is pushed into shared cache 102b from system memory 103. For example, if a data cache miss occurs when an executable instruction performs an operation in memory at a memory address within application runtime data 103b, data from that memory address is pushed to one of the cache lines of the data portion of the shared cache 102b. Similarly, if a code cache miss occurs when an instruction performs an operation in memory at application code 103a with a memory address stored in system memory 103, the code from that memory address is populated into one of the cache lines of the code portion of the shared cache 102b. Processing unit 102a then continues execution using the new information in shared cache 102b until the new information is re-populated into shared cache 102b (eg, due to another cache miss or an uncached read).

[0057] Автор настоящего изобретения заметил, что для записи представления с точностью до бита исполнения приложения трассировщик 104a может записывать достаточно данных, чтобы иметь возможность повторить поступление информации в разделяемый кэш 102b во время исполнения этого потока(ов) выполнения приложения. Первый подход к этому состоит в том, чтобы записывать все данные, которые заносятся в разделяемый кэш 102b, путем регистрации всех кэш-промахов и некэшированных считываний (т.е. считываний из аппаратных компонентов и некэшируемой памяти), а также время в ходе исполнения, когда каждый фрагмент данных был занесен в разделяемый кэш 102b (например, используя количество исполненных инструкций или какой-нибудь другой счетчик). [0057] The present inventor has observed that in order to record a bit-accurate representation of the execution of the application, the tracer 104a can record enough data to be able to repeat the arrival of the information in the shared cache 102b during the execution of that application execution thread(s). The first approach to this is to record all data that is entered into the shared cache 102b by logging all cache misses and non-cached reads (i.e., reads from hardware components and non-cached memory), as well as time during execution, when each piece of data has been entered into the shared cache 102b (eg, using the number of instructions executed or some other counter).

[0058] Второй подход, который приводит к значительно меньшим файлам трассировки, чем первый подход, состоит в том, чтобы отслеживать и записывать строки кэша, которые "потреблялись" каждым блоком 102a обработки. Как используется в данном документе, блок обработки "потребил" строку кэша, если он знает ее текущее значение. Это может быть потому, что блок обработки является тем, который записал текущее значение строки кэша, или потому, что блок обработки выполнил считывание в строке кэша. Этот второй подход охватывает расширения разделяемого кэша 102b, которые позволяют обрабатывающему устройству 102 идентифицировать, для каждой строки кэша, один или несколько блоков 102a обработки, которые потребляли строку кэша. [0058] A second approach, which results in significantly smaller trace files than the first approach, is to track and record the cache lines that were "consumed" by each processing unit 102a. As used herein, a processing unit has "consumed" a cache line if it knows its current value. This may be because the processing unit is the one that wrote the current value of the cache line, or because the processing unit performed a read on the cache line. This second approach encompasses shared cache extensions 102b that allow processor 102 to identify, for each cache line, one or more processors 102a that have consumed the cache line.

[0059] В соответствии с вариантами осуществления в данном документе, третий подход состоит в том, чтобы задействовать CCP обрабатывающего устройства для определения подмножества "потребляемых" строк кэша для записи в файл(ы) 104d, и это по-прежнему позволит повторить действия разделяемого кэша 102b. Этот третий подход приводит к значительно меньшим файлам трассировки, а значит, значительно меньшим издержкам, чем и первый и второй подходы. [0059] In accordance with embodiments herein, a third approach is to use the processor's CCP to determine a subset of "consumed" cache lines to write to file(s) 104d, and this will still allow shared cache actions to be repeated. 102b. This third approach results in much smaller trace files, and therefore much less overhead, than both the first and second approaches.

[0060] Некоторые варианты осуществления в данном документе записывают потоки данных трассировки, которые соответствуют блокам обработки/потокам выполнения. Например, файл(ы) 104 трассировки может включать в себя один или несколько отдельных потоков данных трассировки для каждого блока обработки. В этих вариантах осуществления пакеты данных в каждом потоке данных трассировки могут не иметь идентификации блока обработки, к которому относится пакет данных, так как эта информация присуща на основе самого потока данных трассировки. В этих вариантах осуществления, если компьютерная система 101 включает в себя несколько обрабатывающих устройств 102 (т.е. в разных гнездах для установки обрабатывающих устройств), файл(ы) трассировки может иметь один или несколько разных потоков данных трассировки для каждого блока 102a обработки в разных обрабатывающих устройствах 102. Множественные потоки данных могут использоваться даже для одного потока выполнения. Например, некоторые варианты осуществления могут соотносить один поток данных с блоком обработки, используемым потоком выполнения, и соотносить один или несколько дополнительных потоков данных с каждым разделяемым кэшем, используемым потоком выполнения. [0060] Some embodiments herein record trace data streams that correspond to processing units/flows of execution. For example, trace file(s) 104 may include one or more separate trace data streams for each processing unit. In these embodiments, the data packets in each trace data stream may not have an identification of the processing unit to which the data packet belongs, since this information is inherent based on the trace data stream itself. In these embodiments, if the computer system 101 includes multiple processors 102 (i.e., in different processor slots), the trace file(s) may have one or more different trace data streams for each processing unit 102a in different processing devices 102. Multiple data streams can be used even for a single thread of execution. For example, some embodiments may associate one data stream with a processing unit used by a thread of execution, and associate one or more additional data streams with each shared cache used by a thread of execution.

[0061] В других вариантах осуществления файл(ы) 104 трассировки может включать в себя один поток данных трассировки для обрабатывающего устройства 102 и может идентифицировать в каждом пакете данных, к какому блоку обработки относится пакет данных. В этих вариантах осуществления, если компьютерная система 101 включает в себя несколько обрабатывающих устройств 102, файл(ы) 104 трассировки может включать в себя отдельный поток данных трассировки для каждого из нескольких обрабатывающих устройств 102. Вне зависимости от формата файла(ов) трассировки пакеты данных для каждого блока 102a обработки, как правило, записываются независимо от других блоков обработки, что позволяет независимо воспроизводить разные потоки выполнения, которые исполнялись в разных блоках 102a обработки. Однако файлы трассировки могут включать в себя некоторую информацию, будь то прописанная или присущая, которая обеспечивает частичную упорядоченность между разными потоками выполнения. [0061] In other embodiments, trace file(s) 104 may include one trace data stream for processor 102 and may identify in each data packet which processing unit the data packet belongs to. In these embodiments, if the computer system 101 includes multiple processors 102, the trace file(s) 104 may include a separate trace data stream for each of the multiple processors 102. Regardless of the format of the trace file(s), the data packets for each processing unit 102a are generally recorded independently of other processing units, which allows different threads of execution that were executed in different processing units 102a to be independently reproduced. However, trace files may include some information, whether written or native, that provides partial ordering between different threads of execution.

[0062] Фиг. 3 показывает блок-схему последовательности операций способа 300 для выполнения записи трассировки на основе кэша с использованием данных CCP. Способ 300 может включать в себя этапы, которые выполняются обрабатывающим устройством 102 по мере того, как трассировщик 104a выполняет трассировку приложения 104c и/или ядра 104b операционной системы. Действия, производимые обрабатывающим устройством 102, могут основываться на встроенной логике в обрабатывающем устройстве 102, программно-закодированной логике (т.е. микропрограмме 102c), и/или другом программном приложении, таком как трассировщик 104a, ядро 104b операционной системы, или гипервизор. Хотя Фиг. 3 и показывает последовательность этапов, следует понимать, что варианты осуществления могут выполнять многие из этих этапов в любом порядке, причем некоторые даже выполняются параллельно. Соответственно, последовательность этапов, продемонстрированная в способе 300, не является ограничивающей. [0062] FIG. 3 shows a flow diagram of a method 300 for performing a cache-based trace entry using CCP data. Method 300 may include steps that are performed by processor 102 as tracer 104a traces application 104c and/or operating system kernel 104b. The actions performed by processor 102 may be based on embedded logic in processor 102, software coded logic (i.e., firmware 102c), and/or other software application such as tracer 104a, operating system kernel 104b, or hypervisor. Although Fig. 3 and shows the sequence of steps, it should be understood that embodiments may perform many of these steps in any order, with some even being performed in parallel. Accordingly, the sequence of steps illustrated in method 300 is not limiting.

[0063] Как изображено, способ 300 включает в себя этап 301, на котором обнаруживают взаимодействие между кэшем и резервным хранилищем. В некоторых вариантах осуществления этап 301 содержит этап, на котором обнаруживают операцию, которая вызывает взаимодействие между конкретной строкой кэша из множества строк кэша и одним или несколькими резервными хранилищами. Например, при исполнении потока выполнения приложения 104c или ядра 104b операционной системы в одном из блоков 102a обработки, блок обработки может вызвать взаимодействие между строкой в разделяемом кэше 102b и резервным хранилищем (например, системной памятью 103 или другим кэшем). Обнаружение может быть выполнено, например, обрабатывающим устройством 102 на основе исполнения его микропрограммы 102c. [0063] As depicted, method 300 includes step 301, which detects an interaction between the cache and the backing store. In some embodiments, step 301 includes detecting an operation that causes an interaction between a particular cache line from a plurality of cache lines and one or more backing stores. For example, when executing an application thread 104c or an operating system kernel 104b in one of the processing units 102a, the processing unit may cause an interaction between a line in shared cache 102b and a backing store (eg, system memory 103 or another cache). The detection may be performed, for example, by the processor 102 based on the execution of its firmware 102c.

[0064] Способ 300 также включает в себя этап 302, на котором идентифицируют блок обработки, который вызвал взаимодействие. В некоторых вариантах осуществления этап 302 содержит этап, на котором идентифицируют конкретный блок обработки из множества блоков обработки, который вызвал операцию. Например, на основе исполнения микропрограммы 102c, обрабатывающее устройство 102 может идентифицировать, какой из блоков 102a обработки вызвал операцию, обнаруженную на этапе 301. [0064] Method 300 also includes step 302, which identifies the processing unit that caused the interaction. In some embodiments, step 302 includes identifying a particular processing unit from a plurality of processing units that caused the operation. For example, based on the execution of the firmware 102c, the processor 102 may identify which of the processing units 102a caused the operation detected in step 301.

[0065] Способ 300 также включает в себя этап 303, на котором определяют, разрешена ли регистрация для блока обработки. В некоторых вариантах осуществления этап 303 содержит этап, на котором используют один или несколько управляющих битов регистрации, чтобы определить, что регистрация разрешена для конкретного блока обработки. Например, обрабатывающее устройство 102 может определить, имеет ли блок обработки, идентифицированный на этапе 302, разрешенную регистрацию, основываясь на одном или нескольких управляющих битах регистрации. Использование управляющего бита(ов) регистрации позволяет динамически разрешать и запрещать регистрацию разных блоков обработки. Таким образом, благодаря использованию управляющего бита(ов) регистрации трассировщик 104a может динамически управлять тем, для какого потока(ов) выполнения производится трассировка, и/или для какой части(ей) исполнения разных потоков выполнения производится трассировка. [0065] The method 300 also includes step 303 determining whether registration is enabled for the processing unit. In some embodiments, step 303 comprises using one or more registration control bits to determine that registration is enabled for a particular processing unit. For example, processor 102 may determine whether the processing unit identified at block 302 has registration enabled based on one or more registration control bits. The use of registration control bit(s) allows you to dynamically enable and disable registration of different processing units. Thus, through the use of the registration control bit(s), tracer 104a can dynamically control which thread(s) of execution to trace and/or which portion(s) of execution of different threads of execution to trace.

[0066] Конкретная форма и функциональное назначение управляющего бита(ов) регистрации могут варьироваться. В некоторых вариантах осуществления, например, управляющий бит(ы) регистрации является/являются составной частью одного из регистров 102d, такого как управляющий регистр. В этих вариантах осуществления один управляющий бит регистрации может соответствовать одному блоку 102a обработки, либо множеству блоков 102a обработки. Соответственно, регистр 102d включает в себя один управляющий бит регистрации (например, соответствующий всем блокам обработки, или конкретному блоку обработки, или подмножеству блоков обработки), или может потенциально включать в себя множество управляющих битов регистрации (например, каждый из которых соответствует одному или нескольким блокам обработки). В других вариантах осуществления управляющий бит(ы) регистрации содержит, или иным образом соотнесен с ним, идентификатор адресного пространства (ASID - address space identifier) и/или идентификатор контекста процесса (PCID - process-context identifier), соответствующий инструкции, которая вызвала взаимодействие между кэшем и резервным хранилищем. Соответственно, например, способ 300 может производить трассировку блока обработки только тогда, когда он исполняет инструкции, соотнесенные с одним или несколькими конкретными ASID/PCID. Таким образом, способ 300 может записывать только определенное адресное пространство(а) и/или конкретный контекст(ы) процесса. Комбинации тоже возможны. Например, управляющий бит(ы) регистрации может сохраняться в одном или нескольких регистрах 102d, а устанавливаться/очищаться на основе текущих значений ASID/PCID. Независимо от формы управляющего бита(ов) регистрации, некоторые варианты осуществления могут иметь возможность устанавливать/очищать управляющий бит(ы) регистрации при переключениях контекста, позволяя способу 300 производить трассировку только конкретных потоков выполнения. [0066] The specific form and function of the registration control bit(s) may vary. In some embodiments, for example, the registration control bit(s) is/are an integral part of one of the registers 102d, such as a control register. In these embodiments, one registration control bit may correspond to one processing unit 102a or multiple processing units 102a. Accordingly, register 102d includes a single registration control bit (e.g., corresponding to all processing units, or a particular processing unit, or a subset of processing units), or may potentially include multiple registration control bits (e.g., each corresponding to one or more processing blocks). In other embodiments, the registration control bit(s) contains, or is otherwise associated with, an address space identifier (ASID) and/or a process-context identifier (PCID) corresponding to the instruction that caused the interaction. between cache and backing store. Accordingly, for example, method 300 may only trace a processing block when it executes instructions associated with one or more particular ASID/PCID. Thus, method 300 may only record specific address space(s) and/or specific process context(s). Combinations are also possible. For example, the registration control bit(s) may be stored in one or more registers 102d and set/cleared based on the current ASID/PCID values. Regardless of the form of the registration control bit(s), some embodiments may be able to set/clear the registration control bit(s) on context switches, allowing method 300 to trace only specific threads of execution.

[0067] Способ 300 также включает в себя этап 304, на котором определяют, участвует ли строка кэша в регистрации. В некоторых вариантах осуществления этап 304 содержит, на основе, по меньшей мере, того, что регистрация разрешена для конкретного блока обработки, этап, на котором определяют, участвует ли конкретная строка кэша в регистрации. Например, обрабатывающее устройство 102 может определить, вовлечена ли в регистрацию строка кэша, вовлеченная в операцию, обнаруженную на этапе 301. Как будет более подробно обсуждаться ниже, существует несколько механизмов, которые могут использоваться для обнаружения, такие как использование битов в пределах разделяемого кэша 102b или использование блокировки входа кэша. [0067] Method 300 also includes step 304 determining whether a cache line participates in registration. In some embodiments, step 304 comprises, based at least on the fact that registration is allowed for a particular processing unit, determining whether a particular cache line participates in registration. For example, processor 102 can determine if a cache line involved in the operation detected in step 301 is registered. As will be discussed in more detail below, there are several mechanisms that can be used for detection, such as the use of bits within shared cache 102b. or using cache login blocking.

[0068] Способ 300 также включает в себя этап 305, на котором используют CCP для идентификации того, что есть данные, которые должны быть зарегистрированы в трассировке. Например, обрабатывающее устройство 102 может обратиться к своему CCP, чтобы определить, какие переходы в состоянии кэша произошли в результате операции, и служат ли эти переходы основанием для регистрации данных. Подробные примеры использования CCP для идентификации данных трассировки приведены далее в отношении Фиг. 6A-9B. [0068] The method 300 also includes step 305, which uses the CCP to identify that there is data to be logged in the trace. For example, processor 102 may refer to its CCP to determine which cache state transitions occurred as a result of an operation and whether those transitions are the basis for data logging. Detailed examples of using CCP to identify trace data are provided below with respect to FIG. 6A-9B.

[0069] Способ 300 также включает в себя этап 306, на котором регистрируют надлежащие данные в трассировке с использованием CCP. В некоторых вариантах осуществления этап 306 содержит этап, на котором вызывают регистрацию данных в трассировке, причем эти данные могут использоваться для воспроизведения операции. Когда данные должны быть зарегистрированы в файле(ах) трассировки, один или несколько пакетов данных могут быть добавлены в надлежащие потоки данных трассировки, такие как поток данных трассировки, который соответствует конкретному блоку обработки, или поток данных трассировки, который соответствует обрабатывающему устройству 102 в целом. Если надлежащий поток данных трассировки соответствует обрабатывающему устройству 102 в целом, один или несколько пакетов данных могут идентифицировать конкретный блок обработки. Необходимо отметить, что если поток данных трассировки соответствует обрабатывающему устройству 102 в целом, присущий порядок пакетов данных в самом потоке данных предоставляет некоторую дополнительную информацию об упорядоченности, которая может быть недоступной, если используется несколько потоков данных. [0069] The method 300 also includes step 306, which logs the appropriate data in the trace using the CCP. In some embodiments, step 306 includes causing data to be logged in the trace, which data can be used to reproduce the operation. When data is to be logged in the trace file(s), one or more data packets can be added to the appropriate trace data streams, such as the trace data stream that corresponds to a particular processing unit, or the trace data stream that corresponds to the processing device 102 as a whole. . If the proper trace data stream matches the processor 102 as a whole, one or more data packets may identify a particular processing unit. It should be noted that if the trace data stream corresponds to the processor 102 as a whole, the inherent order of the data packets in the data stream itself provides some additional ordering information that may not be available if multiple data streams are used.

[0070] Следует отметить, что когда разделяемый кэш 102b содержит несколько уровней кэша, в некоторых вариантах осуществления способ 300 работает на уровне кэша, который взаимодействует с системной памятью 103, поскольку именно этот уровень кэша обрабатывает кэш-промахи. Работа на этом уровне позволяет представлять действия кэша каждого блока обработки 102a без избыточности (т.е. не представляя действия блока более одного раза). Таким образом, например, если компьютерная система 101 включает в себя два обрабатывающих устройства 102 (т.е. два гнезда для установки обрабатывающих устройств) и содержит один "инклюзивный" кэш L3 для каждого гнезда, а также "инклюзивные" кэши L2 ниже кэша L3, в некоторых вариантах осуществления способ 300 работает на кэшах L3. Способ 300 также может работать на нескольких уровнях кэша. Например, если компьютерная система 101 включает в себя одно обрабатывающее устройство 102 (т.е. одно гнездо для установки обрабатывающих устройств) и содержит один "эксклюзивный" кэш L3 для гнезда, а также "инклюзивные" кэши L2 ниже кэша L3, способ 300 может работать на кэшах как L3, так и L2. Дополнительные примеры регистрации в пределах кэшей, показывающие смешанное инклюзивное/эксклюзивное поведение, обсуждаются ниже. [0070] It should be noted that when shared cache 102b contains multiple cache levels, in some embodiments, method 300 operates at a cache level that interacts with system memory 103, since it is this cache level that handles cache misses. Operating at this level allows the cache actions of each processing block 102a to be represented without redundancy (ie, not presenting the block actions more than once). Thus, for example, if computer system 101 includes two processors 102 (i.e., two processor slots) and contains one "inclusive" L3 cache for each slot, as well as "inclusive" L2 caches below the L3 cache , in some embodiments, method 300 operates on L3 caches. Method 300 may also operate on multiple cache levels. For example, if computer system 101 includes one processor 102 (i.e., one socket for installing processors) and contains one "exclusive" L3 cache per socket, as well as "inclusive" L2 caches below the L3 cache, method 300 may work on both L3 and L2 caches. Additional examples of registering within caches showing mixed inclusive/exclusive behavior are discussed below.

[0071] Как упоминалось выше применительно к этапу 304, существует несколько механизмов, которые могут использоваться обрабатывающим устройством 102 для определения, является ли строка кэша "участником регистрации". Одним является расширение каждой строки разделяемого кэша 102b одним или несколькими дополнительными "учетными битами", которые могут использоваться как флаг, как идентификаторы блока обработки, или как индекс обрабатывающего устройства. Логика для управления этими "учетными битами" может быть составной частью микропрограммы 102c обрабатывающего устройства. [0071] As mentioned above with respect to block 304, there are several mechanisms that can be used by processor 102 to determine if a cache line is a "register member". One is to expand each line of the shared cache 102b with one or more additional "account bits" that can be used as a flag, as processor identifiers, or as a processor index. The logic to control these "account bits" may be part of the processor firmware 102c.

[0072] Чтобы показать этот вариант осуществления, Фиг. 4A показывает иллюстративный разделяемый кэш 400a, подобный разделяемому кэшу 200, показанному на Фиг. 2, который расширяет каждую из своих строк 404 кэша одним или несколькими дополнительными учетными битами 401. Таким образом, каждая строка 404 кэша включает в себя учетный бит(ы) 401, обычные адресные биты 402 и биты 403 значения. [0072] To show this embodiment, FIG. 4A shows an exemplary shared cache 400a similar to the shared cache 200 shown in FIG. 2 that extends each of its cache lines 404 with one or more additional account bits 401. Thus, each cache line 404 includes account bit(s) 401, regular address bits 402, and value bits 403.

[0073] В некоторых вариантах осуществления учетный бит(ы) 401 каждой строки кэша содержит один бит, который выполняет функцию флага (т.е. включен или выключен), используемого обрабатывающим устройством 102 для указания, участвует или нет строка кэша в регистрации трассировки. Если CCP обрабатывающего устройства имеет достаточную степень детализации (например, если CCP отслеживает состояние когерентности для каждой строки кэша либо как ее отношение к каждому блоку обработки, либо со ссылкой на индекс для блока обработки, которому принадлежит состояние когерентности строки кэша), этот единственный бит может быть достаточным для обеспечения записи надежной полностью детерминированной трассировки (т.е. такой, которая гарантирует способность полной реконструкции трассируемого исполнения). [0073] In some embodiments, the accounting bit(s) 401 of each cache line contains one bit that functions as a flag (i.e., on or off) used by processor 102 to indicate whether or not the cache line participates in trace logging. If the processor's CCP is granular enough (for example, if the CCP keeps track of the coherence state for each cache line, either as its relation to each processing unit, or by referring to an index for the processing unit to which the cache line's coherence state belongs), this single bit may be sufficient to ensure that a reliable, fully deterministic trace is recorded (i.e., one that guarantees the ability to completely reconstruct the traced execution).

[0074] В других реализациях учетный бит(ы) 401 каждой строки включает в себя множество битов. Множество битов можно использовать несколькими способами. Используя один подход, упоминаемый в данном документе как "биты блоков", учетный бит(ы) 401 каждой строки кэша может включать в себя некоторое количество битов блоков, равное количеству блоков 102a обработки обрабатывающего устройства 102 (например, количеству логических блоков обработки, если обрабатывающее устройство 102 поддерживает гиперпараллельность, или количеству физических блоков обработки, если гиперпараллельность не поддерживается). Эти биты блоков могут использоваться обрабатывающим устройством 102, чтобы отслеживать, какие один или несколько конкретных блоков обработки потребляли строку кэша (или, если строка кэша не потреблялась, чтобы отметить, что ни один из блоков обработки не потреблял ее). Таким образом, например, разделяемый кэш 102b, который разделяется двумя блоками 102a обработки, может включать в себя два бита блоков для каждой строки кэша. В связи с этими битами блоков, добавленными к каждой строке кэша, варианты осуществления расширяют микропрограмму 102c обрабатывающего устройства, чтобы задействовать эти биты блоков для отслеживания того, было ли текущее значение в строке кэша зарегистрировано (т.е. в файле 104d трассировки) от имени каждого блока обработки, или иным образом известно блоку обработки. Если CCP обрабатывающего устройства имеет более грубую степень детализации (например, если CCP отслеживает состояние когерентности только на уровне строки кэша), эти биты блоков могут предоставлять дополнительную информацию для обеспечения надежной трассировки. Например, если строка кэша помечена CCP как разделяемая или эксклюзивная, биты блоков могут использоваться для идентификации того, какой блок(и) обработки разделяет строку кэша, или какой блок обработки имеет эксклюзивные права. [0074] In other implementations, the accounting bit(s) 401 of each row includes a plurality of bits. The set of bits can be used in several ways. Using one approach, referred to herein as "block bits", the accounting bit(s) 401 of each cache line may include a number of block bits equal to the number of processing units 102a of the processor 102 (e.g., the number of logical processing units if the processing device 102 supports hyperparallelism, or the number of physical processing units if hyperparallelism is not supported). These block bits can be used by the processor 102 to keep track of which one or more particular processing units have consumed the cache line (or, if the cache line has not been consumed, to indicate that none of the processing units have consumed it). Thus, for example, a shared cache 102b that is shared by two processing units 102a may include two block bits for each cache line. In connection with these block bits added to each cache line, embodiments extend processor firmware 102c to use these block bits to keep track of whether the current value in the cache line has been registered (i.e., in trace file 104d) on behalf of each processing unit, or otherwise known to the processing unit. If the processor's CCP has a coarser granularity (for example, if the CCP only monitors the coherency state at the cache line level), these block bits can provide additional information to provide reliable tracing. For example, if a cache line is marked as shared or exclusive by the CCP, the block bits can be used to identify which processing unit(s) shares the cache line, or which processing unit has exclusive rights.

[0075] При использовании другого подхода, упоминаемого в данном документе как "индексные биты", учетный бит(ы) 401 каждой строки кэша может включать в себя некоторое количество индексных битов, достаточных для представления индекса для каждого из блоков 102a обработки обрабатывающего устройства(в) 102 компьютерной системы 101, которые участвуют в регистрации, вместе с "зарезервированным" значением (например, -1). Например, если обрабатывающее устройство(а) 102 компьютерной системы 101 включает в себя 128 блоков 102a обработки, эти блоки обработки могут идентифицироваться по значению индекса (например, 0-127), используя только семь индексных битов на каждую строку кэша. В некоторых вариантах осуществления одно значение индекса резервируется (например, "недействительный"), чтобы указывать, что никакое обрабатывающее устройство не зарегистрировало строку кэша. Соответственно, это будет означать, что семь индексных битов фактически смогут представлять 127 блоков 102a обработки плюс зарезервированное значение. Например, двоичные значения 0000000-1111110 могут соответствовать индексным ячейкам 0-126 (в десятичном исчислении), а двоичное значение 1111111 (например, -1 или 127 в десятичном исчислении, в зависимости от интерпретации), может соответствовать "недействительному", чтобы указывать, что никакое обрабатывающее устройство не зарегистрировало соответствующую строку кэша, хотя это обозначение может варьироваться, в зависимости от реализации. Таким образом, биты блоков могут использоваться обрабатывающим устройством 102 для отслеживания, участвует ли строка кэша в регистрации трассировки (например, значение, отличное от -1), и как индекс для конкретного блока обработки, который потреблял строку кэша (например, блок обработки, который последним потреблял ее). Этот второй подход имеет преимущество, заключающееся в поддержке большого числа блоков обработки при небольших издержках в разделяемом кэше 102b, с недостатком, заключающимся в меньшей степени детализации по сравнению с первым подходом (т.е. только один блок обработки идентифицируется за один раз). Опять же, если CCP обрабатывающего устройства имеет более грубую степень детализации (например, если CCP отслеживает состояние когерентности только на уровне строки кэша), эти индексные биты могут предоставлять дополнительную информацию для обеспечения надежной трассировки. Например, если строка кэша помечена CCP как разделяемая или эксклюзивная, индексные биты могут использоваться для идентификации, по меньшей мере, одного блока обработки, который разделяет строку кэша, или того, какой блок обработки имеет эксклюзивные права. [0075] Using another approach, referred to herein as "index bits", the accounting bit(s) 401 of each cache line may include a number of index bits sufficient to represent an index for each of the processor processing units 102a (in ) 102 of the computer system 101 that participates in the registration, along with a "reserved" value (eg, -1). For example, if the processor(s) 102 of computer system 101 includes 128 processing units 102a, these processing units can be identified by an index value (eg, 0-127) using only seven index bits per cache line. In some embodiments, one index value is reserved (eg, "invalid") to indicate that no processor has registered a cache line. Accordingly, this would mean that seven index bits could actually represent 127 processing units 102a plus the reserved value. For example, the binary values 0000000-1111110 could correspond to index locations 0-126 (in decimal), and the binary value 1111111 (for example, -1 or 127 in decimal, depending on interpretation) could correspond to "invalid" to indicate, that no processor has registered the corresponding cache line, although this designation may vary, depending on the implementation. Thus, the block bits may be used by processor 102 to keep track of whether a cache line is participating in a trace log (eg, a value other than -1) and as an index to the particular processing block that consumed the cache line (eg, a processing block that last consumed it). This second approach has the advantage of supporting a large number of processing units at low overhead in shared cache 102b, with the disadvantage of being less granular than the first approach (i.e., only one processing unit is identified at a time). Again, if the processor's CCP has a coarser granularity (for example, if the CCP only monitors the coherence state at the cache line level), these index bits can provide additional information to provide reliable tracing. For example, if a cache line is marked as shared or exclusive by the CCP, the index bits can be used to identify at least one processing unit that shares the cache line, or which processing unit has exclusive rights.

[0076] Другой механизм, который может использоваться обрабатывающим устройством 102 для определения того, является ли строка кэша участником регистрации, может воспользоваться концепциями, обсуждаемыми применительно к Фиг. 4A, но без расширения каждой строки кэша дополнительным учетным битом(ами) 401 для учетных битов. Вместо этого данный механизм резервирует одну или несколько строк 404 кэша для хранения учетных битов. Фиг. 4B показывает пример разделяемого кэша 400b, который включает в себя обычные строки 405 кэша, в которых хранятся адреса 402 памяти и значения 403, а также одну или несколько зарезервированных строк 406 кэша для хранения учетных битов, которые применяются для обычных строк 405 кэша. Биты зарезервированной строки(строк) 406 кэша распределяются в разные группы учетных битов, каждая из которых соответствует одной отдельной из обычных строк 405 кэша. Эти группы учетных битов могут выполнять функцию флагового бита, битов блоков или индексных битов, в зависимости от реализации. [0076] Another mechanism that may be used by processor 102 to determine whether a cache line is a registration member may use the concepts discussed in connection with FIG. 4A, but without expanding each cache line with additional accounting bit(s) 401 for accounting bits. Instead, this mechanism reserves one or more cache lines 404 to store accounting bits. Fig. 4B shows an example of a shared cache 400b that includes regular cache lines 405 that store memory addresses 402 and values 403, as well as one or more reserved cache lines 406 for storing accounting bits that apply to regular cache lines 405. The bits of the reserved cache line(s) 406 are allocated to different groups of accounting bits, each of which corresponds to one distinct of the regular cache lines 405 . These groups of accounting bits may function as a flag bit, block bits, or index bits, depending on the implementation.

[0077] Другой механизм, который может использоваться обрабатывающим устройством(ами) 102 для определения того, является ли строка кэша участником регистрации, заключается в том, чтобы задействовать ассоциативные кэши и блокировку входа. Поскольку разделяемый кэш 102b обрабатывающего устройства, как правило, намного меньше системной памяти 103 (часто на порядки), значит обычно в системной памяти 103 намного больше ячеек памяти, чем строк в разделяемом кэше 102b. Поэтому каждое обрабатывающее устройство определяет механизм для отображения множественных ячеек памяти системной памяти в строку(и) в разделяемом кэше. Как правило, обрабатывающие устройства применяют один из двух общих методов: прямое отображение и ассоциативное отображение. При использовании прямого отображения разные ячейки памяти в системной памяти 103 отображаются только в одну строку в кэше, так что каждая ячейка памяти может кэшироваться только в конкретную строку в кэше. [0077] Another mechanism that can be used by the processor(s) 102 to determine if a cache line is a registration member is to use associative caches and login blocking. Because processor shared cache 102b is typically much smaller than system memory 103 (often by orders of magnitude), there are typically many more memory locations in system memory 103 than there are lines in shared cache 102b. Therefore, each processor defines a mechanism for mapping multiple system memory locations to line(s) in a shared cache. Generally, processors use one of two general methods: direct mapping and associative mapping. When direct mapping is used, different memory locations in system memory 103 are mapped to only one cache line, so that each memory location can only be cached to a specific cache line.

[0078] С другой стороны, при использовании ассоциативного отображения разные ячейки в системной памяти 103 могут кэшироваться в одну из множества строк в разделяемом кэше 102b. Фиг. 5 показывает пример 500 ассоциативных отображений кэша. В этом случае строки 504 кэша из кэша 502 логически разделены на разные адресные группы по две строки кэша в каждой, в том числе первую группу из двух строк 504a и 504b кэша (отождествленную с индексом 0) и вторую адресную группу из двух строк 504c и 504d кэша (отождествленную с индексом 1). Каждая строка кэша в адресной группе соотнесена со своим "входом", так что строка 504a кэша идентифицируется индексом 0, входом 0, строка 504b кэша идентифицируется индексом 0, входом 1, и так далее. Как изображено дополнительно, ячейки 503a, 503c, 503e и 503g памяти (индексы 0, 2, 4 и 6 памяти) отображаются в индекс 0. Соответственно, каждая из этих ячеек в системной памяти может кэшироваться в любую строку кэша в пределах группы с индексом 0 (т.е. строки 504a и 504b кэша). Конкретные шаблоны изображенных отображений предназначены только для иллюстративных и концептуальных целей и не должны интерпретироваться как единственный способ, которым индексы памяти могут отображаться в строки кэша. [0078] On the other hand, when using associative mapping, different cells in the system memory 103 can be cached into one of the many lines in the shared cache 102b. Fig. 5 shows an example 500 associative cache mappings. In this case, cache lines 504 from cache 502 are logically divided into different address groups of two cache lines each, including a first group of two cache lines 504a and 504b (identified at index 0) and a second address group of two cache lines 504c and 504d. cache (identified with index 1). Each cache line in the address group is associated with its "entry", such that cache line 504a is identified by index 0, entry 0, cache line 504b is identified by index 0, entry 1, and so on. As shown further, memory locations 503a, 503c, 503e, and 503g (memory indexes 0, 2, 4, and 6) are mapped to index 0. Accordingly, each of these locations in system memory can be cached to any cache line within the group at index 0. (ie, cache lines 504a and 504b). The particular mapping patterns depicted are for illustrative and conceptual purposes only and should not be interpreted as the only way memory indexes can be mapped to cache lines.

[0079] Ассоциативные кэши, как правило, упоминаются как ассоциативные кэши с N входами, где N является количеством "входов" в каждой адресной группе. Таким образом, кэш 500 на Фиг. 5 может упоминаться как ассоциативный кэш с 2 входами. Обрабатывающие устройства обычно реализуют кэши с N входами, где N является степенью двух (например, 2, 4, 8, и т.д.), причем обычно значения N выбираются из 4 и 8 (хотя варианты осуществления в данном документе не ограничиваются никакими конкретными значениями N или подмножествами значений N). В частности, ассоциативный кэш с 1 входом в целом эквивалентен кэшу с прямым отображением, поскольку каждая адресная группа содержит в себе только одну строку кэша. Дополнительно, если N равно количеству строк в кэше, он упоминается как полностью ассоциативный кэш, поскольку он содержит единственную адресную группу, содержащую в себе все строки в кэше. В полностью ассоциативных кэшах любая ячейка памяти может кэшироваться в любую строку в кэше. [0079] Associative caches are generally referred to as N-entry associative caches, where N is the number of "entries" in each address group. Thus, cache 500 in FIG. 5 may be referred to as a 2-entry associative cache. Processors typically implement N-entry caches, where N is a power of two (e.g., 2, 4, 8, etc.), with N typically chosen from 4 and 8 (although the embodiments herein are not limited to any particular N values or subsets of N values). In particular, a 1-entry associative cache is generally equivalent to a direct-mapped cache, since each address group contains only one cache line. Additionally, if N is equal to the number of lines in the cache, it is referred to as a fully associative cache because it contains a single address group containing all the lines in the cache. In fully associative caches, any memory location can be cached to any line in the cache.

[0080] Следует отметить, что Фиг. 5 представляет упрощенный вид системной памяти и кэшей, чтобы проиллюстрировать общие принципы. Например, хотя на Фиг. 5 отдельные ячейки памяти отображаются в строки кэша, следует понимать, что каждая строка в кэше, как правило, хранит данные, относящиеся к нескольким адресуемым ячейкам в системной памяти. Таким образом, на Фиг. 5, каждая ячейка (503a-503h) в системной памяти (501), может фактически представлять множество адресуемых ячеек памяти. Дополнительно, отображения могут быть между фактическими физическими адресами в системной памяти 501 и строками в кэше 502, или могут использовать промежуточный уровень виртуальных адресов. [0080] It should be noted that FIG. 5 is a simplified view of system memory and caches to illustrate the general principles. For example, although in FIG. 5 individual memory locations are mapped to cache lines, it should be understood that each cache line typically stores data related to multiple addressable locations in system memory. Thus, in FIG. 5, each cell (503a-503h) in the system memory (501) may actually represent a plurality of addressable memory cells. Additionally, the mappings may be between actual physical addresses in system memory 501 and lines in cache 502, or may use an intermediate level of virtual addresses.

[0081] Ассоциативные кэши могут использоваться для определения того, является ли строка кэша участником регистрации, посредством использования блокировки входа. Блокировка входа блокирует или резервирует определенные входы в кэше для какой-либо цели. В частности, варианты осуществления в данном документе используют блокировку входа, чтобы зарезервировать один или несколько входов для потока выполнения, который трассируется, так что заблокированные/зарезервированные входы используются исключительно для хранения кэш-промахов, относящихся к исполнению этого потока выполнения. Таким образом, возвращаясь к Фиг. 5, если "вход 0" был заблокирован для трассируемого потока выполнения, то строки 504a и 504c кэша (т.е. индекс 0, вход 0 и индекс 1, вход 0) будут использоваться исключительно для кэш-промахов, относящихся к исполнению этого потока выполнения, а остальные строки кэша будут использоваться для всех других кэш-промахов. Таким образом, чтобы определить, является ли конкретная строка кэша участником регистрации, обрабатывающему устройству 102 нужно только определить, является ли строка кэша составной частью входа, который зарезервирован для потока выполнения, который трассируется. [0081] Associative caches can be used to determine if a cache line is a member of the registration, through the use of login blocking. Entry blocking blocks or reserves certain entries in the cache for some purpose. In particular, embodiments herein use entry blocking to reserve one or more entries for a thread of execution that is being traced, such that blocked/reserved entries are used solely to store cache misses related to the execution of that thread of execution. Thus, returning to FIG. 5, if "input 0" was blocked for a traced thread of execution, then cache lines 504a and 504c (i.e., index 0, input 0 and index 1, input 0) will be used exclusively for cache misses related to the execution of that thread. execution, and the rest of the cache lines will be used for all other cache misses. Thus, to determine if a particular cache line is a registration member, the processor 102 need only determine if the cache line is part of an input that is reserved for the thread of execution that is being traced.

[0082] Фиг. 6A-6D показывают конкретный пример 600 применения способа 300, показанного на Фиг. 3, в контексте Фиг. 1, 2, 4A, 4B и 5. Фиг. 6A показывает первую таблицу 600a, которая демонстрирует действия считывания и записи четырьмя блоками 102a обработки (т.е. P0-P3) на одной строке в разделяемом кэше 102b. Фиг. 6B показывает вторую таблицу 600b, которая указывает один вариант осуществления отслеживаемого состояния когерентности кэша (например, как отслеживаемого с использованием CCP обрабатывающего устройства) на основе этих считываний и записей. Фиг. 6C показывает третью таблицу 600c, которая демонстрирует, что могло бы храниться в учетных битах разделяемого кэша 102b (как описано со ссылкой на Фиг. 4A и 4B), если учетные биты вообще используются. Хотя обычно используется только один тип учетных битов (т.е. биты блоков для каждой строки, индексные биты для каждой строки, или флаговый бит для каждой строки), для полноты описания таблица 600c демонстрирует все, биты 603 блоков, индексные биты 604 и флаговый бит 605. Наконец, Фиг. 6D показывает четвертую таблицу 600d, которая демонстрирует иллюстративные типы данных 606 регистрации, которые потенциально могут быть записаны в файл(ы) 104d трассировки в отношении каждой операции. [0082] FIG. 6A-6D show a specific example 600 of applying the method 300 shown in FIG. 3 in the context of FIG. 1, 2, 4A, 4B and 5. FIG. 6A shows a first table 600a that shows the read and write operations of four processing units 102a (ie, P0-P3) on a single line in a shared cache 102b. Fig. 6B shows a second table 600b that indicates one embodiment of the monitored cache coherence state (eg, as monitored using a CCP processor) based on these reads and writes. Fig. 6C shows a third table 600c that shows what could be stored in the account bits of shared cache 102b (as described with reference to FIGS. 4A and 4B), if account bits are used at all. Although only one type of accounting bit is typically used (i.e., block bits for each row, index bits for each row, or flag bit for each row), for completeness, table 600c shows all, block bits 603, index bits 604, and flag bit 605. Finally, FIG. 6D shows a fourth table 600d that shows exemplary log data types 606 that can potentially be written to trace file(s) 104d with respect to each operation.

[0083] Для простоты описания таблица 600a изображает операции только одного блока 102a обработки за раз, но следует понимать, что принципы, описанные в данном документе, применяются и к ситуациям, когда есть одновременные действия (например, одновременные считывания двумя или более блоками обработки одной и той же строки кэша). Дополнительно, примеры, описанные в отношении Фиг. 6A-6D, предполагают, что отслеживание разрешено для блоков P0-P2 обработки и запрещено для блока P3 обработки. Например, как обсуждалось выше, это может управляться битом, соответствующим каждому блоку обработки, к примеру, множеством битов управляющего регистра. [0083] For ease of description, table 600a depicts operations of only one processing unit 102a at a time, but it should be understood that the principles described herein apply to situations where there are simultaneous actions (e.g., simultaneous readings by two or more processing units of one and the same cache line). Additionally, the examples described with respect to FIG. 6A-6D assume that tracking is enabled for processing units P0-P2 and disabled for processing unit P3. For example, as discussed above, this may be controlled by a bit corresponding to each processing block, such as a plurality of control register bits.

[0084] Первоначально, для простоты описания, в этом примере будут использоваться упрощенные состояния строк кэша, которые выводятся из состояний строк кэша (т.е. Модифицированная, Собственная, Эксклюзивная, Разделяемая и Недействительная), используемых в CCP, обсужденных выше (т.е. MSI, MESI и MOESI). При таком упрощении эти состояния отображаются либо в состояние "считывание" (т.е. строка кэша была считана), либо в состояние "запись" (т.е. строка кэша была записана). Таблица 1 ниже демонстрирует один пример этих отображений. Необходимо отметить, что эти отображения используются лишь в качестве примера и не являются ограничивающими. Например, могут существовать CCP и состояния, отличные от обсуждаемых в данном документе, и специалисту в данной области техники будет понятно, с учетом раскрытия изобретения в данном документе, что аналогичные отображения могут быть сделаны для многих разных CCP. [0084] Initially, for ease of description, this example will use the simplified cache line states that are derived from the cache line states (i.e., Modified, Own, Exclusive, Shared, and Invalid) used in the CCPs discussed above (i.e., e. MSI, MESI and MOESI). With this simplification, these states map to either a "read" state (ie, the cache line has been read) or a "write" state (ie, the cache line has been written). Table 1 below shows one example of these mappings. It should be noted that these mappings are used by way of example only and are not limiting. For example, there may be CCPs and states other than those discussed herein, and those skilled in the art will appreciate, given the disclosure herein, that similar mappings can be made for many different CCPs.

Состояние в протоколеState in protocol Отображенное состояниеDisplayed state МодифицированнаяModified ЗаписьRecording СобственнаяOwn СчитываниеReading ЭксклюзивнаяExclusive ЗаписьRecording Разделяемаяshared СчитываниеReading НедействительнаяInvalid Нет отображения, строка кэша считается пустойNo display, cache line is considered empty

Таблица 1Table 1

[0085] Существенно, что варианты осуществления могут регистрировать данные CCP на различных уровнях, в зависимости от того, какие данные доступны со стороны обрабатывающего устройства 102, и/или на основе вариантов выбора реализации. Например, данные CCP могут регистрироваться на основе "отображенных" состояний CCP (таких, как показанные в Таблице 1), на основе фактических состояний CCP (Модифицированная, Собственная, Эксклюзивная, Разделяемая и/или Недействительная), которые видны обрабатывающему устройству 102, и/или даже на основе "необработанных" данных CCP более низкого уровня, которые обычно не могут быть видны обрабатывающему устройству 102. [0085] Significantly, embodiments may log CCP data at various levels, depending on what data is available from processor 102, and/or based on implementation choices. For example, CCP data may be logged based on "mapped" CCP states (such as those shown in Table 1), based on actual CCP states (Modified, Proprietary, Exclusive, Shared, and/or Invalid) that are visible to processor 102, and/ or even based on lower level "raw" CCP data that cannot normally be seen by processor 102.

[0086] Обращаясь к Фиг. 6A-6D, таблица 600a включает в себя первый столбец 601, демонстрирующий идентификатор (ID), который используется для определения глобального порядка среди операций. Таблица 600a также включает в себя четыре дополнительных столбца 602a-602d, каждый из которых соответствует одному из блоков обработки. Хотя в этом примере для простоты используется глобальный ID, следует понимать, что на практике каждый блок обработки обычно упорядочивает операции, используя свои собственные независимые наборы идентификаторов. Эти ID могут содержать счетчик инструкций (IC - instruction count) или любой другой подходящий механизм для определения порядка среди операций, такой как "счетчик скачков" плюс программный счетчик. Следует обратить внимание, что в примере память используется таким образом, чтобы согласовываться с CPP MSI, MESI и MOESI, но для простоты используются только состояния "модифицированная", "разделяемая" и "недействительная". Однако нужно отметить, что некоторые CCP могут предоставлять свои собственные уникальные и/или монотонно прирастающие ID, которые тоже могут записываться в трассировке (например, в каждом пакете, или в случайных пакетах), чтобы строго упорядочить элементы трассировки. Даже если CCP не предоставляет такой ID, потенциально можно использовать значение таймера гнезда (например, TSC) или другой упорядочиваемый ID. [0086] Referring to FIG. 6A-6D, table 600a includes a first column 601 showing an identifier (ID) that is used to determine a global order among operations. Table 600a also includes four additional columns 602a-602d, each corresponding to one of the processing units. Although this example uses a global ID for simplicity, it should be understood that in practice each processing unit typically marshals operations using its own independent set of identifiers. These IDs may contain an instruction count (IC) or any other suitable mechanism for determining the order among operations, such as a "hop counter" plus a program counter. Note that in the example the memory is used in such a way as to be consistent with the MSI, MESI and MOESI CPPs, but for simplicity only the "modified", "shared" and "invalid" states are used. However, it should be noted that some CCPs may provide their own unique and/or incremental IDs, which may also be recorded in the trace (eg, in each packet, or in random packets) in order to strictly order trace elements. Even if the CCP does not provide such an ID, a socket timer value (such as TSC) or another orderable ID could potentially be used.

[0087] Как продемонстрировано в таблице 600a, по идентификатору ID[0] блок P0 обработки выполняет считывание, которое вызывает кэш-промах, в результате чего данные DATA[1] заносятся в строку кэша. Соответственно, таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоком P0. Таблица 600c демонстрирует, что если используются биты 603 блоков, они указывают, что блок P0 обработки потреблял (т.е. считывал) строку кэша (и что блоки P1-P3 обработки не потребляли), что если используются индексные биты 604, они указывают, что P0 потреблял строку кэша, и что если используется флаговый бит 605, он указывает, что какой-то блок обработки потреблял строку кэша. Учитывая этот статус, на этапе 303 обрабатывающее устройство 102 определит, что регистрация разрешена для P0, а на этапе 304 оно определит, что строка кэша участвует в регистрации (т.е. используя биты 603 блоков, индексные биты 604, флаговый бит 605 или блокировку входа). Соответственно, на этапе 306 обрабатывающее устройство 102 задействует CCP для регистрации надлежащих данных в файл(ы) трассировки, при необходимости. В данном случае, поскольку строка кэша переходит из состояния недействительная (пустая) в состояние считывания (таблица 600a)/разделяемая (таблица 600b), данные должны быть зарегистрированы. Как продемонстрировано в данных 606 регистрации в таблице 600d, обрабатывающее устройство 102 может отметить блок (P0) обработки при необходимости (т.е. в зависимости от того, регистрируются ли пакеты данных для отдельных потоков данных по каждому блоку обработки, или для одного потока данных); адрес (@) строки кэша; счетчик инструкций или какой-то другой счетчик; и данные (DATA[1]), которые были занесены в строку кэша. Хотя, как обсуждалось выше, счетчик инструкций обычно будет специфичным для блока обработки значением, для простоты таблица 600d отсылает к счетчику инструкций, имея в виду соответствующий глобальный ID (т.е. IC[0], в данном случае). [0087] As shown in Table 600a, at ID[0], the processing unit P0 performs a read that causes a cache miss, resulting in data DATA[1] being entered into the cache line. Accordingly, table 600b shows that the processor CCP notes that the cache line is now "shared" by the P0 block. Table 600c shows that if block bits 603 are used, they indicate that processing block P0 has consumed (i.e., read) a cache line (and that processing blocks P1-P3 have not consumed), that if index bits 604 are used, they indicate, that P0 has consumed a cache line, and that if flag bit 605 is used, it indicates that some processing unit has consumed a cache line. Given this status, at step 303, the processor 102 determines that the registration is allowed for P0, and at step 304 it determines that the cache line participates in the registration (i.e., using block bits 603, index bits 604, flag bit 605, or lock entrance). Accordingly, at step 306, the processor 102 invokes the CCP to log the appropriate data to the trace file(s), if necessary. In this case, since the cache line transitions from the invalid (empty) state to the read (table 600a)/shared (table 600b) state, data must be registered. As shown in logging data 606 in table 600d, processor 102 may flag a processing unit (P0) as needed (i.e., depending on whether data packets are registered for separate data streams per processing unit, or for a single data stream ); address (@) cache line; instruction counter or some other counter; and the data (DATA[1]) that was entered into the cache line. Although, as discussed above, the instruction counter will typically be a processing unit-specific value, for simplicity, table 600d refers to the instruction counter by referring to the corresponding global ID (ie, IC[0], in this case).

[0088] Следует отметить, что адрес (@) строки кэша и данные (например, DATA[1]) в некоторых вариантах осуществления могут сжиматься в файле(ах) 104d трассировки. Например, адреса памяти могут быть сжаты путем отказа от записи "старших" битов адреса памяти, за счет привязки (явно либо неявно) к "старшим" битам в ранее записанном адресе памяти. Данные могут быть сжаты путем группировки битов значения данных во множество групп, каждая из которых содержит множество битов, и ассоциировании каждой группы с соответствующим "флаговым" битом. Если группа равняется конкретному шаблону (например, все 0, все 1, и т.д.), может быть установлен флаговый бит, и эта группа битов не должна сохраняться в трассировке. [0088] It should be noted that the cache line address (@) of the cache line and data (eg, DATA[1]) in some embodiments may be compressed in trace file(s) 104d. For example, memory addresses can be compressed by not writing the "high" bits of the memory address, by binding (explicitly or implicitly) to the "high" bits in a previously written memory address. Data can be compressed by grouping the data value bits into a plurality of groups, each containing a plurality of bits, and associating each group with a corresponding "flag" bit. If the group equals a particular pattern (eg, all 0s, all 1s, etc.), a flag bit may be set, and this group of bits shall not be stored in the trace.

[0089] Далее, таблица 600a демонстрирует, что по ID[1] блок P1 обработки выполняет считывание в строке кэша, считывая данные DATA[1]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоками P0 и P1. Таблица 600c демонстрирует, что эти блоки P0 и P1 обработки потребляли строку кэша (биты 603 блоков), что P1 потреблял строку кэша (индексные биты 604), или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Отметим, что для индексных битов 604 также корректно было бы по-прежнему ссылаться на P0 вместо P1. Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована. Как продемонстрировано, обрабатывающее устройство 102 может отметить блок (P1) обработки; адрес (@) строки кэша; счетчик инструкций (IC[1]); что строка кэша перешла из состояния считывания (разделяемая) в состояние считывания (разделяемая); и что P0 имел предшествующий доступ к предшествующей строке кэша, но теперь P0 и P1 имеют доступ. [0089] Next, table 600a shows that, at ID[1], the processing unit P1 performs a read in the cache line, reading data DATA[1]. Table 600b shows that the processor CCP notes that the cache line is now "shared" by blocks P0 and P1. Table 600c shows that these processing units P0 and P1 consumed a cache line (block bits 603), that P1 consumed a cache line (index bits 604), or that some processing unit consumed a cache line (flag bit 605). Note that for index bits 604 it would also be correct to still refer to P0 instead of P1. Table 600d shows that, using the CCP, the processor 102 determines that a transaction record should be registered. As shown, the processor 102 may flag a processing unit (P1); address (@) cache line; instruction counter (IC[1]); that the cache line has moved from the read (shared) state to the read (shared) state; and that P0 had previous access to the previous cache line, but now P0 and P1 have access.

[0090] Далее, таблица 600a демонстрирует, что по ID[2] блок P0 обработки выполняет запись в строку кэша, записывая данные DATA[2]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "модифицирована" блоком P0 и "недействительна" для P1. Таблица 600c демонстрирует, что только блок P0 обработки потреблял (т.е. обновил ее значение) строку кэша (биты 603 блоков), что P0 потреблял строку кэша (индексные биты 604), или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована, так как строка кэша была записана/модифицирована. Как продемонстрировано, обрабатывающее устройство 102 может отметить блок (P0) обработки; адрес (@) строки кэша; счетчик инструкций (IC[2]); что строка кэша перешла из состояния считывания (разделяемая) в состояние записи (модифицированная); и что P0 и P1 имели предшествующий доступ к предшествующей строке кэша, но теперь только P0 имеет доступ. [0090] Next, table 600a shows that, at ID[2], the processing unit P0 writes to the cache line, writing data DATA[2]. Table 600b shows that the processor CCP notes that the cache line is now "modified" by block P0 and "invalid" for P1. Table 600c shows that only processing unit P0 has consumed (i.e., updated its value) a cache line (block bits 603), that P0 has consumed a cache line (index bits 604), or that some processing unit has consumed a cache line (flag bit 605). Table 600d shows that, using the CCP, the processor 102 determines that an operation entry should be registered since the cache line has been written/modified. As shown, processor 102 may flag a processing block (P0); address (@) cache line; instruction counter (IC[2]); that the cache line has moved from a read (shared) state to a write (modified) state; and that P0 and P1 had previous access to the previous cache line, but now only P0 has access.

[0091] Следует отметить, что информация о том, какой блок(и) обработки имел предшествующий доступ к строке кэша, могла быть найдена с использованием состояния в CCP, продемонстрированного в таблице 600b. Однако нужно отметить, что некоторые CCP могут не поддерживать достаточную информацию, чтобы сделать это (например, CCP, который отслеживает состояние когерентности только на уровне строки кэша). В качестве альтернативы, если используются биты 603 блоков, эта информация может быть получена из битов блоков. Соответственно, данные 606 регистрации, продемонстрированные на Фиг. 6D, предполагают либо надежный CCP, который поддерживает эту информацию, либо использование битов 603 блоков. [0091] It should be noted that information about which processing unit(s) had previous access to the cache line could be found using the state in the CCP shown in table 600b. However, it should be noted that some CCPs may not maintain enough information to do this (for example, a CCP that only keeps track of the coherence state at the cache line level). Alternatively, if block bits 603 are used, this information can be derived from the block bits. Accordingly, the registration data 606 shown in FIG. 6D assume either a reliable CCP that supports this information, or the use of block bits 603.

[0092] Если ничто из этого не используются (например, если CCP не является таким надежным, и если индексные биты 604, флаговый бит 605 или блокировка входа используются вместо битов 603 блоков), данные 606 регистрации могут быть менее полными или большего объема. В качестве первого примера, если CCP отслеживает состояние когерентности только на уровне строки кэша, и если используются индексные биты 604, они могут использоваться для идентификации того, что состояние строки кэша является недействительным (для всех блоков обработки), что оно является модифицированным (вместе с индексом блока обработки, который ее модифицировал), что оно является эксклюзивным (вместе с индексом блока обработки, который имеет эксклюзивные права), или что оно является разделяемым (и все блоки обработки могут иметь доступ). Это может привести к более простой аппаратной реализации с тем недостатком, что, когда нужно изменить строку кэша с разделяемой на модифицированную или эксклюзивную, должны быть уведомлены все блоки обработки, а не только те, которые были бы известны CCP с большей степенью детализации как разделяющие строку кэша. В качестве второго примера, индексные биты 604 могут использоваться для идентификации последнего блока обработки, который получал доступ к строке кэша. Тогда, если кэш является инклюзивным (т.е. многие считывания скрыты за доступами на уровнях кэша L2 или L1), то даже если блоки обработки считывают одну и ту же строку кэша, кэш L3 может видеть относительно немного повторных запросов от одних и тех же блоков обработки. При регистрации каждого изменения индекса для считывание->считывание и последующей регистрации считывание->запись, запись->запись и запись->считывание индекс с тем же успехом дает такие же данные, как использование битов 603 блоков, за счет трассировки, вероятно, немного большего размера. В качестве третьего примера, каждая строка кэша может включать в себя один флаговый бит, но CCP может отслеживать состояние когерентности для каждой строки кэша в отношении индекса для блока обработки, который владеет состоянием когерентности строки кэша. В этом случае трассировка может записывать больше смещений состояний строки кэша, чем если бы использовались биты блоков, или CCP отслеживал отдельные блоки обработки, но трассировка все еще может быть полностью детерминированной. Краткое сравнение размера файла трассировки при наличии информации о каждом блоке обработки, в сопоставлении с информацией только об индексе обрабатывающего устройства, приводится в дальнейшем в этом документе со ссылками на Фиг. 9A и 9B. [0092] If none of these are used (for example, if the CCP is not as reliable, and if index bits 604, flag bit 605, or entry blocking are used instead of block bits 603), registration data 606 may be less complete or larger. As a first example, if the CCP only monitors the coherence state at the cache line level, and if index bits 604 are used, they can be used to identify that the cache line state is invalid (for all processing units), that it is modified (together with the index of the processing unit that modified it), that it is exclusive (together with the index of the processing unit that has exclusive rights), or that it is shared (and all processing units can access). This can lead to a simpler hardware implementation, with the disadvantage that when a cache line needs to be changed from shared to modified or exclusive, all processing units must be notified, not just those that would be known to the CCP in greater detail as sharing the line. cache. As a second example, index bits 604 may be used to identify the last processing unit that accessed the cache line. Then, if the cache is inclusive (i.e., many reads are hidden behind accesses at the L2 or L1 cache levels), then even if the processing units read the same cache line, the L3 cache may see relatively few repeated requests from the same processing blocks. When logging each index change for read->read and then logging read->write, write->write and write->read, the index just as well yields the same data as using block bits 603, due to tracing, probably a little bigger size. As a third example, each cache line may include one flag bit, but the CCP may keep track of the coherence state for each cache line against an index for the processing unit that owns the cache line's coherence state. In this case, the trace may record more cache line state offsets than if block bits were used, or CCP traced individual processing blocks, but the trace could still be completely deterministic. A brief comparison of the size of the trace file with information about each processing unit versus only information about the processor index is provided later in this document with reference to FIG. 9A and 9B.

[0093] Возвращаясь к Фиг. 6A, таблица 600a демонстрирует, что по ID[3] блок P1 обработки выполняет считывание из строки кэша, считывая данные DATA[2]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоками P0 и P1. Таблица 600c демонстрирует, что блоки P0 и P1 обработки потребляли строку кэша (биты 603 блоков), что P1 потреблял строку кэша (индексные биты 604) или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Отметим, что для индексных битов 604 также корректно было бы по-прежнему ссылаться на P0 вместо P1. Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована, так как строка кэша перешла из состояния записи (модифицированная) в состояние считывания (разделяемая). Как продемонстрировано, обрабатывающее устройство 102 может отметить блок (P1) обработки; адрес (@) строки кэша; счетчик инструкций (IC[3]); что строка кэша перешла из состояния записи (модифицированная) в состояние считывания (разделяемая); и что P0 имел предшествующий доступ к предшествующей строке кэша, но теперь P0 и P1 имеют доступ. [0093] Returning to FIG. 6A, table 600a shows that, at ID[3], the processing unit P1 reads from the cache line by reading data DATA[2]. Table 600b shows that the processor CCP notes that the cache line is now "shared" by blocks P0 and P1. Table 600c shows that processing units P0 and P1 consumed a cache line (block bits 603), that P1 consumed a cache line (index bits 604), or that some processing unit consumed a cache line (flag bit 605). Note that for index bits 604 it would also be correct to still refer to P0 instead of P1. Table 600d shows that, using the CCP, processor 102 determines that an operation record should be registered because the cache line has moved from a write (modified) state to a read (shared) state. As shown, the processor 102 may flag a processing unit (P1); address (@) cache line; instruction counter (IC[3]); that the cache line has moved from the write (modified) state to the read (shared) state; and that P0 had previous access to the previous cache line, but now P0 and P1 have access.

[0094] Далее, таблица 600a демонстрирует, что по ID[4] блок P0 обработки снова выполняет запись в строку кэша, на этот раз записывая данные DATA[3]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша снова "модифицирована" блоком P0 и "недействительна" для P1. Таблица 600c демонстрирует, что только блок P0 обработки потреблял строку кэша (биты 603 блоков), что P0 потреблял строку кэша (индексные биты 604), или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована, так как строка кэша была записана/модифицирована. Как продемонстрировано, обрабатывающее устройство 102 может отметить блок (P0) обработки; адрес (@) строки кэша; счетчик инструкций (IC[4]); что строка кэша перешла из состояния считывания (разделяемая) в состояние записи (модифицированная); и что P0 и P1 имели предшествующий доступ к предшествующей строке кэша, но теперь только P0 имеет доступ. [0094] Next, table 600a shows that, at ID[4], the processing unit P0 writes to the cache line again, this time writing data DATA[3]. Table 600b shows that the processor CCP notes that the cache line is "modified" again by block P0 and "invalid" for P1. Table 600c shows that only processing unit P0 consumed a cache line (block bits 603), that P0 consumed a cache line (index bits 604), or that some processing unit consumed a cache line (flag bit 605). Table 600d shows that, using the CCP, the processor 102 determines that an operation record should be registered since the cache line has been written/modified. As shown, processor 102 may flag a processing block (P0); address (@) cache line; instruction counter (IC[4]); that the cache line has moved from a read (shared) state to a write (modified) state; and that P0 and P1 had previous access to the previous cache line, but now only P0 has access.

[0095] Далее, таблица 600a демонстрирует, что по ID[5] блок P2 обработки выполняет считывание из строки кэша, считывая данные DATA[3]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоками P0 и P2. Таблица 600c демонстрирует, что блоки P0 и P2 обработки потребляли строку кэша (биты 603 блоков), что P2 потреблял строку кэша (индексные биты 604) или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Отметим, что для индексных битов 604 также корректно было бы по-прежнему ссылаться на P0 вместо P2. Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована, так как строка кэша перешла из состояния записи (модифицированная) в состояние считывания (разделяемая). Как продемонстрировано, обрабатывающее устройство 102 может отметить блок (P2) обработки; адрес (@) строки кэша; счетчик инструкций (IC[5]); что строка кэша перешла из состояния записи (модифицированная) в состояние считывания (разделяемая); и что P0 имел предшествующий доступ к предшествующей строке кэша, но теперь P0 и P2 имеют доступ. [0095] Next, table 600a shows that, at ID[5], the processing unit P2 performs a read from the cache line, reading data DATA[3]. Table 600b shows that the processor CCP notes that the cache line is now "shared" by blocks P0 and P2. Table 600c shows that processing units P0 and P2 consumed a cache line (block bits 603), that P2 consumed a cache line (index bits 604), or that some processing unit consumed a cache line (flag bit 605). Note that for index bits 604 it would also be correct to still refer to P0 instead of P2. Table 600d shows that, using the CCP, processor 102 determines that an operation record should be registered because the cache line has moved from a write (modified) state to a read (shared) state. As shown, processor 102 may flag a processing unit (P2); address (@) cache line; instruction counter (IC[5]); that the cache line has moved from the write (modified) state to the read (shared) state; and that P0 had previous access to the previous cache line, but now P0 and P2 have access.

[0096] Далее, таблица 600a демонстрирует, что по ID[6] блок P1 обработки выполняет считывание из строки кэша, также считывая данные DATA[3]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоками P0, P1 и P2. Таблица 600c демонстрирует, что блоки P0, P1 и P2 обработки потребляли строку кэша (биты 603 блоков), что P1 потреблял строку кэша (индексные биты 604) или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Отметим, что для индексных битов 604 также корректно было бы по-прежнему ссылаться на P0 или P2 вместо P1. Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована. Как продемонстрировано, обрабатывающее устройство 102 может отметить блок (P1) обработки; адрес (@) строки кэша; счетчик инструкций (IC[6]); что строка кэша перешла из состояния считывания (разделяемая) в состояние считывания (разделяемая); и что P0 и P2 имели предшествующий доступ к предшествующей строке кэша, но теперь P0, P1 и P2 имеют доступ. [0096] Next, table 600a shows that, at ID[6], the processing unit P1 performs a read from the cache line, also reading data DATA[3]. Table 600b shows that the processor CCP notes that the cache line is now "shared" by blocks P0, P1, and P2. Table 600c shows that processing units P0, P1, and P2 consumed a cache line (block bits 603), that P1 consumed a cache line (index bits 604), or that some processing unit consumed a cache line (flag bit 605). Note that for index bits 604 it would also be correct to still refer to P0 or P2 instead of P1. Table 600d shows that, using the CCP, the processor 102 determines that a transaction record should be registered. As shown, the processor 102 may flag a processing unit (P1); address (@) cache line; instruction counter (IC[6]); that the cache line has moved from the read (shared) state to the read (shared) state; and that P0 and P2 had previous access to the previous cache line, but now P0, P1 and P2 have access.

[0097] Далее, таблица 600a демонстрирует, что по ID[7] блок P3 обработки выполняет считывание из строки кэша, также считывая данные DATA[3]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоками P0, P1, P2 и P3. Таблица 600c демонстрирует, что ни один из битов 603 блоков, индексных битов 604 или флагового бита 605 не был обновлен. Это связано с тем, что регистрация запрещена для P3, и, для целей трассировки, он, таким образом, не "потреблял" строку кэша при выполнении считывания. Таблица 600d демонстрирует, что никакие данные не были зарегистрированы. Это связано с тем, что на этапе 303 обрабатывающее устройство 102 определит, что регистрация не разрешена для P3. [0097] Next, table 600a shows that, at ID[7], the processing unit P3 performs a read from the cache line, also reading data DATA[3]. Table 600b shows that the processor CCP notes that the cache line is now "shared" by blocks P0, P1, P2, and P3. Table 600c shows that none of the block bits 603, index bits 604, or flag bit 605 have been updated. This is because registration is disabled for P3 and, for tracing purposes, it thus did not "consume" a cache line when performing a read. Table 600d shows that no data has been logged. This is because, at step 303, the processor 102 will determine that registration is not allowed for P3.

[0098] Далее, таблица 600a демонстрирует, что по ID[8] блок P3 обработки выполняет запись в строку кэша, записывая данные DATA[4]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "недействительна" для P0, P1 и P2, и "модифицирована" блоком P3. Таблица 600c демонстрирует, что биты 603 блоков, индексные биты 604 и флаговый бит 605, все отражают строку кэша как не потребленную никаким блоком обработки. Это связано с тем, что регистрация запрещена для P3, поэтому, для целей трассировки, он не "потребляет" строку кэша при выполнении записи; кроме того, запись делает недействительным значение в строке кэша для других блоков обработки. Таблица 600d демонстрирует, что никакие данные не были зарегистрированы. Опять же, это связано с тем, что на этапе 303 обрабатывающее устройство 102 определит, что регистрация не разрешена для P3. [0098] Next, table 600a shows that, at ID[8], the processing unit P3 writes to the cache line, writing data DATA[4]. Table 600b shows that the processor CCP notes that the cache line is now "invalid" for P0, P1, and P2, and has been "modified" by the P3 block. Table 600c shows that block bits 603, index bits 604, and flag bit 605 all reflect the cache line as not being consumed by any processing block. This is because logging is disabled for P3, so, for tracing purposes, it does not "consume" a cache line when doing a write; in addition, the write invalidates the value in the cache line for other processing units. Table 600d shows that no data has been logged. Again, this is because, at step 303, the processor 102 will determine that the registration is not allowed for P3.

[0099] Далее, таблица 600a демонстрирует, что по ID[9] блок P0 обработки выполняет запись в строку кэша, записывая данные DATA[5]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "модифицирована" блоком P0 и "недействительна" для P3. Таблица 600c демонстрирует, что никакой блок обработки не потреблял строку кэша. Это связано с тем, что никакой элемент регистрации не был внесен в связи с этой операцией, как отражено в таблице 600d. Никакой элемент регистрации не должен вноситься, потому что записанные данные будут повторяться посредством нормального исполнения инструкций потока выполнения блока P0. Однако в некоторых случаях элемент может быть записан в трассировку при этих обстоятельствах (т.е. запись в строку кэша, которая не зарегистрирована блоком обработки при разрешенной регистрации), чтобы предоставить дополнительные данные потребителю трассировки. При этих обстоятельствах элемент регистрации можно рассматривать как считывание значения строки кэша плюс запись DATA[5]. [0099] Next, table 600a shows that, at ID[9], the processing unit P0 writes to the cache line, writing data DATA[5]. Table 600b shows that the processor CCP notes that the cache line is now "modified" by block P0 and "invalid" for P3. Table 600c shows that no processing unit has consumed a cache line. This is because no registration element was entered in connection with this operation, as reflected in table 600d. No logging element should be entered because the written data will be repeated through the normal execution of the P0 block execution flow instructions. However, in some cases an item may be written to the trace under these circumstances (ie, a write to a cache line that is not registered by the processing unit when registration is enabled) to provide additional data to the trace consumer. Under these circumstances, the registration element can be thought of as a cache line value read plus a DATA[5] entry.

[00100] Далее, таблица 600a демонстрирует, что по ID[10] блок P2 обработки выполняет считывание из строки кэша, считывая данные DATA[5]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоками P0 и P2. Таблица 600c демонстрирует, что блок P2 обработки потреблял строку кэша (биты 603 блоков), что P2 потреблял строку кэша (индексные биты 604) или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована, так как значение строки кэша ранее не регистрировалась (т.е. оно не регистрировалась по ID[9]). Как продемонстрировано, обрабатывающее устройство 102 может отметить блок (P2) обработки; адрес (@) строки кэша; счетчик инструкций (IC[10]); данные (DATA[5]), которые были занесены в строку кэша; и что P2 имеет доступ к строке кэша. Также может быть зарегистрировано, что P0 тоже имеет доступ к строке кэша, в зависимости от того, какую информацию предоставляют конкретный CCP и учетные биты. [00100] Next, table 600a shows that, at ID[10], the processing unit P2 performs a read from the cache line, reading data DATA[5]. Table 600b shows that the processor CCP notes that the cache line is now "shared" by blocks P0 and P2. Table 600c shows that processing unit P2 consumed a cache line (block bits 603), that P2 consumed a cache line (index bits 604), or that some processing unit consumed a cache line (flag bit 605). Table 600d shows that, using the CCP, processor 102 determines that an operation record should be registered because the cache line value was not previously registered (ie, it was not registered by ID[9]). As shown, processor 102 may flag a processing unit (P2); address (@) cache line; instruction counter (IC[10]); data (DATA[5]) that was entered into the cache line; and that P2 has access to the cache line. It may also be registered that P0 also has access to the cache line, depending on what information the particular CCP and accounting bits provide.

[00101] Далее, таблица 600a демонстрирует, что по ID[11] блок P1 обработки выполняет считывание из строки кэша, также считывая данные DATA[5]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоками P0, P1 и P2. Таблица 600c демонстрирует, что блоки P1 и P2 обработки потребляли строку кэша (биты 603 блоков), что P1 потреблял строку кэша (индексные биты 604) или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Отметим, что для индексных битов 604 также корректно было бы по-прежнему ссылаться на P2 вместо P1. Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована. Как продемонстрировано, обрабатывающее устройство 102 может отметить блок (P1) обработки; адрес (@) строки кэша; счетчик инструкций (IC[11]); что строка кэша перешла из состояния считывания (разделяемая) в состояние считывания (разделяемая); и что P2 имел предшествующий доступ к предшествующей строке кэша, но теперь P1 и P2 имеют доступ. Следует обратить внимание, что значение (DATA[5]) не нужно регистрировать, так как оно было зарегистрировано блоком P2 по ID[10]. [00101] Next, table 600a shows that, at ID[11], the processing unit P1 performs a read from the cache line, also reading data DATA[5]. Table 600b shows that the processor CCP notes that the cache line is now "shared" by blocks P0, P1, and P2. Table 600c shows that processing units P1 and P2 consumed a cache line (block bits 603), that P1 consumed a cache line (index bits 604), or that some processing unit consumed a cache line (flag bit 605). Note that for index bits 604 it would also be correct to still refer to P2 instead of P1. Table 600d shows that, using the CCP, the processor 102 determines that a transaction record should be registered. As shown, the processor 102 may flag a processing unit (P1); address (@) cache line; instruction counter (IC[11]); that the cache line has moved from the read (shared) state to the read (shared) state; and that P2 had previous access to the previous cache line, but now P1 and P2 have access. Note that the value (DATA[5]) does not need to be registered since it was registered by the P2 block at ID[10].

[00102] Далее, таблица 600a демонстрирует, что по ID[11] блок P0 обработки выполняет считывание из строки кэша, также считывая данные DATA[5]. Таблица 600b демонстрирует, что CCP обрабатывающего устройства отмечает, что строка кэша теперь "разделяется" блоками P0, P1 и P2. Таблица 600c демонстрирует, что блоки P0, P1 и P2 обработки потребляли строку кэша (биты 603 блоков), что P0 потреблял строку кэша (индексные биты 604) или что какой-то блок обработки потреблял строку кэша (флаговый бит 605). Отметим, что для индексных битов 604 также корректно было бы по-прежнему ссылаться на P1 или P2 вместо P0. Таблица 600d демонстрирует, что, используя CCP, обрабатывающее устройство 102 определяет, что запись операции должна быть зарегистрирована. В данном случае обрабатывающее устройство 102 может отметить блок (P0) обработки; адрес (@) строки кэша; счетчик инструкций (IC[12]); что строка кэша перешла из состояния считывания (разделяемая) в состояние считывания (разделяемая); и что P1 и P2 имели предшествующий доступ к предшествующей строке кэша, но теперь P0, P1 и P2 имеют доступ. Значение (DATA[5]) не регистрируется, так как оно доступно со стороны P2. [00102] Next, table 600a shows that, at ID[11], the processing unit P0 performs a read from the cache line, also reading data DATA[5]. Table 600b shows that the processor CCP notes that the cache line is now "shared" by blocks P0, P1, and P2. Table 600c shows that processing units P0, P1, and P2 consumed a cache line (block bits 603), that P0 consumed a cache line (index bits 604), or that some processing unit consumed a cache line (flag bit 605). Note that for index bits 604 it would also be correct to still refer to P1 or P2 instead of P0. Table 600d shows that, using the CCP, the processor 102 determines that a transaction record should be registered. In this case, the processing device 102 may mark the block (P0) processing; address (@) cache line; instruction counter (IC[12]); that the cache line has moved from the read (shared) state to the read (shared) state; and that P1 and P2 had previous access to the previous cache line, but now P0, P1 and P2 have access. The value (DATA[5]) is not logged because it is available from P2.

[00103] В качестве альтернативы, возможно, что обрабатывающее устройство 102 ссылается на P0 только по ID[12], так как P0 уже имеет значение строки кэша (т.е. потому что он записал это значение по ID[9]). Можно даже отказаться от любой регистрации по ID[12], так как можно использовать эвристические правила при воспроизведении для восстановления значения (т.е. DATA[5]) без представления информации о том, что P0 участвует в трассировке. Однако эти методы могут быть затратными в вычислительном отношении и снижать способность системы обнаруживать, когда воспроизведение "сорвано". Примером эвристического правила является признание того, что доступ к памяти разных блоков обработки, как правило, строго упорядочен (на основе данных CCP), поэтому при воспроизведении может использоваться последнее значение в этих блоках для данной ячейки памяти. [00103] Alternatively, it is possible that the processor 102 only refers to P0 by ID[12] because P0 already has a cache line value (i.e., because it has stored that value by ID[9]). It is even possible to opt out of any registration on ID[12] since it is possible to use replay heuristics to recover the value (ie DATA[5]) without being aware that P0 is involved in the trace. However, these techniques can be computationally expensive and reduce the system's ability to detect when playback is "ripped". An example of a heuristic is the recognition that memory accesses of different processing units are generally strictly ordered (based on CCP data), so the last value in those units for a given memory location can be used during playback.

[00104] Далее, таблица 600a демонстрирует, что по ID[13] строка кэша вытесняется. В результате таблица 600b демонстрирует, что элементы CCP пусты, таблица 600c демонстрирует, что учетные биты не отражают блоки обработки как потреблявшие строку кэша, а таблица 600d демонстрирует, что никакие данные не регистрируются. [00104] Next, table 600a shows that at ID[13] the cache line is being evicted. As a result, table 600b shows that the CCP entries are empty, table 600c shows that the accounting bits do not reflect processing units as having consumed a cache line, and table 600d shows that no data is logged.

[00105] Следует отметить, что хотя, для полноты, данные 606 регистрации перечисляют все конечные состояния доступа (т.е. какие блоки обработки в данный момент имеют доступ к строке кэша), эта информация потенциально неявно задана, и размер файла трассировки может быть уменьшен путем ее отбрасывания. Например, при переходе запись->считывание, список блоков обработки, имеющих доступ после считывания, всегда состоит из блока обработки, который имел предшествующий доступ, плюс блок обработки, который выполнил считывание. При переходе считывание->запись, или переходе запись->запись, список блоков обработки, имеющих доступ на запись после записи, всегда состоит из блока обработки, который выполнил запись. При переходе считывание->считывание, список блоков обработки, имеющих доступ после считывания, всегда состоит из блоков обработки, имевших доступ перед переходом, плюс блок обработки, который выполнил считывание. [00105] It should be noted that while, for completeness, log data 606 lists all final access states (i.e., which processing units currently have access to a cache line), this information is potentially implicit and the size of the trace file can be reduced by discarding it. For example, in a write->read transition, the list of processing units that have access after the read always consists of the processing unit that had the previous access, plus the processing unit that performed the read. On a read->write transition or a write->write transition, the list of processing units that have write access after a write always consists of the processing unit that performed the write. In a read->read transition, the list of processing units that have access after the read always consists of the processing units that had access before the jump plus the processing unit that performed the read.

[00106] В общем, чтобы сгенерировать полностью детерминированный файл трассировки, CCP будет предписывать, что все переходы (т.е. запись->считывание, запись->запись, считывание->запись и считывание->считывание) среди блоков обработки (например, от P0 к P1) регистрируются. Однако, переходы в пределах одного и того же блока обработки (например, от P0 к P0) не должны регистрироваться. Они не должны регистрироваться, потому что они будут повторяться посредством нормального исполнения потока выполнения, который исполнялся в этом блоке обработки. [00106] In general, in order to generate a fully deterministic trace file, CCP will dictate that all transitions (i.e., write->read, write->write, read->write, and read->read) among processing units (e.g. , from P0 to P1) are registered. However, transitions within the same processing block (for example, from P0 to P0) should not be registered. They do not need to be registered because they will be repeated through the normal execution of the thread of execution that was executing in that processing unit.

[00107] Следует понимать, что при использовании данных, таких как те, которые зарегистрированы в приведенном выше примере, и с дополнительными сведениями из CCP, используемого обрабатывающим устройством 102, на котором производилась запись, может быть реконструирована полная упорядоченность операций, которые происходили в каждом потоке выполнения, а также может быть реконструирована, по меньшей мере, частичная упорядоченность операций среди разных блоков обработки. Таким образом, в процессе индексации и/или посредством воспроизведения файла трассировки, в равной степени, каждая из вышеперечисленных операций может быть реконструирована, даже если они не все были явно записаны в файл(ы) 104d трассировки. [00107] It should be understood that by using data such as those recorded in the above example, and with additional information from the CCP used by the processing device 102 on which the recording was made, the full ordering of operations that occurred in each thread of execution, and at least a partial ordering of operations among different processing units can be reconstructed. Thus, during the indexing process and/or through the reproduction of the trace file, equally, each of the above operations can be reconstructed, even if they were not all explicitly recorded in the trace file(s) 104d.

[00108] В некоторых вариантах осуществления трассировщик 104a может записывать дополнительные пакеты данных в файл(ы) 104d трассировки для того, чтобы улучшить регистрацию упорядоченности операций среди блоков обработки. Например, трассировщик 104a может записывать некоторую информацию об упорядоченности событий, такую как монотонно прирастающие числа (MIN - monotonically incrementing number) (или какой-то другой счетчик/таймер), чтобы обеспечить полную упорядоченность событий, которые имеют MIN (или другой счетчик/таймер) среди потоков выполнения. Эти MIN могут использоваться для идентификации пакетов данных, соответствующих событиям, которые определены как "упорядочиваемые" среди потоков выполнения. Эти события могут определяться на основе "модели памяти трассировки", которая определяет, как потоки выполнения могут взаимодействовать через разделяемую память, и разделение ими данных в памяти. В качестве другого примера, трассировщик 104a может (периодически или случайным образом) записывать хэш-значение состояния обрабатывающего устройства на основе заданного детерминистского алгоритма и заданного набора регистров (например, программный счетчик, стек, регистры общего назначения, и т.д.). В качестве еще одного примера, трассировщик 104a может (периодически или случайным образом) принудительно регистрировать данные строки кэша. В качестве еще одного примера, трассировщик 104a может вносить в трассировку пакеты "переходов", которые регистрируют хэш-значение всех или части (например, несколько битов) данных, которые они неявно переносят. Таким образом, когда эти неявные данные реконструируются при воспроизведении, подходящие части этих неявных данных могут быть хэшированы и сопоставлены с этими пакетами перехода, чтобы помочь идентифицировать их упорядоченность. Это может быть полезно, например, если CCP не может отслеживать индексы обрабатывающего устройства, соотнесенные со строками кэша, если строки кэша находятся в разделяемом состоянии. [00108] In some embodiments, the tracer 104a may write additional data packets to the trace file(s) 104d in order to improve the recording of ordering of operations among processing units. For example, tracer 104a may record some event ordering information such as monotonically incrementing number (MIN) (or some other counter/timer) to ensure that events that have a MIN (or other counter/timer) are fully ordered. ) among threads of execution. These MINs can be used to identify data packets corresponding to events that are defined as "orderable" among threads of execution. These events can be defined based on a "trace memory model" that defines how threads of execution can communicate through shared memory and how they share data in memory. As another example, tracer 104a may (periodically or randomly) record a hash value of the processor state based on a predetermined deterministic algorithm and a predetermined set of registers (eg, program counter, stack, general purpose registers, etc.). As another example, tracer 104a may (periodically or randomly) force cache line data to be logged. As yet another example, tracer 104a may trace "jump" packets that record a hash value of all or a portion (eg, a few bits) of the data they implicitly carry. Thus, when this implicit data is reconstructed at playback, appropriate portions of this implicit data can be hashed and matched against these jump packets to help identify their ordering. This can be useful, for example, if CCP cannot keep track of processor indexes associated with cache lines if the cache lines are in a shared state.

[00109] Когда трассировщик 104a записывает дополнительные пакеты данных в файл(ы) 104d трассировки, чтобы улучшить упорядоченность, есть возможность пропустить запись некоторых переходов среди блоков обработки. Например, есть возможность пропустить запись некоторых переходов считывание->считывание среди потоков выполнения. Это может привести в некоторых ситуациях к "ослабленной" недетерминированной трассировке, поскольку упорядоченность некоторых считываний может быть невозможно полностью реконструировать на основе трассировки и CCP, но дополнительная информация об упорядоченности (например, MIN, хэш-значения состояния обрабатывающего устройства, дополнительные данные строки кэша) может помочь уменьшить область поиска во время воспроизведения, чтобы найти действительную упорядоченность считываний, которые не "срывают" воспроизведение трассировки. Преимущества пропуска некоторых переходов считывание->считывание среди потоков выполнения включают в себя размер трассировки и потенциально упрощенные модификации обрабатывающего устройства 101 для облегчения осуществления трассировки. [00109] When tracer 104a writes additional data packets to trace file(s) 104d to improve orderliness, it is possible to skip recording some transitions among processing blocks. For example, it is possible to skip writing some read->read transitions among threads of execution. This can lead in some situations to "weakened" non-deterministic tracing because the ordering of some reads may not be fully reconstructable from the trace and CCP, but additional information about the ordering (e.g. MIN, processor state hash values, additional cache line data) can help reduce the scope of the search during playback to find a valid read order that does not "break" trace playback. The benefits of skipping some read->read transitions among threads of execution include the size of the trace and potentially simplified modifications to the processor 101 to facilitate the implementation of the trace.

[00110] Фиг. 7A показывает пример, в котором некоторые переходы считывание->считывание могут быть исключены из трассировки в зависимости от того, как отслеживаются обрабатывающие устройства. Подобно Фиг. 6A, Фиг. 7A включает в себя таблицу 700a с глобальным ID 701 и три столбца (702a-702c), соответствующих трем блокам обработки (P0-P2). Пропуск некоторых переходов считывание->считывание основывается на двух наблюдениях. Во-первых, записи должны быть упорядочены; однако все считывания между двумя последовательными записями (например, считывания по ID[3]-ID[7]) будут считывать одно и то же значение, так что порядок среди этих считываний не имеет значения (а значит трассировка с пропущенными переходами считывание->считывание может быть детерминированной). Во-вторых, наличие "пересечения" считывания и записи при воспроизведении (т.е. считывание и запись в одной и той же строке кэша, воспроизводимые в неправильном порядке) означает, что правильные данные не используются для воспроизведения; однако, наличие данных (например, MIN и т.д.), позволяющих избежать этой ошибки, поможет идентифицировать действительную упорядоченность. [00110] FIG. 7A shows an example where some read->read transitions may be excluded from the trace depending on how processors are tracked. Like Fig. 6A, FIG. 7A includes a table 700a with a global ID of 701 and three columns (702a-702c) corresponding to three processing units (P0-P2). The omission of some read->read transitions is based on two observations. First, the entries must be in order; however, all reads between two consecutive writes (for example, reads by ID[3]-ID[7]) will read the same value, so the order among these reads does not matter (hence tracing with skipped read->read transitions). may be deterministic). Second, the presence of a "crossover" of reads and writes on replay (ie, reads and writes on the same cache line being replayed in the wrong order) means that the correct data is not being used for replay; however, having data (eg MIN, etc.) to avoid this error will help identify the actual ordering.

[00111] В примере, продемонстрированном в таблице 700a, блок P2 обработки выполняет только считывание разделяемых данных, и эти разделяемые считывания только "захватываются" из других считываний (например, полагая, что ID[9] оставил строку кэша разделяемой). Если никакие элементы регистрации не вносятся ни для одного из переходов считывание->считывание (т.е. ID[4]-ID[7] и ID[10]), в трассировке не будет информации для правильного размещения считываний P2. На основе записей можно сделать вывод, что P2 никогда не считывает значение DATA[1] (т.е. так как запись по ID[2] не захватывается из P2), и в отсутствие элементов регистрации для переходов считывание->считывание P2 (т.е. ID[4], ID[7] и ID[10]), все, о чем можно сделать вывод для P2, заключается в том, что было, по меньшей мере, одно считывание со стороны P2 между ID[2] и ID[8]. Однако, если были элементы регистрации для ID[4] и ID[10], может быть определено расположение остальных считываний, регистрация которых может не потребоваться (т.е. ID[5]-ID[7], как показано на Фиг. 7B). Каждое из этих считываний относится к тому же разделу между записями, что и последнее зарегистрированное считывание (т.е. по ID[4]). Следовательно, расположение этих считываний может быть определено на основе того, что записи захватываются (а если нет операции захвата считывания, то нет записи после нее до следующего зарегистрированного пакета). [00111] In the example shown in table 700a, the processing unit P2 only performs shared data reads, and these shared reads are only "captured" from other reads (eg, assuming that ID[9] left the cache line shared). If no registration entries are made for any of the read->read transitions (ie, ID[4]-ID[7] and ID[10]), there will be no information in the trace to correctly place the P2 reads. Based on the entries, it can be inferred that P2 never reads the value of DATA[1] (i.e., since the entry by ID[2] is not captured from P2), and in the absence of registration elements for P2's read->read transitions (i.e., i.e. ID[4], ID[7] and ID[10]), all that can be inferred for P2 is that there was at least one read from P2 between ID[2] and ID[8]. However, if there were registration entries for ID[4] and ID[10], the location of the remaining reads that may not need to be registered (i.e., ID[5]-ID[7] can be determined, as shown in Fig. 7B ). Each of these reads belongs to the same partition between records as the last registered read (ie, by ID[4]). Therefore, the location of these reads can be determined based on what writes are captured (and if there is no capture read operation, then there is no write after it until the next registered packet).

[00112] Принимая во внимание таблицу 700a, Фиг. 7B показывает пример регистрации данных с пропуском переходов считывание->считывание, выделенных на Фиг. 7A, которые могли быть зарегистрированы, если используются "биты блоков". Фиг. 7C показывает таблицу 700c, которая демонстрирует регистрацию данных, которые могут быть записаны, если используются "индексные биты", и индексы обновляются при считываниях. [00112] Considering table 700a, FIG. 7B shows an example of data logging skipping the read->read transitions highlighted in FIG. 7A that could be registered if "block bits" are used. Fig. 7C shows a table 700c that shows the logging of data that can be written if "index bits" are used and the indices are updated on reads.

[00113] Как вкратце упоминалось выше, некоторые кэши включают в себя как инклюзивные, так и эксклюзивные уровни (т.е. не полностью инклюзивный кэш). Методы регистрации, описанные в данном документе, применимы к этим кэшам, как и к целиком инклюзивным или эксклюзивным кэшам. В качестве примера, Фиг. 8A показывает вычислительную среду 800a, которая включает в себя два обрабатывающих устройства 801a/801b (например, два обрабатывающих устройства в соответствующих гнездах). Каждое обрабатывающее устройство 801 включает в себя четыре блока 802a/802b обработки (например, физические или логические блоки обработки). Каждое обрабатывающее устройство 801 также включает в себя трехуровневый кэш, включающий в себя уровень 803a/803b L1, уровень 804a/804b L2 и уровень 805a/805b L3. Как показано, каждый кэш включает в себя четыре кэша 803 L1, каждый из которых соответствует одному из блоков 802 обработки. Помимо этого, каждый кэш включает в себя два кэша 804 L2, каждый из которых соответствует двум из блоков 802 обработки. Помимо этого, каждый кэш включает в себя один кэш 805 L3 для всех блоков 802 обработки в обрабатывающем устройстве 801. Блоки обработки и некоторые из кэшей идентифицируются индивидуально, например, блоки 802a обработки обрабатывающего устройства 801a идентифицируются как A0-A3, кэши L2 идентифицируются как A4 и A5, а кэш L3 идентифицируется как A6. Подобные идентификаторы используются для соответствующих компонентов в обрабатывающем устройстве 801b. Звездочки (*), соотнесенные с блоками A0, A1, A2, B0 и B1 обработки, указывают, что регистрация разрешена для этих блоков обработки. [00113] As briefly mentioned above, some caches include both inclusive and exclusive levels (ie not fully inclusive cache). The registration methods described in this document apply to these caches as well as to fully inclusive or exclusive caches. As an example, FIG. 8A shows a computing environment 800a that includes two processors 801a/801b (eg, two processors in respective slots). Each processor 801 includes four processing units 802a/802b (eg, physical or logical processing units). Each processor 801 also includes a three-level cache including L1 layer 803a/803b, L2 layer 804a/804b, and L3 layer 805a/805b. As shown, each cache includes four L1 caches 803, each corresponding to one of the processing units 802. In addition, each cache includes two L2 caches 804, each corresponding to two of the processing units 802. In addition, each cache includes one L3 cache 805 for all processing units 802 in processor 801. Processing units and some of the caches are identified individually, for example, processors 802a of processor 801a are identified as A0-A3, L2 caches are identified as A4 and A5, and the L3 cache is identified as A6. Similar identifiers are used for the respective components in the processor 801b. Asterisks (*) associated with processing units A0, A1, A2, B0, and B1 indicate that registration is enabled for these processing units.

[00114] В вычислительной среде 800a кэши могут проявлять сочетание инклюзивного и эксклюзивного поведения. Например, для кэша L3 A6 обрабатывающего устройства 801a может быть неэффективно хранить строку кэша, если ее использует только блок A0 обработки. Вместо этого, в таком случае строка кэша может быть сохранена в кэше L1 A0 и кэше L2 A4, но не в кэше L1 A1 или кэше L2 A5 или более низких кэшах. Чтобы освободить место, некоторые кэши могут позволить кэшу L3 A6 вытеснить эту строку кэша в такой ситуации. Когда это происходит, A1 может получить строку кэша из кэша L2 A4, как это было бы нормально в инклюзивном кэше. Однако, поскольку строка кэша не существует в кэше L3 A6 или кэше L2 A5, некоторые реализации кэша могут также позволить боковое смещение строки кэша, к примеру, из кэша L1 A0 в кэши L1 A2 или A3. Это может создать некоторые проблемы для трассировки с использованием CCP. Приведенные ниже примеры показывают, как может совершаться трассировка с использованием CCP в таких ситуациях. [00114] In computing environment 800a, caches may exhibit a combination of inclusive and exclusive behavior. For example, for the L3 cache A6 of the processor 801a, it may be inefficient to store a cache line if only processing unit A0 uses it. Instead, in such a case, the cache line may be stored in the L1 cache A0 and the L2 cache A4, but not in the L1 cache A1 or the L2 cache A5 or lower caches. To free up space, some caches may allow the A6 L3 cache to evict that cache line in such a situation. When this happens, A1 can get the cache line from A4's L2 cache, as would be normal in an inclusive cache. However, since the cache line does not exist in the L3 A6 cache or the L2 A5 cache, some cache implementations may also allow the cache line to side-shift, for example, from the L1 A0 cache to the L1 A2 or A3 caches. This can create some problems for tracing using CCP. The examples below show how tracing can be done using CCP in such situations.

[00115] Фиг. 8B показывает таблицу 800b, которая демонстрирует иллюстративные операции считывания и записи, выполняемые некоторыми блоками 802 обработки. Формат таблицы 800b аналогичен формату таблицы 600a. С учетом вычислительной среды 800a и таблицы 800b, теперь приводятся три разных примера регистрации, каждый из которых использует разные варианты поведения кэша. Эти примеры описываются в контексте следующих принципов регистрации с использованием CCP: [00115] FIG. 8B shows a table 800b that shows exemplary read and write operations performed by some processing units 802. The format of table 800b is similar to that of table 600a. Given computing environment 800a and table 800b, three different registration examples are now provided, each using different cache behaviors. These examples are described in the context of the following registration principles using CCP:

(1) Как правило, данные регистрируют, когда адрес (строка кэша) переходит от "незарегистрированной" к "зарегистрированной" (т.е. на основе определения того, что строка кэша участвует в регистрации, на этапе 304);(1) Typically, data is logged when an address (cache line) goes from "unregistered" to "registered" (ie, based on determining that the cache line is participating in the registration, at step 304);

(2) Как правило, отказываются от регистрации, когда строка кэша переходит от "зарегистрированной" к "незарегистрированной" или "вытесненной" (хотя регистрация по-прежнему будет действительной, если эти данные будут зарегистрированы). Тем не менее, это действительно для регистрации вытеснений данных. Это увеличивает размер трассировки, но предоставляет дополнительную информацию, которая может помочь идентифицировать упорядоченность среди потоков данных трассировки, может помочь идентифицировать, когда воспроизведение трассировки "сорвано", и может обеспечить дополнительный анализ трассировки. Что касается анализа трассировки, регистрация вытеснений данных может предоставить больше информации о том, как использовался кэш, может использоваться для идентификации характеристик производительности исполняемого кода и может помочь точно определить временное окно, в течение которого данная строка кэша хранила конкретное значение. Варианты осуществления для регистрации вытеснений данных обсуждаются позже применительно к Фиг. 10A и 10B;(2) Registration is generally discarded when the cache line goes from "registered" to "unregistered" or "crowded out" (although the registration will still be valid if that data is registered). However, this is valid for logging data evictions. This increases the size of the trace, but provides additional information that may help identify ordering among trace data streams, may help identify when trace playback is broken, and may provide additional trace analysis. As far as trace analysis is concerned, data eviction logging can provide more information about how the cache was used, can be used to identify performance characteristics of executable code, and can help pinpoint the time window for which a given cache line held a particular value. Embodiments for registering data wipes are discussed later with respect to FIG. 10A and 10B;

(3) Смещение регистрируют, когда строка кэша смещается между ядрами или статусом когерентности кэша таким образом, что предоставляется новая информация;(3) Offset is detected when a cache line is shifted between cores or cache coherency status such that new information is provided;

(4) Когда блок обработки делает запись, делают недействительной строку кэша для всех других блоков обработки. Если строка кэша не была уже зарегистрирована для блока обработки, система может либо не регистрировать строку кэша, либо рассматривать запись как: (i) считывание (т.е. которое регистрирует строку кэша и включает отслеживание регистрации), вместе с (ii) записью, предполагая, что память в строке кэша доступна для чтения блоку обработки. Может быть допустимо, но менее эффективно, чтобы обрабатывающее устройство отключило регистрацию и не регистрировало запись, но это приведет к потере информации, которая должна быть реконструирована при воспроизведении, и в среднем это может быть неэффективным по размеру трассировки, так как дешевле зарегистрировать ссылку, чем регистрировать полную строку кэша данных позже;(4) When a processing unit writes, invalidate the cache line for all other processing units. If the cache line has not already been registered for the processing unit, the system may either not register the cache line, or treat the write as: (i) a read (i.e. that registers the cache line and enables registration tracking), together with (ii) a write, assuming the memory in the cache line is readable by the processing unit. It may be acceptable, but less efficient, for the processor to disable logging and not log a record, but this will lose information that needs to be reconstructed on playback, and on average this may be inefficient in terms of trace size, since it is cheaper to register a link than register full data cache line later;

(5) Обоснованной является чрезмерная регистрация (например, как в принципе 2 выше), чтобы помочь с реконструкцией трассировки позже. Хотя это наращивает размер трассировки, это не влияет на корректность. Например, некоторые переходы считывание->считывание могут быть пропущены (как описано выше применительно к Фиг. 7A-7C), но любой межъядерный переход, который начинается или заканчивается записью, должен быть явно или неявно зарегистрирован. В другом примере варианты осуществления могут добавлять дополнительные пакеты данных (например, которые предоставляют дополнительную информацию об упорядоченности и/или хэш-значения) к трассировке в любое время. В еще одном примере варианты осуществления могут производить регистрацию, когда сначала совершается запись в строку кэша после ее CCP-перехода в состояние записи (т.е. происходящее позже гипотетическое исполнение может привести к переходу строки кэша в состояние записи, но фактически не совершить какую-либо запись в нее). Регистрация этих записей может позже облегчить разнесение потоков трассировки по ядрам. В еще одном примере варианты осуществления могут регистрировать косвенные скачки или другую информацию, которая помогает быстро уменьшить область поиска, отделяя потоки данных трассировки; и(5) It is reasonable to overregister (eg as in principle 2 above) to help with trace reconstruction later. Although this increases the size of the trace, it does not affect correctness. For example, some read->read transitions may be skipped (as described above with respect to FIGS. 7A-7C), but any internuclear transition that starts or ends with a write must be explicitly or implicitly registered. In another example, embodiments may add additional data packets (eg, which provide additional ordering information and/or hash values) to the trace at any time. In yet another example, embodiments may register when a cache line is first written after its CCP transition to the write state (i.e., a later hypothetical execution may cause the cache line to enter the write state, but not actually commit any or write to it). Logging these entries can make it easier to spread trace streams across cores later. In yet another example, embodiments may log indirect hops or other information that helps to quickly reduce the search area by separating trace data streams; and

(6) Неполная регистрация (т.е. регистрация без всех зарегистрированных переходов) все еще может использоваться для воспроизведения трассировки. Это может привести к дополнительным вычислительным затратам во время воспроизведения для расчета недостающих фрагментов.(6) Incomplete registration (i.e. registration without all registered transitions) can still be used to reproduce the trace. This may result in additional computational overhead during playback to calculate the missing fragments.

[00116] В первом примере, показанном на Фиг. 8C, CCP отслеживает статус строки кэша для каждого блока обработки (т.е. каждое ядро имеет свой собственный статус считывания и записи). В этом примере кэш ведет себя во многом как инклюзивный кэш, за исключением того, что могут быть данные, которые осуществляют смещение с проходом через кэши или через гнезда, которые недоступны во время регистрации. Для краткости, в этих примерах блоки 802 обработки упоминаются как "ядра", а обрабатывающие устройства 801a и 801b упоминаются как обрабатывающие устройства A и B или гнезда A и B. Дополнительно, упрощенная система обозначений регистрации в виде "ID:Core:From:Transition(т.е. от->к)" используется для представления типов данных, которые могут быть зарегистрированы. Эта система обозначений объясняется более подробно в свою очередь. Для первого примера регистрация может включать в себя: [00116] In the first example shown in FIG. 8C, the CCP keeps track of the cache line status for each processing unit (ie, each core has its own read and write status). In this example, the cache behaves much like an inclusive cache, except that there may be data that moves through caches or through slots that are not available at the time of registration. For brevity, in these examples, processors 802 are referred to as "cores" and processors 801a and 801b are referred to as processors A and B or slots A and B. Additionally, a simplified registration notation of the form "ID:Core:From:Transition (i.e. from->to)" is used to represent the types of data that can be registered. This notation is explained in more detail in turn. For the first example, the registration might include:

[00117] По ID[0], "0:A0:R[DATA]->[1]", т.е., по ID[0], регистрируют, что ядро A0 считывает DATA[1], в соответствии с вышеупомянутым принципом 1. [00117] By ID[0], "0:A0:R[DATA]->[1]", i.e., by ID[0], it is registered that the A0 core reads DATA[1], according to the aforementioned principle 1.

[00118] По ID[1], "1:B0:R[DATA]->[1]", т.е., по ID[1], регистрируют, что ядро B0 считывает DATA[1], также в соответствии с вышеупомянутым принципом 1. Если кэш в обрабатывающем устройстве B не знает, что A0 уже зарегистрировало данные, то обрабатывающее устройство B регистрирует их само. В качестве альтернативы, если кэш в обрабатывающем устройстве B знает, что A0 зарегистрировало DATA[1], то элемент регистрации может включать в себя "1:B0:R[A0]->R". [00118] By ID[1], "1:B0:R[DATA]->[1]", i.e., by ID[1], it is registered that the B0 core reads DATA[1], also according to with the above principle 1. If the cache in processor B does not know that A0 has already registered data, then processor B registers it itself. Alternatively, if the cache at processor B knows that A0 has registered DATA[1], then the registration element may include "1:B0:R[A0]->R".

[00119] По ID[2], "2:A1:R[A0]->R", т.е., по ID[2], регистрируют, что ядро A1 совершило переход считывание->считывание, и что A0 имело доступ. Поскольку состоянием строки кэша является разделяемая обрабатывающим устройством B, элемент может иметь вид "2:A1:R:[A0,B0]->R", т.е., по ID[2], регистрируют, что ядро A1 совершило переход считывание->считывание, и что A0 и B0 имели доступ. Поскольку пересечение гнезд обычно требует больше затрат, чем регистрация в пределах гнезда, первый элемент регистрации может быть предпочтительным для переходов считывание->считывание. Однако при регистрации записей в/из, которые проходят через гнезда, регистрация также проходит через гнезда. [00119] By ID[2], "2:A1:R[A0]->R", i.e., by ID[2], it is recorded that core A1 has made a read->read transition, and that A0 had access. Since the state of the cache line is shared by processor B, the entry may be of the form "2:A1:R:[A0,B0]->R", i.e., by ID[2], it is registered that core A1 has made a read branch ->read, and that A0 and B0 had access. Since traversing nests is usually more expensive than registering within a nest, the first registration element may be preferred for read->read transitions. However, when registering records to/from that go through sockets, the registration also goes through sockets.

[00120] По ID[3] некоторые варианты осуществления ничего не регистрируют. В качестве альтернативы, поскольку ядро A2 еще ничего не регистрировало, и первое, что оно делает, это запись, это может быть зарегистрировано как считывание->считывание. В любом случае, поскольку запись произошла, свое состояние строки кэша других ядер является недействительная. Затраты (например, исходя из данных трассировки) на регистрацию считывание->запись по ID[3], как правило, будут меньше, чем регистрация фактических данных по ID[4], а значит может быть выгодно регистрировать на этой стадии. В этом случае элемент регистрации может включать в себя "3:A2:R[A0,B1,B0]->W", т.е. ядро A2 совершило переход считывание->запись, а ядра A0, B1, и B0 имели доступ. [00120] According to ID[3], some embodiments do not register anything. Alternatively, since core A2 hasn't registered anything yet and the first thing it does is write, this can be registered as read->read. In any case, since the write has occurred, its cache line state of the other cores is invalidated. The cost (e.g. based on trace data) of logging a read->write on ID[3] will typically be less than logging the actual data on ID[4], so it may be advantageous to log at this stage. In this case, the registration element may include "3:A2:R[A0,B1,B0]->W", i.e. core A2 made a read->write transition, and cores A0, B1, and B0 had access.

[00121] То, что происходит по ID[4], зависит от того, что было зарегистрировано по ID[3]. Если ничего не было зарегистрировано по ID[3], то данные регистрируются (т.е. "4:A2:R[DATA]->[2]"). С другой стороны, если пакет был зарегистрирован по ID[3], то регистрировать нечего. [00121] What happens on ID[4] depends on what was registered on ID[3]. If nothing has been registered for ID[3], then data is registered (ie "4:A2:R[DATA]->[2]"). On the other hand, if the package was registered by ID[3], then there is nothing to register.

[00122] По ID[5] имеется считывание, которое проходит через ядра. Однако, если ядро A2 все еще имеет строку кэша в виде модифицированной (или эквивалентной), тогда строка кэша обслуживает запрос (он не может быть обслужен из памяти). В этом случае гнездо B будет знать, что он поступил из гнезда A, и повторной регистрации данных можно избежать; это может быть зарегистрировано как "5:B0:W[A2]->R". Если кэш получил данные из основной памяти (это может иметь место, если гнездо A смогло обновить основную память и поделиться своим состоянием когерентности кэша для строки), тогда элемент может представлять собой "5:B0:R[DATA]->2". [00122] ID[5] has a read that goes through the cores. However, if core A2 still has the cache line modified (or equivalent), then the cache line serves the request (it cannot be served from memory). In this case, slot B will know that it came from slot A, and re-logging of data can be avoided; this can be logged as "5:B0:W[A2]->R". If the cache received data from main memory (this could be the case if slot A was able to update main memory and share its cache coherence state for the line), then the entry could be "5:B0:R[DATA]->2".

[00123] По ID[6] операция является нормальным считыванием. Аналогично считыванию по ID[2], гнездо B может знать о данных гнезда A или нет. Если да, элемент регистрации может включать в себя "6:B1:R[B0,A2]->R"; в противном случае он может включать в себя "6:B1:R[B0]->R". [00123] By ID[6], the operation is a normal read. Similar to reading by ID[2], slot B may or may not be aware of the data in slot A. If yes, the registration element may include "6:B1:R[B0,A2]->R"; otherwise, it may include "6:B1:R[B0]->R".

[00124] По ID[7], если строка кэша для B0 не была вытеснена, регистрировать нечего. Если она была вытеснена, обрабатывающее устройство B регистрирует данные как поступающие от другого ядра, или регистрирует данные строки кэша. Это вытеснение одного ядра, но не других в гнезде, как правило, не происходит в полностью инклюзивных кэшах. В полностью инклюзивном кэше, если какое-либо ядро в гнезде имеет строку кэша в своем кэше L1, то и L3 имеет строку кэша, так что строка кэша не может быть вытеснена для одного ядра, но не для другого. [00124] Per ID[7], if the cache line for B0 has not been evicted, there is nothing to register. If it has been evicted, processor B registers the data as coming from another core, or registers cache line data. This preemption of one core but not others in the socket generally does not occur in fully inclusive caches. In a fully inclusive cache, if any core in a socket has a cache line in its L1 cache, then L3 has a cache line, so a cache line cannot be evicted for one core but not another.

[00125] По ID[8], поскольку ядро A0 ничего не регистрировало с того времени, и первой операцией для регистрации является запись, это аналогично операции по ID[3]. Обрабатывающее устройство A может зарегистрировать это как считывание->запись; в качестве альтернативы, но возможно менее предпочтительно, обрабатывающее устройство A может ничего не регистрировать. Если пакет зарегистрирован, его содержание будет варьироваться в зависимости от того, может ли гнездо A видеть гнездо B. Если нет, пакет может включать в себя "8:A0:R[A2]->W", а если это возможно, пакет может включать в себя "8:A0:R[B0,B1,A2]->W". [00125] By ID[8], since core A0 has not registered anything since then, and the first operation to register is a write, this is similar to the operation by ID[3]. Processor A can log this as a read->write; alternatively, but perhaps less preferably, processor A may register nothing. If the packet is registered, its contents will vary depending on whether slot A can see slot B. If not, the packet MAY include "8:A0:R[A2]->W", and if possible, the packet MAY include "8:A0:R[B0,B1,A2]->W".

[00126] По ID[9] регистрировать нечего, если пакет был зарегистрирован по ID[8] (так как это запись в уже зарегистрированный кэш), хотя состояние строки кэша для других ядер обычно становится недействительным, если оно еще не было таким. [00126] There is nothing to log on ID[9] if the package was registered on ID[8] (since it is an entry in an already registered cache), although the state of the cache line for other cores is usually invalidated if it was not already.

[00127] По ID[10] регистрация зависит от того, что было зарегистрировано по ID[8]. Если никакие данные не были зарегистрированы по ID[8], то это должно быть сделано на этой стадии, поэтому пакет может включать в себя "10:A1:R[DATA]->[4]". Если пакет был зарегистрирован по ID[8], это представляет собой нормальный пакет запись>считывание (например, "10:A1:W[A0]->R"). [00127] By ID[10] registration depends on what was registered by ID[8]. If no data has been registered on ID[8], then it must be done at this stage, so the packet may include "10:A1:R[DATA]->[4]". If the packet was registered by ID[8], this is a normal write>read packet (eg "10:A1:W[A0]->R").

[00128] По ID[11] регистрируется переход считывание->считывание. Если пакет был зарегистрирован по ID[8], то A0 находится в исходном списке ядер (например, "11:A2:R[A0,A1]->R"); в противном случае A0 отсутствует в списке (например, "11:A2:R[A1]->R"). [00128] ID[11] registers a read->read transition. If the package was registered by ID[8], then A0 is in the original kernel list (for example, "11:A2:R[A0,A1]->R"); otherwise A0 is not in the list (eg "11:A2:R[A1]->R").

[00129] По ID[12], если гнездо B может видеть гнездо A, это представляет собой пакет считывание->считывание (например, "12:B0:R[A0,A1,A2]->R"). Если не может, то это представляет собой полную регистрацию данных (например, "12:B0:R[DATA]->[4]"). [00129] According to ID[12], if socket B can see socket A, this is a read->read packet (eg, "12:B0:R[A0,A1,A2]->R"). If it cannot, then it is a complete data logging (eg "12:B0:R[DATA]->[4]").

[00130] По ID[13] данные поступают от B0, а также гнезда A, если оно видно (например, "13:B1:R[A0,A1,A2,B0]->R"). В списке может быть пропущено ядро A0, если запись не была зарегистрирована по ID[8]. [00130] At ID[13], data comes from B0, as well as socket A if visible (eg, "13:B1:R[A0,A1,A2,B0]->R"). The A0 core may be omitted from the list if the entry was not registered by ID[8].

[00131] По ID[14] ничего не должно регистрироваться, если пакет, зарегистрированный по ID[8], действительно уже регистрировался. В противном случае A0 получит данные от A1 и A2, а также, возможно, гнезда B, если оно может быть увидено. Таким образом, пакет может включать в себя "14:A0:R[A1,A2,B0,B1]->R". [00131] At ID[14], nothing should be registered if the package registered at ID[8] has indeed already been registered. Otherwise, A0 will receive data from A1 and A2, and possibly socket B if it can be seen. Thus, the packet may include "14:A0:R[A1,A2,B0,B1]->R".

[00132] Следует отметить, что хотя в этом примере гнезда регистрировались вместе, корректно будет регистрировать каждое гнездо по отдельности, подобно тому, как потоки выполнения могут регистрироваться по отдельности. Это может привести к трассировкам большего размера, но имеет то преимущество, что нет необходимости менять какой-либо механизм связи между гнездами в обрабатывающем устройстве. [00132] It should be noted that although the sockets were registered together in this example, it would be correct to register each socket separately, similar to how threads of execution can register separately. This can lead to larger traces, but has the advantage that there is no need to change any communication mechanism between sockets in the processor.

[00133] Кроме того, в любой момент времени строка кэша может быть вытеснена, что будет означать, что данные должны быть собраны из другого ядра или повторно зарегистрированы. Например, если до ID[11] у A0 была вытеснена строка кэша, то A2 получит значение от A1. Если и A1 и A0 были вытеснены, то обрабатывающему устройству A может потребоваться зарегистрировать значение строки кэша в трассировку для A2. [00133] In addition, at any point in time, the cache line may be evicted, which would mean that the data must be collected from another core or re-registered. For example, if A0 had a cache line evicted before ID[11], then A2 will get the value from A1. If both A1 and A0 have been evicted, then processor A may need to log the value of the cache line into the trace for A2.

[00134] Наконец, некоторые обрабатывающие устройства могут знать, что данные поступают от другого гнезда, но не знают от какого ядра в том гнезде. В этих случаях обрабатывающее устройство может регистрировать старшинство (источник) как ID гнезда, регистрировать сами данные, или регистрировать ID гнезда и хэш-значение данных (т.е., чтобы помочь упорядочить доступы между гнездами, но не должно регистрировать все данные в трассировку). [00134] Finally, some processors may know that data is coming from another socket, but not from which core in that socket. In these cases, the processor may log the seniority (source) as the slot ID, log the data itself, or log the slot ID and hash value of the data (i.e., to help order accesses between slots, but should not log all of the data into the trace) .

[00135] Во втором примере, показанном на Фиг. 8D, CCP использует индексы вместо отслеживания когерентности кэша каждого ядра в отдельности. В этой среде индекс может отслеживаться между гнездами или внутри гнезда. С учетом сравнения производительности средств связи между гнездами и внутри гнезда, последний случай (внутри гнезда) может быть более рациональным. Когда индекс отслеживается внутри гнезда, для трассировки может потребоваться зарегистрировать что-то, когда данные смещаются между гнездами. Это может включать в себя регистрацию индекса из другого гнезда (но это не обязательно может быть однозначно достаточным для детерминированной трассировки), регистрацию хэш-значения одной или нескольких частей значения строки кэша, или регистрацию пакета в трассировке отправляющего гнезда для указания того, что данные были отправлены. [00135] In the second example shown in FIG. 8D, CCP uses indexes instead of keeping track of cache coherency on a per-core basis. In this environment, the index can be tracked between nests or within a nest. Given the performance comparison of inter-socket and intra-socket communications, the latter case (inside the nest) may be more rational. When an index is tracked within a socket, the trace may need to log something when data is shifted between sockets. This may include registering an index from another socket (but this may not necessarily be unambiguously sufficient for a deterministic trace), registering a hash value of one or more parts of a cache line value, or registering a packet in the sending socket trace to indicate that the data was sent.

[00136] Когда отслеживаются индексы ядра, при использовании неполностью инклюзивного кэша, возникает осложнение, когда кэш L1 может иметь данные, которых нет в кэше L3. Так, например, представим следующую последовательность событий: (i) A0 получает строку (а значит индексные биты относятся к A0) в свой кэш L1; (ii) A1 получает строку (а значит индексные биты относятся к A1) в свой кэш L1; (iii) кэш L3 вытесняет строку; (iv) A1 вытесняет строку из своего кэша L1; и (v) A2 получает строку кэша от A0 в свой кэш L1. Суть в том, что хотя A2 получает строку кэша от A0, индекс не относится к A0. Это осложняет регистрацию отображений в трассировку. Некоторые решения могут включать в себя добавление дополнительной информации (как описано выше), такой как хэш-значение одной или более частей данных строки кэша, периодическое добавление избыточной информации, подобной хэш-значению регистров общего назначения, и т.д. Регистрация вытеснений данных тоже может помочь, но это может значительно увеличить размер файла трассировки и усложнить регистрацию (например, регистрируя вытеснения данных из кэша L1, которых нет в кэшах L2 или L3, но не регистрируя вытеснения данных из кэша L1, которые находятся в кэшах L2 или L3). [00136] When kernel indexes are tracked, when using a cache that is not fully inclusive, a complication arises when the L1 cache may have data that is not in the L3 cache. So, for example, imagine the following sequence of events: (i) A0 receives a row (and thus the index bits refer to A0) into its L1 cache; (ii) A1 receives the string (and hence the index bits refer to A1) into its L1 cache; (iii) the L3 cache flushes out the line; (iv) A1 evicts the line from its L1 cache; and (v) A2 gets the cache line from A0 into its L1 cache. The bottom line is that although A2 gets the cache line from A0, the index does not belong to A0. This makes it difficult to register mappings in a trace. Some solutions may include adding additional information (as described above) such as a hash value of one or more pieces of cache line data, periodically adding redundant information like a hash value of general purpose registers, and so on. Logging data evictions can also help, but it can significantly increase the size of the trace file and make logging more difficult (for example, logging data evictions from the L1 cache that are not in the L2 or L3 caches, but not logging data evictions from the L1 cache that are in the L2 caches or L3).

[00137] В некоторых вариантах осуществления, когда данные смещаются из кэша L3 в дочерние кэши L2 или L1, элемент регистрации вносится только при изменении индекса. Например, предположим, что A0 имел строку в своем кэше L1 (а значит индексные биты относятся к A0), затем A1 получает строку в свой кэш L1 (индекс в зоне A1), затем оба вытесняют строку кэша, но общий L2 (или L3) все еще имеет ее. Если кэш L2 обслуживает A1, то регистрировать нечего. Если кэш L2 обслуживает A0, то не требуется вносить элемент регистрации, если известно, что A0 уже имело данные; но если это неизвестно (или не может быть определено), имело ли уже A0 данные, то обрабатывающему устройству может потребоваться зарегистрировать считывание->считывание. [00137] In some embodiments, when data is shifted from the L3 cache to child L2 or L1 caches, the registration entry is only inserted when the index changes. For example, suppose A0 had the line in its L1 cache (so the index bits refer to A0), then A1 gets the line into its L1 cache (index in zone A1), then both pop the cache line, but the shared L2 (or L3) still has it. If the L2 cache serves A1, then there is nothing to register. If the L2 cache serves A0, then no registration entry is required if it is known that A0 already had data; but if it is not known (or cannot be determined) whether A0 already had data, then the processor may need to register read->read.

[00138] Таблица 800d представляет регистрацию операций из таблицы 800b, при условии, что гнезда регистрируются независимо, что отслеживание выполняется посредством индекса, что нет дополнительных скрытых вытеснений данных, и что все записи, которые влияют на CCP и которые происходят при включенной регистрации, регистрируются (например, одна запись должна быть зарегистрирована, если последующие записи со стороны того же ядра и нет доступа между записями со стороны другого ядра или другого внешнего объекта). Для второго примера регистрация может включать в себя: [00138] Table 800d represents the log of operations from table 800b, provided that slots are logged independently, that tracking is done by index, that there are no additional latent data evictions, and that all writes that affect CCP and that occur when logging is enabled are logged. (for example, one entry must be registered if subsequent entries are from the same kernel and there is no access between entries from another kernel or other external object). For the second example, the registration might include:

[00139] Для ID[0], "0:A0:R[DATA]->[1]". [00139] For ID[0], "0:A0:R[DATA]->[1]".

[00140] Для ID[1], "1:B0:R[DATA]->[1]", т.е. напомним, что каждое гнездо регистрируется отдельно. [00140] For ID[1], "1:B0:R[DATA]->[1]", i.e. recall that each nest is registered separately.

[00141] Для ID[2], "2:A1:R [A0]->R". [00141] For ID[2], "2:A1:R [A0]->R".

[00142] Для ID[3], "3:A2:R [A1]->W". [00142] For ID[3], "3:A2:R [A1]->W".

[00143] Для ID[4], ничего. [00143] For ID[4], nothing.

[00144] Для ID[5], "5:B0:R[DATA]->[2]". Это обусловлено тем, что запись по ID[3] делает недействительной строку по всем гнездам, а гнезда трассируются независимо (как указано выше). [00144] For ID[5], "5:B0:R[DATA]->[2]". This is because writing to ID[3] invalidates the row across all slots, and the slots are traced independently (as above).

[00145] Для ID[6], "6:B1:R[B0]->R". [00145] For ID[6], "6:B1:R[B0]->R".

[00146] Для ID[7], если строка кэша для B0 не была вытеснена, регистрировать нечего. [00146] For ID[7], if the cache line for B0 has not been evicted, there is nothing to register.

[00147] Для ID[8]: "8:A0:R[A2]->W", так как регистрация бита идет (и несмотря на это, ядро не регистрировало данные раньше). Этот элемент демонстрирует, почему, при использовании индексов, есть сведения только о последнем владельце в гнезде. [00147] For ID[8]: "8:A0:R[A2]->W", as bit registration is in progress (and despite this, the kernel did not register data before). This element demonstrates why, when using indexes, only the last owner of the socket is known.

[00148] Для ID[9] регистрировать нечего. [00148] There is nothing to register for ID[9].

[00149] Для ID[10], "10:A1:W[A0]->R". [00149] For ID[10], "10:A1:W[A0]->R".

[00150] Для ID[11], "11:A2:R[A1]->R". [00150] For ID[11], "11:A2:R[A1]->R".

[00151] Для ID[12], "12:B0:R[data]->[4]". Это обусловлено тем, что строка кэша стала недействительной по всем гнездам по ID[8]. [00151] For ID[12], "12:B0:R[data]->[4]". This is because the cache line has been invalidated across all sockets by ID[8].

[00152] Для ID[13], "13:B1:R[B0]->R". [00152] For ID[13], "13:B1:R[B0]->R".

[00153] Для ID[14], "14:A0:R[A2]->R". Следует отметить, что по ID[11] индекс был обновлен до A2. Также отметим, что не было бы известно, что это ядро уже имело данные (т.е. ID[9]), так как индекс не несет эту информацию, тогда как ранее состояние по каждому обрабатывающему устройству (биты блоков) могло нести информацию. [00153] For ID[14], "14:A0:R[A2]->R". Note that for ID[11], the index has been updated to A2. Also note that it would not be known that this core already had data (i.e. ID[9]), since the index does not carry this information, whereas previously the state per processor (block bits) could carry information.

[00154] В третьем примере кэши в среде 800a неспособны прослеживать, какое ядро имеет последний разделяемый (считывание) доступ к строке кэша. Таким образом, в этом примере, индекс последнего считывателя не может быть отслежен, так как для этого нет битов. В этой ситуации CCP может использовать одно индексное значение (которое не отображается ни на одно ядро), чтобы сигнализировать о разделяемой строке, другое индексное значение, чтобы сигнализировать о недействительной строке, и индекс обрабатывающего устройства для "модифицированного" состояния (например, используя протокол MSI). В этом третьем примере регистрация может включать в себя регистрацию индекса кэша в пакете, вместо индекса ядра. Смещение от предка к потомку не должно регистрироваться, но может быть зарегистрировано как дополнительные данные. Если смещение от предка к потомку не регистрируется, то для интерпретации регистрации может потребоваться предоставление иерархии предок-потомок кэшей. [00154] In a third example, the caches in environment 800a are unable to keep track of which core has the last shared (read) access to a cache line. Thus, in this example, the index of the last reader cannot be tracked since there are no bits for that. In this situation, the CCP can use one index value (which is not mapped to any core) to signal a shared string, another index value to signal an invalid string, and a handler index for the "modified" state (for example, using the MSI protocol ). In this third example, the registration may include registering a cache index in the package instead of a kernel index. An ancestor-to-child offset need not be logged, but may be logged as additional data. If an ancestor-to-child offset is not registered, it may be necessary to provide a parent-child hierarchy of caches in order to interpret the registration.

[00155] Как упоминалось выше, в некоторых средах каждая строка кэша в кэше может включать в себя один флаговый бит, но CCP обрабатывающего устройства может отслеживать состояние когерентности для каждой строки кэша, со ссылкой на индекс для блока обработки, которому принадлежит состояние когерентности строки кэша. Как уже упоминалось, это создает полностью детерминированные трассировки, но может привести к трассировкам большего размера, чем в случаях, когда есть информация по каждому блоку обработки (например, CCP, который отслеживает каждый блок обработки, в сочетании с флаговым битом на каждую строку кэша). Фиг. 9A и 9B показывают, как может отличаться регистрация в этих двух ситуациях (т.е. информация о блоке CCP плюс флаговый бит строки кэша в сравнении с индексом CCP плюс флаговый бит строки кэша). Фиг. 9A показывает таблицу 900a, которая демонстрирует считывания и записи двумя блоками обработки (P0 и P1), а Фиг. 9B показывает таблицу 900b, в которой сравнивается, когда элементы регистрации могут быть внесены в этих двух средах. В этих примерах предположим, что флаговый бит начинается с очищенного состояния, и что биты блоков/индексные биты указывают, что никакой блок обработки не имеет доступа к строке кэша. [00155] As mentioned above, in some environments, each cache line in the cache may include one flag bit, but the processor CCP may keep track of the coherence state for each cache line, with reference to the index for the processing unit to which the cache line's coherence state belongs. . As already mentioned, this creates completely deterministic traces, but can lead to larger traces than in cases where there is information on each processing unit (for example, CCP, which traces each processing unit, in combination with a flag bit per cache line) . Fig. 9A and 9B show how registration can differ in these two situations (ie, CCP block information plus cache line flag bit versus CCP index plus cache line flag bit). Fig. 9A shows a table 900a that shows reads and writes by two processing units (P0 and P1), and FIG. 9B shows a table 900b comparing when registration items can be made in the two environments. In these examples, assume that the flag bit starts in a cleared state, and that the block bits/index bits indicate that no processing block has access to the cache line.

[00156] Первоначально, если CCP отслеживает информацию о блоке, и строка кэша использует флаговый бит, регистрация может продолжаться следующим образом. Как показано в таблице 900b, по ID[0] ничего не нужно регистрировать, поскольку это запись в строку кэша, которая не была зарегистрирована (в качестве альтернативы, значение перед записью могло быть зарегистрировано, и флаговый бит мог быть установлен). В этот момент CCP может отметить, что ни P0, ни P1 не имеют доступа к строке кэша. По ID[1] данные строки кэша могут быть зарегистрированы для P1. Флаговый бит может быть включен, и CCP может отметить, что P1 имеет доступ к строке кэша. По ID[2] может быть зарегистрирован пакет считывание->считывание, причем P0 берет строку кэша из P1 (это регистрируется, так как флаговый бит был включен, и CCP используется для определения того, что P0 не имеет доступа). Флаговый бит уже был включен, и CCP отмечает, что теперь P0 тоже имеет доступ к состоянию строки кэша. По ID[3] ничего не нужно регистрировать (строка кэша уже есть в регистрации для этого ядра). Это определено, потому что флаговый бит включен, и CCP указывает, что P1 уже имел доступ к строке кэша. По ID[4] может быть зарегистрирован пакет считывание->запись для P0. Это обусловлено тем, что флаговый бит включен, и P0 уже имел доступ к строке кэша. Поскольку это была запись, CCP может сделать недействительной строку кэша для всех других обрабатывающих устройств (т.е. P0 имеет доступ, а P1 не имеет). По ID[5] может быть зарегистрирован пакет запись->считывание для P1. Это обусловлено тем, что флаговый бит включен, но P1 имеет данных в трассировке (как указано CCP). Следует отметить, что два опорных пакета по ID [4] и ID[5] меньше, чем пустая регистрация по ID[4] и необходимость после этого регистрировать данные по ID[5]. CCP отмечает, что P1 теперь имеет доступ к строке кэша, в дополнение к P0. [00156] Initially, if the CCP keeps track of block information and the cache line uses a flag bit, registration may proceed as follows. As shown in table 900b, nothing needs to be logged on ID[0] since it is a cache line entry that has not been registered (alternatively, the value before the write could have been registered and the flag bit could have been set). At this point, the CCP may note that neither P0 nor P1 has access to the cache line. By ID[1] cache line data can be registered for P1. The flag bit may be turned on and the CCP may indicate that P1 has access to the cache line. On ID[2], a read->read packet may be logged, with P0 taking the cache line from P1 (this is logged because the flag bit was turned on and CCP is used to determine that P0 has no access). The flag bit has already been turned on, and CCP notes that P0 now also has access to the state of the cache line. Nothing needs to be registered for ID[3] (the cache line is already in the registration for this kernel). This is determined because the flag bit is on and the CCP indicates that P1 has already accessed the cache line. By ID[4] a read->write packet for P0 can be registered. This is because the flag bit is on and P0 has already accessed the cache line. Because it was a write, CCP can invalidate the cache line for all other processing devices (ie, P0 has access, but P1 does not). By ID[5] a write->read packet for P1 can be registered. This is because the flag bit is on but P1 has data in the trace (as specified by CCP). It should be noted that two reference packets on ID[4] and ID[5] are less than empty registration on ID[4] and the need to register data on ID[5] thereafter. CCP notes that P1 now has access to the cache line, in addition to P0.

[00157] Теперь, если CCP отслеживает только информацию об индексе, а строка кэша использует флаговый бит, регистрация может продолжаться следующим образом. Как показано в таблице 900b, по ID[0] ничего не нужно регистрировать, так как флаговый бит выключен, и это запись. Как и прежде, в качестве альтернативы это может быть зарегистрировано как считывание плюс запись, если память считывается со стороны P0. По ID[1] данные строки кэша могут быть зарегистрированы для P1. Флаговый бит может быть включен, а также CCP и обновление индекса должны указывать на P1. По ID[2] может быть зарегистрирован пакет считывание->считывание для P0. Это обусловлено тем, что флаговый бит уже включен, а индекс направлен на P1. CCP может обновить индекс до P0. Этот пакет по ID[3] считывание->считывание может быть зарегистрирован для P1. Следует отметить, что этот случай теперь неотличим от ID[2], поскольку в обоих случаях индекс направлен на другое обрабатывающее устройство, флаговый бит включен, и строка кэша находится в разделяемом состоянии. CCP может обновить индекс до P1. По ID[4] может быть зарегистрирован пакет считывание->запись для P0. Флаговый бит включен, а значит пакет может регистрироваться по ссылке. Это обновляет индекс CCP до P0. Пакет запись->считывание по ID[5] может быть зарегистрирован для P1. Флаговый бит включен, пакет регистрируется по ссылке. Строка кэша переходит в состояние разделяемой, поэтому CCP обновляет индекс до P1. Как показано в таблице 900b, вариант с индексом дает в результате файл трассировки большего размера, чем вариант с блоком, но все равно создает полностью детерминированную трассировку. [00157] Now, if the CCP only keeps track of index information and the cache line uses a flag bit, registration can proceed as follows. As shown in table 900b, nothing needs to be logged on ID[0] since the flag bit is off and this is a record. As before, this can alternatively be logged as a read plus a write if the memory is read from the P0 side. By ID[1] cache line data can be registered for P1. The flag bit may be turned on, and the CCP and index update must point to P1. By ID[2], a read->read packet for P0 can be registered. This is because the flag bit is already on and the index is pointing to P1. CCP can update the index to P0. This packet ID[3] read->read can be registered for P1. Note that this case is now indistinguishable from ID[2] because in both cases the index is directed to a different processor, the flag bit is on, and the cache line is in a shared state. CCP may update the index to P1. By ID[4] a read->write packet for P0 can be registered. The flag bit is on, which means the packet can be registered by reference. This updates the CCP index to P0. Packet write->read by ID[5] can be registered for P1. The flag bit is on, the packet is registered by reference. The cache line becomes shared, so CCP updates the index to P1. As shown in table 900b, the index option results in a larger trace file than the block option, but still produces a fully deterministic trace.

[00158] Некоторые варианты осуществления в данном документе указывают на то, что с точки зрения размера файла трассировки может быть выгодно записывать пакеты данных, которые ссылаются на данные, которыми владеет другой блок обработки (когда это возможно), а не записывать данные строки кэша позже (например, ID[4] в каждом из предыдущих примеров). Другие преимущества могут быть также получены от записи по ссылке. Например, при воспроизведении, когда ряд элементов регистрации, которые являются ссылочными, можно сделать вывод, что в данные строки кэша не было никакого внешнего вмешательства. Это обусловлено тем, что, когда полные данные строки кэша повторно регистрируются, это означает, что строка кэша либо была вытеснена, либо признана недействительной. Таким образом, включение в состав элементов регистрации по ссылке, даже в ситуации, когда элемент регистрации может строго не требоваться, может предоставить неявную информацию об отсутствии внешних вмешательств, что может быть полезной информацией при воспроизведении или для отладки. [00158] Some embodiments herein indicate that, in terms of trace file size, it may be advantageous to write data packets that refer to data owned by another processing unit (when possible) rather than writing cache line data later (for example, ID[4] in each of the previous examples). Other benefits can also be gained from posting by reference. For example, during playback, when a number of registration elements that are referential, it can be concluded that there was no external interference with the cache line data. This is because when the full cache line data is re-registered, it means that the cache line has either been evicted or invalidated. Thus, including registration elements by reference, even in a situation where the registration element may not be strictly required, can provide implicit information about the absence of external interference, which can be useful information for playback or for debugging.

[00159] В некоторых реализациях адреса, которые зарегистрированы в элементах трассировки (например, вышеупомянутых элементах "@"), содержат адреса физической памяти. В этих реализациях обрабатывающее устройство 102 может записывать один или несколько элементов TLB 102f в файл(ы) 104d трассировки. Это может быть как составная часть потоков данных трассировки для разных блоков обработки, или как составная часть дополнительных потоков данных трассировки. Это позволит позже программному обеспечению воспроизведения отобразить эти физические адреса на виртуальные адреса. [00159] In some implementations, addresses that are registered in trace elements (eg, the aforementioned "@" elements) contain physical memory addresses. In these implementations, processor 102 may write one or more TLB entries 102f to trace file(s) 104d. This may be as part of the trace data streams for different processing units, or as part of additional trace data streams. This will allow the playback software to later map these physical addresses to virtual addresses.

[00160] Помимо этого, поскольку физические адреса иногда могут считаться "секретной" информацией (например, при записи на уровне пользовательского режима), некоторые варианты осуществления записывают некоторое представление фактических физических адресов, а не сами физические адреса. Это представление может быть любым представлением, которое однозначно отображает свои идентификаторы на физические адреса, не раскрывая физический адрес. Одним примером может быть хэш-значение каждого физического адреса. Когда используются эти представления, и элементы TLB 102f записываются в файл(ы) 104d трассировки, обрабатывающее устройство 102 записывает отображение между этими представлениями и виртуальными адресами, а не физических адресов на виртуальные адреса. [00160] In addition, because physical addresses can sometimes be considered "secret" information (eg, when written at the user mode level), some embodiments record some representation of the actual physical addresses rather than the physical addresses themselves. This representation can be any representation that uniquely maps its identifiers to physical addresses without exposing the physical address. One example would be the hash value of each physical address. When these representations are used and TLB entries 102f are written to trace file(s) 104d, processor 102 writes a mapping between these representations and virtual addresses, rather than physical addresses to virtual addresses.

[00161] Как уже упоминалось, обрабатывающее устройство 102 может включать в себя один или несколько буферов 102e. Эти буферы могут использоваться в качестве временной ячейки хранения для элементов файла трассировки, до фактической записи этих элементов в файл(ы) 102f трассировки. Таким образом, когда этап 305 приводит к регистрации данных в трассировку, этап 305 может содержать этап, на котором записывают данные в буфер(ы) 102e. В некоторых вариантах осуществления обрабатывающее устройство 102 применяет методы отложенной регистрации, чтобы уменьшить влияние записи данных трассировки на обрабатывающее устройство 102 и шину памяти. В этих вариантах осуществления обрабатывающее устройство 102 может сохранять данные трассировки в буфере(ах) 102e и откладывать запись в файл(ы) 102f трассировки до тех пор, пока не будет доступна полоса пропускания на шине памяти, или пока буфер(ы) 102e не заполнятся. [00161] As mentioned, processor 102 may include one or more buffers 102e. These buffers may be used as a temporary storage location for trace file elements, prior to actually writing those elements to trace file(s) 102f. Thus, when step 305 results in logging data into a trace, step 305 may include a step that writes data to buffer(s) 102e. In some embodiments, processor 102 employs lazy logging techniques to reduce the impact of writing trace data on processor 102 and the memory bus. In these embodiments, processor 102 may store trace data in buffer(s) 102e and defer writing to trace file(s) 102f until memory bus bandwidth is available or buffer(s) 102e are full. .

[00162] Как также было упомянуто, некоторые варианты осуществления могут регистрировать вытеснения данных из кэша. Фиг. 10A и 10B показывают некоторые воплощения, в которых вытеснение кэша может быть эффективно зарегистрировано (т.е. если говорить о размере файла трассировки), максимально используя свойства ассоциативных кэшей. Первоначально, на Фиг. 10A показан пример 1000 разных частей адреса памяти, и их соотношение с ассоциативными кэшами. Как показано, адреса памяти включают в себя первое множество битов 1001, которые являются младшими битами адреса, и которые обычно равны нулю. Первое множество битов 1001 равно нулю, потому что адреса памяти обычно выравниваются по размеру адреса памяти (например, 32 бита, 64 бита, и т.д.). Таким образом, количество первого множества битов 1001 зависит от размера адреса памяти. Например, если адрес памяти составляет 32 бита (т.е. 2^5 битов), то первое множество битов 1001 содержит пять битов (так, чтобы адреса памяти были кратны 32), если адрес памяти составляет 64 бита (т.е. 2^6), то первое множество битов 1001 содержит шесть битов (так, чтобы адреса памяти были кратны 64), и т.д. Адреса памяти также включают в себя второе множество битов 1002, которые могут использоваться обрабатывающим устройством 102 для определения конкретной группы адресов в ассоциативном кэше, где должны храниться данные адреса памяти. В примере 1000 на Фиг. 10A, к примеру, второе множество битов 1002 содержит три бита, которые будут соответствовать ассоциативному кэшу, имеющему восемь групп адресов. Количество второго множества битов 1002, следовательно, зависит от конкретной геометрии ассоциативного кэша. Адреса памяти также включают в себя третье множество битов 1003, содержащих оставшиеся старшие биты адреса памяти. [00162] As also mentioned, some embodiments may log cache evictions. Fig. 10A and 10B show some implementations in which cache eviction can be effectively logged (ie, in terms of trace file size) by maximizing the properties of associative caches. Initially, in Fig. 10A shows an example of 1000 different parts of a memory address, and their relationship to associative caches. As shown, memory addresses include a first set of bits 1001 which are the least significant bits of the address and which are typically zero. The first set of bits 1001 is zero because memory addresses are normally aligned to the size of the memory address (eg, 32 bits, 64 bits, etc.). Thus, the number of the first set of bits 1001 depends on the size of the memory address. For example, if the memory address is 32 bits (i.e. 2^5 bits), then the first bit set 1001 contains five bits (so that the memory addresses are a multiple of 32), if the memory address is 64 bits (i.e. 2 ^6), then the first set of bits 1001 contains six bits (so that the memory addresses are a multiple of 64), and so on. The memory addresses also include a second set of bits 1002 that can be used by the processor 102 to determine the particular group of addresses in the associative cache where the memory address data is to be stored. In example 1000 in FIG. 10A, for example, the second set of bits 1002 contains three bits that would correspond to an associative cache having eight address groups. The number of the second set of bits 1002 therefore depends on the specific associative cache geometry. The memory addresses also include a third set of bits 1003 containing the remaining MSBs of the memory address.

[00163] С учетом Фиг. 10A, Фиг. 10B показывает пример 1004 регистрации кэш-промахов и вытеснений данных из кэша в ассоциативном кэше. Первоначально, пример 1004 демонстрирует три адреса 1005 (т.е. адрес 1024), 1006 (т.е. адрес @2112) и 1007 (т.е. адрес @2048) памяти. Фиг. 10B также показывает ассоциативный кэш 1010, которого имеет восемь групп, каждая из которых содержит четыре входа. Двоичная идентичность этих групп и входов демонстрируется в столбцах 1008 (группы) и 1009 (входы), вместе с соответствующим десятичным представлением в скобках. Таким образом, например, строка (0,0) кэша, т.е. группа 0, вход 0, в кэше 1010 демонстрируется в двоичном виде как группа '000' (столбец 1008) и вход '00' (столбец 1009); строка (0,1) кэша, группа 0, вход 1, в кэше 1010 демонстрируется в двоичном виде как группа '000' (столбец 1008) и вход '01' (столбец 1009); и так далее до строки (8,3) кэша, т.е. группа 8, вход 3, в кэше 1010, которая демонстрируется в двоичном виде как группа '111' (столбец 1008) и вход '11' (столбец 1009). [00163] Considering FIG. 10A, FIG. 10B shows an example 1004 of registering cache misses and cache evictions in an associative cache. Initially, example 1004 shows three memory addresses 1005 (ie address 1024), 1006 (ie address @2112), and 1007 (ie address @2048). Fig. 10B also shows an associative cache 1010 that has eight groups, each containing four entries. The binary identity of these groups and entries is shown in columns 1008 (groups) and 1009 (entries), along with the corresponding decimal representation in parentheses. Thus, for example, the (0,0) cache line, i.e. group 0, entry 0, in cache 1010 is shown in binary as group '000' (column 1008) and entry '00' (column 1009); cache line (0,1), group 0, entry 1, in cache 1010 is shown in binary as group '000' (column 1008) and entry '01' (column 1009); and so on up to the cache line (8,3), i.e. group 8, entry 3, in cache 1010, which is shown in binary as group '111' (column 1008) and entry '11' (column 1009).

[00164] Теперь предположим, что есть первый кэш-промах по адресу 1005 (т.е., @1024). Здесь, поскольку его второе множество битов 1002 равно '000', обрабатывающее устройство 102 может определить, что оно должно сохранить данные, соответствующие адресу 1005, в группе 0 кэша 1010. Конкретный вход в группе 0 обычно выбирается посредством специфичной для обрабатывающего устройства логики. Применительно к примеру 1004, однако, предположим, что данные сохраняются во входе 0 (как показано стрелкой) 1011a. В связи с этим кэш-промахом, данные регистрации, записанные трассировщиком 104a, могут включать в себя адрес памяти (т.е., @1024) и вход (т.е., вход 0), в котором данные были сохранены. Следует отметить, что любое число методов сжатия может использоваться для уменьшения количества битов, необходимых для сохранения адреса памяти в трассировке. Группу (т.е., группу 0) не нужно регистрировать, потому что она может быть получена из второго множества битов 1002 адреса памяти. [00164] Now suppose there is a first cache miss at address 1005 (ie, @1024). Here, since its second set of bits 1002 is '000', processor 102 may determine that it should store the data corresponding to address 1005 in group 0 of cache 1010. The particular entry in group 0 is typically selected through processor-specific logic. With reference to example 1004, however, assume that data is stored in input 0 (as indicated by the arrow) 1011a. In connection with this cache miss, the log data written by tracer 104a may include the memory address (ie, @1024) and the entry (ie, entry 0) in which the data was stored. Note that any number of compression methods can be used to reduce the number of bits required to store a memory address in a trace. The group (ie, group 0) does not need to be registered because it can be obtained from the second set of bits 1002 of the memory address.

[00165] Далее предположим, что есть второй кэш-промах по адресу 1006 (т.е., @2112). На этот раз второе множество битов 1002 равно '010', поэтому обрабатывающее устройство 102 может определить, что оно должно сохранить данные, соответствующие адресу 1006, в группе 2 кэша 1010. Опять же, конкретный вход в группе 2 обычно выбирается посредством специфичной для обрабатывающего устройства логики. Применительно к примеру 1004, однако, предположим, что данные сохраняются во входе 0 (как показано стрелкой) 1011b. В связи с этим кэш-промахом, данные регистрации, записанные трассировщиком 104a, могут включать в себя адрес памяти (т.е., @2112) и вход (т.е., вход 0), в котором данные были сохранены. Опять же, группу (т.е., группу 2) не нужно регистрировать, потому что она может быть получена из второго множества битов 1002 адреса памяти. [00165] Next, assume that there is a second cache miss at address 1006 (ie, @2112). This time, the second set of bits 1002 is '010', so processor 102 can determine that it should store the data corresponding to address 1006 in group 2 of cache 1010. Again, a particular entry in group 2 is typically selected by a processor-specific logic. With reference to example 1004, however, assume that data is stored in input 0 (as indicated by the arrow) 1011b. In connection with this cache miss, the log data written by tracer 104a may include the memory address (ie, @2112) and the entry (ie, entry 0) in which the data was stored. Again, the group (ie, group 2) does not need to be registered because it can be obtained from the second set of bits 1002 of the memory address.

[00166] Теперь предположим, что есть третий кэш-промах по адресу 1007 (т.е., @2048). Второе множество битов 1002 снова равно '000', поэтому обрабатывающее устройство 102 может определить, что оно должно сохранить данные, соответствующие адресу 1007, в группе 0 кэша 1010. Конкретный вход снова выбирается посредством специфичной для обрабатывающего устройства логики, но предположим, что обрабатывающее устройство выбрало вход 0 (как показано стрелкой 1011c). В связи с этим кэш-промахом, данные регистрации, записанные трассировщиком 104a, могут включать в себя адрес памяти (т.е., @2048) и вход (т.е., путь 0), в котором данные были сохранены. Опять же, группу (т.е., группу 0) не нужно регистрировать, потому что она может быть получена из второго множества битов 1002 адреса памяти. [00166] Now suppose there is a third cache miss at address 1007 (ie, @2048). The second set of bits 1002 is again '000', so processor 102 may determine that it should store the data corresponding to address 1007 in group 0 of cache 1010. The particular entry is again selected through processor-specific logic, but assume that processor selected input 0 (as shown by arrow 1011c). In connection with this cache miss, the log data written by tracer 104a may include the memory address (ie, @2048) and the entry (ie, path 0) in which the data was stored. Again, the group (ie, group 0) does not need to be registered because it can be obtained from the second set of bits 1002 of the memory address.

[00167] Поскольку эта строка (0,0) кэша в данный момент соответствует адресу 1005, этот третий кэш-промах по адресу 1007 вызывает вытеснение адреса 1005 из кэша 1010. Тем не менее, варианты осуществления могут отказаться от записи любых данных трассировки, документирующих это вытеснение данных. Это обусловлено тем, что вытеснение данных может быть выведено из данных, уже находящихся в трассировке, т.е., первого кэш-промаха по адресу 1005 во вход 0 в сочетании со вторым кэш-промахом по адресу 1007 во вход 0. Даже при том, что группа (т.е., группа 0) может не регистрироваться явно в трассировке, она может быть выведена из этих адресов. Соответственно, воспроизведение этих данных трассировки может повторить вытеснение данных. [00167] Since this cache line (0,0) currently corresponds to address 1005, this third cache miss at address 1007 causes address 1005 to be evicted from cache 1010. However, embodiments may refuse to write any trace data documenting it's data preemption. This is because data preemption can be inferred from data already in the trace, i.e., the first cache miss at address 1005 to entry 0 combined with the second cache miss at address 1007 to entry 0. Even though that the group (ie, group 0) may not be explicitly logged in the trace, it may be inferred from these addresses. Accordingly, replaying this trace data may repeat the data extrusion.

[00168] Некоторые вытеснения данных являются результатом событий, отличных от кэш-промаха. Например, CCP может вызвать возникновение вытеснения данных для того, чтобы поддерживать согласованность между разными кэшами. Предположим, например, что адрес 1006 вытесняется из строки (2,0) кэша в кэше 1010 вследствие события CCP. На этой стадии вытеснение данных может быть явно зарегистрировано путем записи группы (т.е., '010') и входа (т.е., '00') вытеснения данных. Существенно, что адрес, который был вытеснен, не должен регистрироваться, так как он уже был зафиксирован при регистрации второго кэш-промаха, который занес адрес 1006 в строку (2,0) кэша. Соответственно, в этом примере вытеснение данных может быть полностью зафиксировано в файле(ах) 104d трассировки всего лишь пятью битами данных регистрации (до какой-либо формы сжатия). [00168] Some data evictions are the result of events other than a cache miss. For example, CCP may cause data preemption to occur in order to maintain consistency across different caches. Suppose, for example, that address 1006 is evicted from cache line (2,0) in cache 1010 due to a CCP event. At this stage, the data preemption can be explicitly registered by writing a group (ie, '010') and an entry (ie, '00') of the data preemption. Significantly, the address that has been evicted should not be logged, as it was already logged when the second cache miss was logged, which brought address 1006 into line (2,0) of the cache. Accordingly, in this example, data preemption can be completely captured in trace file(s) 104d with as little as five bits of log data (before any form of compression).

[00169] Некоторые варианты осуществления также способны безопасно трассировать действия блока обработки, даже когда исполнение потока выполнения в этом блоке обработки взаимодействует с защищенным анклавом. Как будет понятно специалистам в данной области техники, анклавы представляют собой аппаратные средства безопасности, которые могут защищать конфиденциальную информацию (например, криптографические ключи, учетные данные, биометрические данные, и т.д.), потенциально, даже от исполнения на обрабатывающем устройстве 102 программного обеспечения самого низкого уровня. Таким образом, в дополнение к защите конфиденциальной информации от процессов в пользовательском режиме, анклавы могут даже защищать конфиденциальную информацию от ядер и/или гипервизоров. Во многих реализациях анклавы представляются исполняемому процессу как зашифрованная часть(и) памяти, отображенная в адресное пространство процесса. Это может быть реализовано, например, путем использования разных таблиц страниц памяти для исполняемого процесса и анклава. Когда процесс взаимодействует с анклавом, процесс может считывать/записывать в своей собственной отображаемой памяти, а анклав может считывать/записывать в своей собственной отображаемой памяти и/или в отображаемой памяти процесса. [00169] Some embodiments are also capable of safely tracing the actions of a processing unit, even when execution of a thread of execution in that processing unit interacts with the secure enclave. As will be appreciated by those skilled in the art, enclaves are hardware-based security that can protect sensitive information (e.g., cryptographic keys, credentials, biometric data, etc.), potentially even from software execution on processing device 102. providing the lowest level. Thus, in addition to protecting sensitive information from user-mode processes, enclaves can even protect sensitive information from kernels and/or hypervisors. In many implementations, enclaves are presented to the executing process as an encrypted piece(s) of memory mapped to the process's address space. This can be done, for example, by using different page tables for the executing process and the enclave. When a process interacts with an enclave, the process can read/write to its own mapped memory, and the enclave can read/write to its own mapped memory and/or the process mapped memory.

[00170] Первые варианты осуществления учитывающей анклавы трассировки трассируют исполняемый процесс, при этом воздерживаясь от трассировки анклава, с которым взаимодействует процесс, в то же время все еще обеспечивая возможность полного воспроизведения трассируемого процесса. В этих вариантах осуществления считывания памяти исполняемым процессом в свое адресное пространство трассируются/регистрируются с использованием одного или нескольких механизмов, уже описанных в данном документе. Однако, когда имеет место переключение контекста на анклав, варианты осуществления могут отслеживать любые ячейки памяти, которые ранее считывались трассируемым процессом, и которые записывались анклавом в ходе его исполнения. Когда трассируемый процесс снова исполняется после переключения на анклав, эти ячейки памяти считаются не зарегистрированными трассируемым процессом. Таким образом, если трассируемый процесс снова считывает из этих ячеек памяти (потенциально считывая данные, которые были помещены в эти ячейки анклавом), эти считывания регистрируются в трассировку. В сущности, это означает, что любые побочные эффекты исполнения анклава, которые видны трассируемому процессу, фиксируются в трассировке без необходимости трассировки исполнения анклава. Таким образом, трассируемый процесс может быть воспроизведен позже с задействованием этих побочных эффектов, фактически без необходимости (или даже возможности) воспроизведения исполнения анклава. Существует несколько механизмов (описанных ранее), которые могут использоваться для отслеживания ячеек памяти, которые ранее считывались трассируемым процессом, и которые записывались анклавом в ходе его исполнения, к примеру, учетные биты (например, флаговые биты, биты блоков, индексные биты), блокировка входа, использование данных CCP, и т.д. [00170] First embodiments of enclave-aware tracing trace an executing process while refraining from tracing the enclave with which the process interacts, while still allowing full replay of the process being traced. In these embodiments, memory reads by an executable process into its address space are traced/logged using one or more of the mechanisms already described herein. However, when a context switch to the enclave takes place, embodiments may track any memory locations that were previously read by the traced process and that were written by the enclave during its execution. When the tracee runs again after switching to the enclave, these memory locations are considered unregistered by the traced process. Thus, if the process being traced reads from those memory locations again (potentially reading data that was placed in those locations by the enclave), those reads are logged into the trace. In essence, this means that any side effects of enclave execution that are visible to the traced process are captured in the trace without the enclave's execution being required to be traced. Thus, the traceable process can be replayed later with these side effects, without actually needing (or even being able to) replay the execution of the enclave. There are several mechanisms (described earlier) that can be used to keep track of memory locations that were previously read by the traced process and that were written by the enclave during its execution, for example, accounting bits (for example, flag bits, block bits, index bits), locking login, use of CCP data, etc.

[00171] Вторые варианты осуществления учитывающей анклавы трассировки трассируют исполняемый процесс (например, на основе доступа, такого как считывания, к его собственному адресному пространству), в то же время трассируя анклав (например, на основе доступа к его собственному адресному пространству и/или доступа к адресному пространству трассируемого процесса). Эти варианты осуществления могут быть реализованы, когда есть требуемый уровень доверия между ядром/гипервизором и анклавом. В этих вариантах осуществления данные трассировки, касающиеся исполнения анклава, могут регистрироваться в отдельный поток данных трассировки и/или шифроваться таким образом, что никакой объект, выполняющий воспроизведение, не сможет воспроизвести анклав без доступа к отдельному потоку данных трассировки анклава и/или криптографическому ключу(ам), который может использоваться для расшифровки данных трассировки, касающихся исполнения анклава. [00171] Second embodiments of enclave-aware tracing trace an executable process (e.g., based on access, such as reads, to its own address space) while tracing the enclave (e.g., based on access to its own address space and/or access to the address space of the traced process). These embodiments can be implemented when there is a required level of trust between the kernel/hypervisor and the enclave. In these embodiments, the enclave execution trace data may be logged into a separate trace data stream and/or encrypted such that no replay entity can reproduce the enclave without access to the enclave's separate trace data stream and/or the cryptographic key( sam) that can be used to decipher trace data related to enclave execution.

[00172] Третьи варианты осуществления учитывающей анклавы трассировки объединяют первые и вторые варианты осуществления. Таким образом, эти третьи варианты осуществления могут записывать трассировку исполняемого процесса, которая включает в себя побочные эффекты использования этим процессом анклава (т.е., первые варианты осуществления), наряду с трассировкой самого анклава (т.е., вторые варианты осуществления). Это позволяет воспроизводить трассируемый процесс пользователю, у которого нет требуемого уровня привилегий и/или криптографического ключа(ей), в то же время позволяя пользователю, имеющему требуемый уровень привилегий и/или криптографический ключ(и), также воспроизводить и исполнение самого анклава. [00172] Third embodiments of enclave-aware tracing combine the first and second embodiments. Thus, these third embodiments can record a trace of an executing process that includes the side effects of that process's use of the enclave (i.e., the first embodiments), along with a trace of the enclave itself (i.e., the second embodiments). This allows a traceable process to be replayed by a user who does not have the required privilege level and/or cryptographic key(s), while allowing a user who has the required privilege level and/or cryptographic key(s) to also replay the execution of the enclave itself.

[00173] Каждый из этих вариантов осуществления с трассировкой анклавов применим и без участия анклавов, и к любой ситуации, в которой трассируемый объект взаимодействует с другим объектом, исполнение которого должно быть защищено во время трассировки (упоминаемый в данных обстоятельствах как защищенный объект). Например, любой из этих вариантов осуществления может использоваться при трассировке процесса в пользовательском режиме, который взаимодействует с процессом в режиме ядра, в этом случае процесс в режиме ядра может рассматриваться почти так же, как анклав. В другом примере любой из этих вариантов осуществления может использоваться при трассировке процесса в режиме ядра, который взаимодействует с гипервизором, в этом случае гипервизор может рассматриваться почти так же, как анклав. [00173] Each of these enclave tracing embodiments is applicable without enclaves, and to any situation in which the traceable object interacts with another object whose execution must be protected during the trace (referred to in these circumstances as a protected object). For example, any of these embodiments can be used when tracing a user-mode process that is interacting with a kernel-mode process, in which case the kernel-mode process can be treated much like an enclave. In another example, either of these embodiments could be used when tracing a kernel-mode process that interacts with a hypervisor, in which case the hypervisor could be considered much the same as an enclave.

[00174] Могут быть среды, в которых нецелесообразно (например, из соображений производительности или безопасности), невозможно (например, из-за отсутствия аппаратной поддержки) или нежелательно отслеживать, какие ячейки памяти, которые ранее считывались трассируемым процессом, записываются защищенным объектом в ходе его исполнения. Это может препятствовать использованию вариантов осуществления с трассировкой анклавов, описанных выше. Тем не менее, есть также методы для трассировки и в этих ситуациях. [00174] There may be environments in which it is impractical (for example, for performance or security reasons), impossible (for example, due to lack of hardware support), or undesirable to keep track of which memory cells that were previously read by the traced process are written by the protected object during its execution. This may preclude the use of the enclave tracing embodiments described above. However, there are also methods for tracing in these situations as well.

[00175] Первый метод состоит в том, чтобы рассматривать кэш обрабатывающего устройства как недействительный после переключения контекста от защищенного объекта. Рассмотрение кэша обрабатывающего устройства как недействительного приводит к тому, что считывания трассируемым объектом после возвращения из защищенного объекта приводят к кэш-промахам, которые могут быть зарегистрированы. Эти кэш-промахи будут включать в себя любые значения, которые были модифицированы защищенным объектом в адресном пространстве трассируемого объекта, и которые впоследствии были считаны трассируемым объектом. Хотя этот метод может генерировать больше данных трассировки, чем три варианта осуществления, описанные выше, он действительно фиксирует эффекты исполнения защищенного объекта, от которых зависел трассируемый объект. В некоторых вариантах осуществления этот первый метод также может записывать один или несколько ключевых кадров (например, в том числе снимок состояния регистров обрабатывающего устройства) после возврата к трассируемому объекту от защищенного объекта. Ключевой кадр(ы) позволяет начинать воспроизведение трассируемого объекта после возврата от защищенного объекта, даже несмотря на отсутствие непрерывности в данных трассировки (т.е., во время исполнения защищенного объекта). [00175] The first method is to treat the processor's cache as invalid after a context switch away from the protected object. Treating the processor's cache as invalid causes reads by the traceable object after returning from the protected object to result in cache misses that may be logged. These cache misses will include any values that have been modified by the protected object in the address space of the traceable object and that have subsequently been read by the traceable object. While this method may generate more trace data than the three embodiments described above, it does capture the execution effects of the protected object that the traced object depended on. In some embodiments, this first method may also write one or more keyframes (eg, including a snapshot of the processor's registers) after returning to the traceable object from the protected object. The key frame(s) allow playback of the traced object to begin upon return from the protected object, even though there is no continuity in the trace data (ie, during the execution of the protected object).

[00176] Второй метод состоит в том, чтобы регистрировать кэш-промахи, относящиеся к считываниям защищенным объектом из адресного пространства трассируемого объекта, а также к записям, выполненным защищенным объектом в адресное пространство трассируемого объекта. Это позволяет воспроизводить трассировку для повторений записей защищенного объекта без необходимости иметь доступ к инструкциям защищенного объекта, который их производил. Это также дает при воспроизведении доступ к данным (в адресном пространстве трассируемого объекта), которые считывал защищенный объект, и к которым позже получил доступ трассируемый объект. Возможны смешанные подходы (если имеется достаточная служебная информация, такая как данные CCP), при которых могут регистрироваться записи защищенного объекта (в адресном пространстве трассируемого объекта), но не его считывания, если эти считывания будут зарегистрированы позже вследствие рассмотрения кэша как недействительного. [00176] The second method is to log cache misses related to reads by the protected object from the address space of the traceable object, as well as writes made by the protected object to the address space of the traceable object. This allows traces to be replayed for repeated writes of a protected object without having to access the instructions of the protected object that produced them. It also gives replay access to data (in the tracee's address space) that the protected object read and later accessed by the tracee. Mixed approaches are possible (if there is sufficient overhead, such as CCP data), whereby writes of the protected object (in the address space of the traceable object) may be logged, but reads of the protected object may not be logged if those reads are logged later due to cache invalidation.

[00177] Настоящее изобретение может быть воплощено в других специфических формах без отступления от его сущности или существенных свойств. Описанные варианты осуществления должны рассматриваться во всех отношениях только как иллюстративные, а не ограничивающие. Следовательно, объем настоящего изобретения указывается прилагаемой формулой изобретения, а не предшествующим описанием. Все изменения, которые производятся в рамках смысла и диапазона эквивалентности формулы изобретения, должны восприниматься как входящие в ее объем. [00177] The present invention may be embodied in other specific forms without departing from its spirit or essential properties. The described embodiments are to be considered in all respects only as illustrative and not restrictive. Therefore, the scope of the present invention is indicated by the appended claims and not by the preceding description. All changes that are made within the meaning and range of equivalence of the claims are to be construed as being within the scope of the claims.

Claims (43)

1. Вычислительное устройство, содержащее:1. Computing device containing: множество блоков обработки;a plurality of processing units; кэш-память, содержащую множество строк кэша, которые используются для кэширования данных из одного или более резервных хранилищ и которые совместно используются множеством блоков обработки, причем согласованность данных в этом множестве строк кэша и упомянутых одном или более резервных хранилищах регулируется согласно протоколу когерентности кэша (CCP); иcache memory containing a plurality of cache lines that are used to cache data from one or more backing stores and that are shared by multiple processing units, and the consistency of data in this set of cache lines and said one or more backing stores is regulated according to the Cache Coherence Protocol (CCP ); and хранимые управляющие логические средства, которые конфигурируют вычислительное устройство для выполнения, по меньшей мере, следующего:stored control logic that configures the computing device to do at least the following: определение того, что выполнены, по меньшей мере, следующие условия:determining that at least the following conditions are met: (i) операция вызвала взаимодействие между конкретной строкой кэша из упомянутого множества строк кэша и упомянутыми одним или более резервными хранилищами;(i) the operation caused an interaction between a particular cache line from said plurality of cache lines and said one or more backing stores; (ii) регистрация разрешена для конкретного блока обработки из упомянутого множества блоков обработки, который вызвал эту операцию;(ii) registration is enabled for the particular processing unit of said plurality of processing units that caused the operation; (iii) упомянутая конкретная строка кэша является участником в регистрации; и(iii) said particular cache line is a member in the registration; and (iv) CCP указывает, что есть данные, которые должны быть зарегистрированы в трассировке, на основе упомянутой операции; и(iv) CCP indicates that there is data to be logged in the trace based on said operation; and на основе, по меньшей мере, определения того, что упомянутые условия выполнены, обеспечение регистрации данных в трассировке, причем данные могут использоваться для воспроизведения упомянутой операции.on the basis of at least a determination that said conditions are met, allowing the data to be logged in the trace, wherein the data can be used to reproduce said operation. 2. Вычислительное устройство по п.1, в котором хранимые управляющие логические средства также конфигурируют вычислительное устройство для обновления одного или более учетных битов, соотнесенных с упомянутой конкретной строкой кэша, чтобы указать, остается ли эта конкретная строка кэша участником в регистрации после упомянутой операции.2. The computing device of claim 1, wherein the stored control logic also configures the computing device to update one or more accounting bits associated with said particular cache line to indicate whether that particular cache line remains a member in the registration after said operation. 3. Вычислительное устройство по п.2, при этом упомянутые один или более учетных битов, соотнесенных с конкретной строкой кэша, содержат одно из следующего: (i) одиночный бит, (ii) множество битов, каждый из которых соответствует одному из упомянутого множества блоков обработки, и (iii) множество битов, которые хранят значение индекса обрабатывающего устройства.3. The computing device of claim 2, wherein said one or more accounting bits associated with a particular cache line comprise one of the following: (i) a single bit, (ii) a plurality of bits, each corresponding to one of said plurality of blocks processing, and (iii) a set of bits that store the index value of the processing device. 4. Вычислительное устройство по п.2, при этом упомянутые один или более учетных битов, соотнесенных с конкретной строкой кэша, хранятся в одной или более зарезервированных строках кэша, которые отделены от строк кэша, которые используются для кэширования данных из одного или более резервных хранилищ.4. The computing device of claim 2, wherein said one or more accounting bits associated with a particular cache line are stored in one or more reserved cache lines that are separate from cache lines that are used to cache data from one or more backing stores. . 5. Вычислительное устройство по п.1, в котором обеспечение регистрации данных в трассировке содержит запись данных в буфер, при этом сброс данных из буфера в файл трассировки откладывается на основе активности шины памяти.5. The computing device of claim 1, wherein providing data logging to the trace comprises writing data to a buffer, wherein flushing data from the buffer to the trace file is delayed based on memory bus activity. 6. Вычислительное устройство по п.1, в котором хранимые управляющие логические средства также конфигурируют вычислительное устройство для регистрации по меньшей мере одного вытеснения данных из кэша посредством ссылки на группу и вход в ассоциативном кэше.6. The computing device of claim 1, wherein the stored control logic also configures the computing device to register at least one cache eviction by reference to a group and an entry in the associative cache. 7. Вычислительное устройство по п.1, при этом регистрируемые данные содержат переходы между разными состояниями CCP.7. The computing device according to claim 1, wherein the logged data contains transitions between different states of the CCP. 8. Вычислительное устройство по п.1, при этом регистрируемые данные содержат по меньшей мере одно из следующего: переход из состояния записи в состояние считывания, переход из состояния записи в состояние записи и переход из состояния считывания в состояние записи.8. The computing device of claim 1, wherein the logged data comprises at least one of the following: a transition from a write state to a read state, a transition from a write state to a write state, and a transition from a read state to a write state. 9. Вычислительное устройство по п.1, в котором использование CCP для идентификации того, что есть данные, которые должны быть зарегистрированы в трассировке, содержит идентификацию того, что не требуется, чтобы переход из состояния считывания в состояние считывания регистрировался в трассировке.9. The computing device of claim 1, wherein using the CCP to identify that there is data to be logged in the trace comprises identifying that it is not required that the transition from the read state to the read state be logged in the trace. 10. Вычислительное устройство по п.1, при этом данные для каждого блока обработки регистрируются в по меньшей мере один отдельный поток данных.10. The computing device of claim 1, wherein the data for each processing unit is logged into at least one separate data stream. 11. Вычислительное устройство по п.1, при этом данные для двух или более блоков обработки регистрируются в один и тот же поток данных, но помечаются идентификатором блока обработки.11. The computing device of claim 1, wherein the data for the two or more processing units is logged into the same data stream but is tagged with a processing unit identifier. 12. Вычислительное устройство по п.1, при этом данные, которые должны быть зарегистрированы в трассировке, содержат информацию об упорядоченности.12. The computing device according to claim 1, wherein the data to be recorded in the trace contains ordering information. 13. Вычислительное устройство по п.1, при этом данные, которые должны быть зарегистрированы, содержат данные, записанные в упомянутую конкретную строку кэша анклавом, причем обеспечение регистрации данных в трассировке содержит:13. The computing device according to claim 1, wherein the data to be logged comprises data written to said specific cache line by the enclave, wherein the provision for logging data in the trace comprises: когда упомянутая операция, которая вызвала взаимодействие между конкретной строкой кэша и одним или более резервными хранилищами, соответствует потоку выполнения, взаимодействующему с анклавом, обеспечение регистрации данных в поток данных трассировки, соответствующий этому потоку выполнения; илиwhen said operation that caused an interaction between a particular cache line and one or more backing stores corresponds to a thread of execution interacting with the enclave, ensuring that the data is logged to the trace data stream corresponding to that thread of execution; or когда упомянутая операция, которая вызвала взаимодействие между конкретной строкой кэша и одним или более резервными хранилищами, соответствует анклаву, обеспечение регистрации данных отдельно от потока данных трассировки, соответствующего этому потоку выполнения.when said operation that caused an interaction between a particular cache line and one or more backing stores matches an enclave, ensuring data logging is separate from the trace data stream corresponding to that thread of execution. 14. Способ, реализуемый в вычислительной среде, которая включает в себя множество блоков обработки и кэш-память, содержащую множество строк кэша, которые используются для кэширования данных из одного или более резервных хранилищ и которые совместно используются множеством блоков обработки, причем согласованность данных в этом множестве строк кэша и упомянутых одном или более резервных хранилищах регулируется согласно протоколу когерентности кэша, при этом способ предназначен для выполнения записи трассировки на основе кэша с использованием данных протокола когерентности кэша (CPP) и содержит этапы, на которых:14. A method implemented in a computing environment that includes a plurality of processing units and a cache memory containing a plurality of cache lines that are used to cache data from one or more backing stores and that are shared by multiple processing units, and data consistency in this the plurality of cache lines and said one or more backing stores is governed by the Cache Coherence Protocol, wherein the method is for performing a cache-based trace recording using Cache Coherence Protocol (CPP) data and comprising the steps of: определяют, что выполнены, по меньшей мере, следующие условия:determine that at least the following conditions are met: (i) операция вызвала взаимодействие между конкретной строкой кэша из упомянутого множества строк кэша и упомянутыми одним или более резервными хранилищами;(i) the operation caused an interaction between a particular cache line from said plurality of cache lines and said one or more backing stores; (ii) регистрация разрешена для конкретного блока обработки из упомянутого множества блоков обработки, который вызвал эту операцию;(ii) registration is enabled for the particular processing unit of said plurality of processing units that caused the operation; (iii) упомянутая конкретная строка кэша является участником в регистрации; и(iii) said particular cache line is a member in the registration; and (iv) CCP указывает, что есть данные, которые должны быть зарегистрированы в трассировке, на основе упомянутой операции; и(iv) CCP indicates that there is data to be logged in the trace based on said operation; and на основе, по меньшей мере, определения того, что упомянутые условия выполнены, обеспечивают регистрацию данных в трассировке, причем данные могут использоваться для воспроизведения упомянутой операции.on the basis of at least determining that said conditions are met, data is logged in the trace, wherein the data can be used to reproduce said operation. 15. Способ по п.14, дополнительно содержащий этап, на котором обновляют один или более учетных битов, соотнесенных с упомянутой конкретной строкой кэша, чтобы указать, остается ли эта конкретная строка кэша участником в регистрации после упомянутой операции.15. The method of claim 14, further comprising updating one or more accounting bits associated with said particular cache line to indicate whether that particular cache line remains a member in the registration after said operation. 16. Способ по п.14, в котором обеспечение регистрации данных в трассировке содержит запись данных в буфер, при этом сброс данных из буфера в файл трассировки откладывается на основе активности шины памяти.16. The method of claim 14, wherein providing data logging to the trace comprises writing data to a buffer, wherein flushing the data from the buffer to the trace file is deferred based on memory bus activity. 17. Способ по п.14, в котором регистрируемые данные содержат переходы между разными состояниями CCP.17. The method of claim 14, wherein the logged data comprises transitions between different CCP states. 18. Способ по п.14, в котором регистрируемые данные содержат по меньшей мере одно из следующего: переход из состояния записи в состояние считывания, переход из состояния записи в состояние записи и переход из состояния считывания в состояние записи.18. The method of claim 14, wherein the logged data comprises at least one of a transition from a write state to a read state, a transition from a write state to a write state, and a transition from a read state to a write state. 19. Способ по п.14, в котором использование CCP для идентификации того, что есть данные, которые должны быть зарегистрированы в трассировке, содержит идентификацию того, что не требуется, чтобы переход из состояния считывания в состояние считывания регистрировался в трассировке.19. The method of claim 14, wherein using the CCP to identify that there is data to be logged in the trace comprises identifying that the read-to-read state transition is not required to be logged in the trace. 20. Машиночитаемый носитель данных, на котором сохранены машиноисполняемые инструкции для использования в вычислительном устройстве, которое содержит множество блоков обработки и кэш-память, содержащую множество строк кэша, которые используются для кэширования данных из одного или более резервных хранилищ и которые совместно используются множеством блоков обработки, причем согласованность данных в этом множестве строк кэша и упомянутых одном или более резервных хранилищах регулируется согласно протоколу когерентности кэша (CCP), при этом машиноисполняемые инструкции являются исполняемыми одним или более блоками обработки для предписания вычислительному устройству выполнять, по меньшей мере, следующее:20. A computer-readable storage medium that stores computer-executable instructions for use in a computing device that contains a plurality of processing units and a cache memory containing a plurality of cache lines that are used to cache data from one or more backing stores and that are shared by a plurality of processing units , wherein the consistency of the data in that plurality of cache lines and said one or more backing stores is governed by the Cache Coherence Protocol (CCP), wherein the computer-executable instructions are executable by one or more processing units to cause the computing device to do at least the following: определение того, что выполнены, по меньшей мере, следующие условия:determining that at least the following conditions are met: (i) операция вызвала взаимодействие между конкретной строкой кэша из упомянутого множества строк кэша и упомянутыми одним или более резервными хранилищами;(i) the operation caused an interaction between a particular cache line from said plurality of cache lines and said one or more backing stores; (ii) регистрация разрешена для конкретного блока обработки из упомянутого множества блоков обработки, который вызвал эту операцию;(ii) registration is enabled for the particular processing unit of said plurality of processing units that caused the operation; (iii) упомянутая конкретная строка кэша является участником в регистрации; и(iii) said particular cache line is a member in the registration; and (iv) CCP указывает, что есть данные, которые должны быть зарегистрированы в трассировке, на основе упомянутой операции; и(iv) CCP indicates that there is data to be logged in the trace based on said operation; and на основе, по меньшей мере, определения того, что упомянутые условия выполнены, обеспечение регистрации данных в трассировке, причем данные могут использоваться для воспроизведения упомянутой операции.on the basis of at least a determination that said conditions are met, allowing the data to be logged in the trace, wherein the data can be used to reproduce said operation.
RU2020113601A 2017-09-18 2018-06-22 Cache-based trace recording using data of cache coherence protocol RU2775818C2 (en)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762559780P 2017-09-18 2017-09-18
US62/559,780 2017-09-18
US15/915,930 US10459824B2 (en) 2017-09-18 2018-03-08 Cache-based trace recording using cache coherence protocol data
US15/915,930 2018-03-08
PCT/US2018/038875 WO2019055094A1 (en) 2017-09-18 2018-06-22 Cache-based trace recording using cache coherence protocol data

Publications (3)

Publication Number Publication Date
RU2020113601A RU2020113601A (en) 2021-10-20
RU2020113601A3 RU2020113601A3 (en) 2022-01-31
RU2775818C2 true RU2775818C2 (en) 2022-07-11

Family

ID=

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120179872A1 (en) * 2009-12-17 2012-07-12 International Business Machines Corporation Global instructions for spiral cache management
US20140047196A1 (en) * 2012-08-10 2014-02-13 International Business Machines Corporation Transaction check instruction for memory transactions
RU2599537C2 (en) * 2010-05-17 2016-10-10 Томсон Лайсенсинг Method of optimizing cache memory control and appropriate hardware system
US20170091091A1 (en) * 2015-09-29 2017-03-30 International Business Machines Corporation Dynamic releasing of cache lines
US20170161173A1 (en) * 2015-12-02 2017-06-08 International Business Machines Corporation Fingerprint-initiated trace extraction

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120179872A1 (en) * 2009-12-17 2012-07-12 International Business Machines Corporation Global instructions for spiral cache management
RU2599537C2 (en) * 2010-05-17 2016-10-10 Томсон Лайсенсинг Method of optimizing cache memory control and appropriate hardware system
US20140047196A1 (en) * 2012-08-10 2014-02-13 International Business Machines Corporation Transaction check instruction for memory transactions
US20170091091A1 (en) * 2015-09-29 2017-03-30 International Business Machines Corporation Dynamic releasing of cache lines
US20170161173A1 (en) * 2015-12-02 2017-06-08 International Business Machines Corporation Fingerprint-initiated trace extraction

Similar Documents

Publication Publication Date Title
CN111095222B (en) Cache-based trace recording using cache coherence protocol data
RU2764173C1 (en) Registration of incoming cache streams on request to a higher-level cache
EP3740872B1 (en) Decoupling trace data streams using cache coherence protocol data
JP7221979B2 (en) Trace recording by logging entries into the lower tier cache based on entries in the upper tier cache
US20240264951A1 (en) Logging cache line lifetime hints when recording bit-accurate trace
US20240248856A1 (en) Memory address compression within an execution trace
CN115485668A (en) Memory page marking as a logging hint for processor-based execution tracing
RU2775818C2 (en) Cache-based trace recording using data of cache coherence protocol
US20240193092A1 (en) Processor support for using cache way-locking to simultaneously record plural execution contexts into independent execution traces
US20220269614A1 (en) Treating main memory as a collection of tagged cache lines for trace logging
NZ761306B2 (en) Cache-based trace recording using cache coherence protocol data
RU2773437C2 (en) Trace recording by registration of incoming streams in lower-level cache based on elements in upper-level cache
US11561896B2 (en) Cache-based trace logging using tags in an upper-level cache
US11687453B2 (en) Cache-based trace logging using tags in an upper-level cache
US12032472B2 (en) Physical memory address omission or obfuscation within an execution trace
US20240184688A1 (en) Processor support for using memory page markings as logging cues to simultaneously record plural execution contexts into independent execution traces
CN111742301B (en) Logging cache inflow to higher level caches by request
CN116868172A (en) Treating main memory as a set of tag cache lines tracking log records