CN101645034A - 用于检测数据存取违例的方法和装置 - Google Patents
用于检测数据存取违例的方法和装置 Download PDFInfo
- Publication number
- CN101645034A CN101645034A CN200910161170A CN200910161170A CN101645034A CN 101645034 A CN101645034 A CN 101645034A CN 200910161170 A CN200910161170 A CN 200910161170A CN 200910161170 A CN200910161170 A CN 200910161170A CN 101645034 A CN101645034 A CN 101645034A
- Authority
- CN
- China
- Prior art keywords
- access
- memory address
- storage access
- thread
- user
- Prior art date
- Legal status (The legal status 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 status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明描述了用于检测数据存取违例的机器可读介质、方法、装置和系统。在一些实施例中,可获取与当前用户线程对存储地址的当前存储器存取有关的当前存储器存取信息。可确定高速缓存是否包括与存储地址相关联的高速缓存条目。如果高速缓存包括与所述存储地址相关联的高速缓存条目,则可分析存储在高速缓存条目中的存取历史和当前存储器存取信息,以检测是否存在存取存储地址的实际违例或潜在违例中的至少一个。
Description
背景
在诸如多线程程序和多处理程序之类的并行程序中的缺陷可能是所有软件缺陷中最难测试和诊断的一种。在并行程序中存在一些类型的缺陷,诸如数据竞争和数据存取原子性违例。数据竞争例如可能发生在两个线程——其中至少一个是写入——在没有适当同步的情况下并发地存取存储器中的相同数据时。数据存取原子性违规例如可能发生在与将代码区作为原子区执行的预期相反以非原子方式执行该代码区时。用于数据存取原子性检测的算法可取决于称为存取交织不变量的观察,其作为程序员关于某些代码区的原子性的假设的良好指示。
附图简述
本文描述的发明在附图中作为示例而非作为限制示出。为了简单且清楚地说明,附图中的元件不一定是按比例绘制的。例如,为清楚起见一些元件的尺寸相对其它元件被放大。更进一步地,在认为适当时,附图标记在附图中被重复以指示相应或相似元件。
图1示出数据存取交织的实施例。
图2示出具有用于检测数据存取违例的装置的计算机平台的实施例。
图3a和3b示出存储器地址的两个实施例。
图4a和4b分别示出高速缓存条目和高速缓存页的实施例。
图5示出实际和潜在的数据存取违例的实施例。
图6示出存储存储器存取信息的方法的实施例。
图7示出检测数据存取违例的实施例。
详细描述
以下描述说明了用于检测数据存取违例的技术。在以下的描述中,阐述了众多特定细节,诸如逻辑实现、伪代码、用于指定操作数的手段、资源分区/共享/复制实现、系统组件的类型和相互关系、以及逻辑分区/集成选择,以便提供对本发明更全面的理解。然而,本发明可在没有这些特定细节的情况下实施。在其它实例中,没有详细示出控制结构、门电平电路和全软件指令序列以免混淆本发明。本领域的普通技术人员利用所包括的描述将能够实现适当功能性而不需要过多的试验。
在说明书中对“一个实施例”、“一实施例”、“一示例实施例”等的参考指示所描述的实施例可包括特定特征、结构或特性,但每个实施例可不必包括该特定特征、结构或特性。此外,这些短语不一定指代同一实施例。此外,当结合实施例描述特定特征、结构或特性时,主张结合其它实施例——无论是否明确描述——实现这些特征、结构或特性在本领域的技术人员的知识范围内。
本发明的实施例可以硬件、固件、软件或其任何组合实现。本发明的实施例还可被实现为存储在机器可读介质上的指令,其可由一个或多个处理器读取和执行。机器可读介质可包括用于存储或传送机器(例如,计算设备)可读形式的信息的任何机制。例如,机器可读介质可包括只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪存设备等。
图1示出数据存取交织的实施例。如图所示,两个不同的线程——即当前线程和可以是不同于当前线程的另一个线程的远程线程——可存取存储器中的同一数据,例如,从存储器读取该数据和/或向存储器写入同一数据。I指令可表示来自当前线程的当前数据存取指令。P指令可表示来自当前线程的在时间上最接近I指令的先前数据存取指令。R指令可表示来自远程线程的与当前线程的数据存取交织的数据存取指令。换言之,R指令可表示在时间上处于来自当前线程的I指令和P指令之间的远程数据存取指令。
在检测例如数据存取原子性违规的数据存取违规的常规方法中,可考虑三个指令,即I指令、P指令和R指令。下表可示出8类数据存取交织,其中“R”表示读取且“W”表示写入。
事例2、3、5和6示出不同类型的数据存取原子性违例。
图2示出具有用于检测诸如原子性违例的数据存取违例的装置的计算平台。应当意识到,图2的计算平台能够检测其它类型的数据存取违例。
计算平台20可包括一个或多个处理器21、存储器22以及用于数据收发和处理的可能其它组件(图2中未示出)。计算平台的示例可包括大型计算机、迷你计算机、个人计算机、工作站、便携式计算机、膝上型计算机、计算机群或其它能够进行数据收发和处理的设备。
处理器21经由一条或多条诸如处理器总线之类的总线通信耦合至各种组件(例如存储器22)。处理器21可被实现为具有一个或多个处理核的集成电路(IC),其可在例如包括从美国加利福尼亚州圣克拉拉的英特尔公司购买到IntelXeonTM、IntelPentiumTM、IntelItaniumTM、IntelCore架构的适当架构下执行代码。
存储器22可存储由处理器21执行的代码。在一实施例中,存储器22可存储用于检测数据存取违例的代码。如图所示,两组线程可在操作系统25上运行,即用户线程231至23k和处理线程241至24k。用户线程可存取存储器22的数据,例如从/向存储器22读取/写入数据,且与存取存储器同一数据的另一个用户线程不可串行化交织,如上表所示,在这种情形中可能发生数据存取违例。处理线程241-24n可通过用户线程231-23k检测数据存取违例。
在一实施例中,处理线程241-24n中的每一个可具有多个缓冲器和高速缓存,诸如用于处理线程241的处理缓冲器261、填充缓冲器271和高速缓存281,用于处理线程242的处理缓冲器262、填充缓冲器272和高速缓存282等等。高速缓存281-28n可以是由各种软件管理的软件高速缓存。软件高速缓存的示例可包括通常由操作系统25管理的磁盘高速缓存。应当意识到,其它技术可实现其它实施例。例如,处理线程可各自具有任意数量的高速缓存。又例如,高速缓存可以是硬件高速缓存,诸如处理器高速缓存。又例如,可使用一个处理线程代替多个线程。
在一实施例中,用户线程(例如,用户线程231)可存取多个连续存储单元的数据,其中存储各条数据的各个存储单元都可具有一地址。存储地址可指或者存储一条数据的存储单元的地址,或者存储完整数据或不同数据的连续存储单元的地址,例如连续存储单元的起始存储单元的地址。
当用户线程存取存储器的数据时,例如一条数据的存储单元或存储完整数据或不同数据的连续存储单元,它可从与处理线程241-24n相关联的多个填充缓冲器271-27n中选择填充缓冲器来存储与存储器存取有关的存储器存取信息,稍后可将其用于数据存取违例检测和/或其它目的。在一实施例中,存储器存取信息可包括来自下组的一个或多个:存储单元或连续存储单元的存储地址、数据长度、存储器存取的时间信息(例如,时戳或时间指示符)和类型(例如,读和写)、存储器存取长度、用户线程的标识符以及用于数据存取违例检测和/或其它目的的其它信息。存储器存取信息可以是数据和/或指令的形式。用户线程可基于存储地址选择填充缓冲器。
图3a示出存储地址的实施例。存储地址可包括不同的部分,诸如交织位、对齐位和其余位。应该意识到其它技术可实现用于图3a的存储地址结构的其它实施例。例如,不同部分的位置可改变。又例如,存储地址的一部分(例如交织位)可被分成若干子部分,如图3b所示。
存储地址的交织位可用于从多个填充缓冲器271-27n中标识一个填充缓冲器。例如,对于四个处理线程241-244有四个填充缓冲器271-274,可将其标识为00、01、10和11。在这种情形中,交织位可包括两位,以便从四个填充缓冲器中标识一个。在一实施例中,用户线程可确定存储地址是否在感兴趣的存储区内。如果是的话,则用户线程可将与存取该存储地址有关的存储器存取信息添加到存储地址所标识的填充缓冲器中。否则,用户线程可跳过存储地址。存储区可以是预定的,以便可检测到与存储区存取有关的违例。
对齐位可指示存储区有多大,其中存储区的存储器存取信息可被存储在同一填充缓冲器(例如,填充缓冲器271)中,然后在高速缓存操作中加载到与填充缓冲器相关联的高速缓存(例如高速缓存281)的高速缓存条目。因此,对齐位还可指示高速缓存条目大小。在一实施例中,存储区可包括存储完整数据的连续存储单元,其中不同的存储单元可存储不同条数据。在另一个实施例中,连续的存储单元可存储不同数据。为了改进性能,与存取对齐位所指示的存储区有关的存储器存取信息可被存储在同一填充缓冲器中。
以下可给出存储地址的示例:
0000,0001,0010,0011,
0100,0101,0110,0111,
1000,1001,1010,1011,
1100,1101,1110,1111。
在一实施例中,从存储地址左侧起的第二位可以是用以从多个填充缓冲器中标识一个填充缓冲器的交织位,从存储地址左侧起的第三和第四位可以是用以指示存储区有多大的对齐位,其中存储区的存储器存取信息可被存储在同一填充缓冲器中。从上面可看出,对应于存储地址的第一和第三行的存储器存取信息可进入同一填充缓冲器,而对应于存储地址的第二和第四行的存储器存取信息可进入另一个相同的填充缓冲器。在另一个实施例中,不同的存储地址可由不同的用户线程存取。
对于以上的情况,可通过将与存取不同存储区有关的存储器存取信息存储到不同填充缓冲器、并将存储地址的特定位用作在多个填充缓冲器中选择特定填充缓冲器的索引,来避免用户线程之间对存储器存取信息记录的冲突。
再次参照图2,当填充缓冲器满时,其相关联处理线程可将该处理线程的处理缓冲器与填充缓冲器交换,以使得处理缓冲器可作为新的填充缓冲器执行且填充缓冲器可作为新的处理缓冲器执行。然后,处理线程可将存储器存取信息从新的处理缓冲器输入至相关联的高速缓存。例如,处理线程241可将填充缓冲器271与处理缓冲器261交换,然后将存储器存取信息从新的处理缓冲器(即填充缓冲器271)输入到高速缓存281。
对于以上情况,可通过将填充缓冲器与处理缓冲器分离来避免用户线程与处理线程之间对填充缓冲器存取的冲突。
图4a示出高速缓存的实施例。高速缓存可包括多个高速缓存条目。在一实施例中,每个高速缓存条目可存储存取存储区的存取历史,其中存取历史可包括与由用户线程231-23k中的一个或多个存取存储区有关的存储器存取信息。存储区可包括由与每个存储单元相关联的每个存储地址的对齐位所指示的多个连续的存储单元。例如,如果存储地址包括两个对齐位,则存储区可具有4个连续的存储单元。
在一实施例中,存储区可存储完整数据,且高速缓存条目可存储由用户线程231-23k从/向存储器存取数据的历史和可能的其它信息。在另一个实施例中,存储区可存储不同数据,且高速缓存条目可存储由用户线程231-23k从/向存储器存取不同数据的历史。存储器存取信息可包括来自下组的一个或多个:存取存储区的用户线程的标识符、用户线程存取的存储地址、存储器存取的时间信息(例如,时戳或时间指示符)和类型(例如,读或写)、存储器存取长度、数据长度以及稍后用于违例检测和/或其它目的的其它信息。
各种实施例可被实现为将处理缓冲器中存储的存储器存取信息与存取历史及可能在高速缓存中存储的其它信息相链接。在一实施例中,存储器存取信息的存储地址可被用作将处理缓冲器数据与高速缓存数据相链接的关键。例如,可确定存储地址在哪个存储区内,使得存储器存取信息可从处理缓冲器输入到与存储区相关联的高速缓存条目。又例如,高速缓存的每个高速缓存条目可用存储地址的一个或多个特定位标识,例如,如图3所示的存储地址的其余位和可能的交织位,以使得来自处理缓冲器的存储器存取信息应进入哪个高速缓存条目可由存储地址的其余位和可能的交织位来确定。
高速缓存可经由诸如最近最少使用(LRU)算法和最不频繁使用(LFU)算法之类的各种高速缓存替换算法更新其所存储的数据。在一实施例中,根据LRU算法,高速缓存可丢弃与最近最少存取存储器的用户线程相关联的存储数据的部分或全部,和/或可丢弃最近最少存取以供存储器存取信息记录的高速缓存条目。在另一个实施例中,根据LFU算法,高速缓存可丢弃与最不频繁存取存储器的用户线程相关联的存储数据的部分或全部,和/或可丢弃最不频繁存取以供存储器存取信息记录的高速缓存条目。可参考存储在处理缓冲器中的存储器存取信息,以便确定LRU算法和LFU算法的存取频率。
在一实施例中,并非所有的存储器存取信息都要从处理缓冲器输入到高速缓存。相反,可仅将与感兴趣的存储区有关的存储器存取信息输入高速缓存。
对于以上情况,高速缓存能够通过选择性地存储存储器存取信息来满足存储要求,而不为稍后的违例检测存储所有的存储器存取信息。此外,因为数据能够以多个字节为单位高速缓存,而非像常规存储器存取那样逐个字节地高速缓存数据,所以可在同一时间将与若干存储器存取有关的存储器存取信息从处理缓冲器高速缓存到高速缓存。例如,可在同一时间高速缓存与存取对齐位所指示的存储区有关的存储器存取信息。
各种实施例可实现对如图4a所示的高速缓存的其它修改和变化。在一实施例中,高速缓存条目可存储对存储一条或多条数据而非完整数据的一个或多个存储单元进行存取的存取历史。在一实施例中,高速缓存条目可存储对一个以上存储区进行存取的存取历史。在另一个实施例中,对一个存储区进行存取的存取历史可被存储在一个以上的高速缓存条目中。在又一个实施例中,处理缓冲器中的存储器存取信息可不同于高速缓存中的存储器存取信息。换言之,处理线程可在高速缓存来自处理缓冲器的存储器存取信息之前修改它们。例如,与由同一用户线程关于同一数据的连续存储器存取相关联的信息在进行高速缓存之前可能是统一的。应当意识到这些是示例性实施例,且各实施例可选择性地结合各种公开特征。
图4b示出高速缓存页的实施例。可将存储在高速缓存281-28n中的信息组织成若干页,如图4b的右侧所示。每页可存储每个用户线程的存储器存取历史,诸如用户线程231(用户线程数据291)的页、用户线程232(用户线程数据292)的页等。因为高速缓存281-28n可各自存储与存储地址的交织位所标识的特定存储区有关的存取信息,所以高速缓存页可包括来自不同高速缓存的存储器存取信息,如图4b所示。
在一实施例中,处理线程(例如,241)可从处理缓冲器(例如,261)取回存储器存取信息,例如与用户线程(例如,用户线程231)存取存储地址有关的存储器存取信息,然后从存储器存取信息中取回存储器地址。处理线程可进一步确定其相关联的高速缓存(例如,高速缓存281)是否具有存储关于存储地址的存取历史的高速缓存条目。如果是这样的话,处理线程可分析存储在高速缓存条目中的存取历史和从处理缓冲器中取回的存储器存取信息以确定是否存在与存取存储地址有关的违例。
因为存储在高速缓存条目中的存取历史可包括与一周期内(例如高速缓存替换周期)可存取存储地址的用户线程中的任一个相关联的存储器存取信息,所以处理线程不仅能够像常规方法那样检测到实际违例,还能够检测到潜在违例。例如,违例(实际违例或者潜在违例)可指对线程的数据存取原子性的中断。在下文中,其原子性可能被中断的线程可被称为当前线程。
图5示出实际和潜在的违例的实施例。如图所示,线程242可以是当前线程,其原子性可被来自例如线程241、243和244之类的远程线程的交织存取中断。由处理线程取回的当前存储器存取信息可与线程242的当前存储器存取有关。在这种情形中,处理线程可确定检测间隔,例如线程242的最近的先前存储器存取时间和线程242的当前存储器存取时间之间的时间间隔。例如,如图5所示,线程242的op[-1]“W”(即写类型)存储器存取可以是当前存储器存取,且其相对应的时间可指示当前存储器存取时间,而线程242的op[-2]“W”存储器存取可以是最近的先前存储器存取,且其相对应的时间可指示最近的先前存储器存取时间。
然后,处理线程可分析存储在与存储地址相关联的高速缓存条目中的存取历史,例如远程线程(即线程241、243和244)的存取历史,以检测在检测周期中是否存在远程线程的任何交织存取。如果有,则处理线程可检测交织存取是否形成实际违例或潜在违例。在一实施例中,处理线程可例如通过使用以上用于数据存取原子性违例的表来检测交织存取是否形成数据存取违例。如果是,则如果其存取时间最接近当前存储器存取时间则处理线程可确定交织存取形成实际违例,否则处理线程可确定交织存取形成潜在违例。然而,如果仅检测到一个交织存取形成数据存取违例,则该一个交织存取可以是实际违例。
例如,如图5所示,五个交织存取可形成数据存取违例,即线程241的“op[-1]R”和“op[-2]R”存取、线程243的“op[-2]R”和“op[-3]R”存取、以及线程244的“op[-1]R”存取,其中线程241的“op[-1]R”存取可形成实际违例,且其余的可形成潜在违例。
然而,如果处理线程不能从其相关联的高速缓存中找到存储关于该存储地址的存取历史的高速缓存条目,则处理线程可确定是要将该存储器存取信息添加到高速缓存还是跳过该存储器存取信息。响应于添加该存储器存取信息,处理线程可获取空白高速缓存条目来存储与该存储器存取信息的存储地址相关联的存取历史,然后将该存储器存取信息添加到空白的高速缓存条目中。响应于跳过该存储器存取信息,处理线程可继续从处理缓冲器取得下一个存储器存取信息,并如上所述地操作下一个存储器存取信息。
应当意识到,上述过程中的存储地址可指存储一条数据的存储单元的地址,或存储完整数据或不同数据的连续存储单元的地址(例如,起始地址)。
图6示出存储存储器存取信息的实施例。在框601,用户线程(例如,用户线程231)可存取存储地址。如上所述,存储地址可指存储一条数据的存储单元的地址。。或者,可将存储地址视为存储完整数据或不同数据的连续存储单元的地址(例如,起始地址)。在框602,用户线程或其它设备可确定存储地址是否是感兴趣的区。如果是,则在框603,用户线程或其它设备可分析存储地址,以基于存储地址从与多个处理线程(例如,线程241-24n)相关联的多个填充缓冲器(例如,填充缓冲器271-27n)中标识一填充缓冲器。如上所述,存储地址可包括不同的部分,诸如交织位、对齐位和其余位。交织位可用于从多个填充缓冲器中标识该填充缓冲器。在一实施例中,每个填充缓冲器可具有由一个或多个位构成的标识符。在这种情形中,用户线程或其它设备可在框603分析存储地址的交织位。
然后,在框604,用户线程或其它设备可生成关于该存储器存取的存储器存取信息。在一实施例中,存储器存取信息可包括来自下组的一个或多个:存储地址、存储器存取的时间信息(例如,时戳或时间指示符)和类型(例如,读和写)、存储器存取长度、用户线程的标识符、数据长度、以及用于违例检测和/或其它目的的其它信息。在框605,用户线程可将存储器存取信息存储到框603中所标识的填充缓冲器。
然而,如果存储地址不是感兴趣的区,则在框606,用户线程或其它设备可跳过存储地址处理。应当意识到以上过程适用于所有的用户线程231-23k。
各实施例可对图6的方法实现其它修改和变化。在一实施例中,除在框602确定存储地址是否在感兴趣的预定区内之外,用户线程或其它设备可进一步确定是否存在由存储地址标识的填充缓冲器。如果有填充缓冲器,则用户线程或其它设备可将存储器存取信息存储到填充缓冲器,否则用户线程或其它设备可跳过存储地址处理。
图7示出检测数据存取违例的实施例。在框701,处理线程(例如,线程241)或其它设备可检测其相关联的填充缓冲器(例如,缓冲器271)是否已满。如果已满,则在框702,处理线程或其它设备可将填充缓冲器和其相关联的处理缓冲器(例如,缓冲器261)交换,以使得处理缓冲器可充当新的填充缓冲器,且填充缓冲器可充当新的处理缓冲器。在框703,处理线程或其它设备可确定起作用的处理缓冲器——即新的处理缓冲器——是否具有存储器存取信息。如果是,则在框704,处理线程或其它设备可从处理缓冲器(即,起作用的处理缓冲器)读取关于存储器存取的存储器存取信息。
在框705,处理线程或其它设备可确定其相关联的高速缓存(即高速缓存281)是否具有与存储器存取信息的存储地址有关的条目。在一实施例中,高速缓存可包括多个高速缓存条目,其中每个高速缓存条目可存储存取存储地址和可能的其它信息的存取历史。在一实施例中,存储地址可指存储一条数据的存储单元。在另一个实施例中,存储地址可指存储完整数据或不同数据的连续存储单元的地址(例如,起始地址)。
响应于高速缓存具有与从处理高速缓存读取的存储器存取信息的存储地址相关联的高速缓存条目,在框706,处理线程或其它设备可分析存储在高速缓存中的存取历史和存储器存取信息,以检测对于用户线程而言是否有记录在存储器存取信息中的用以存取存储地址的数据存取违例。在此处,可将该用户线程称为当前用户线程。
在一实施例中,处理线程或其它设备可确定检测间隔,然后确定在检测间隔中是否有远程用户线程(例如,除当前用户线程外的用户线程)的交织存取。在一实施例中,处理线程或其它设备可将记录在从处理缓冲器读取的存储器存取信息中的当前存储器存取时间和记录在存取历史中的最近的前一次存储器存取时间之间的时间段确定为检测间隔。最近的前一次存储器存取时间可基于存取历史表示之前发生的但最接近当前存储器存取时间的当前线程的存储器存取时间。
在框707,处理线程或其它设备可确定是否有关于当前用户线程的实际数据存取违例和/或潜在数据存取违例。在一实施例中,处理线程或其它设备可检测是否存在关于当前线程的数据存取违例。如果是,则处理线程或其它设备可检测数据存取违例是实际违例还是潜在违例。在一实施例中,如果在检测间隔期间仅有一个数据存取违例,则可将该数据存取违例确定为实际违例。然而,如果在检测间隔期间有一个以上的数据存取违例,则可将最接近当前用户线程的当前存储器存取时间所发生的数据存取违例确定为实际违例,且可将其余的数据存取违例确定为潜在违例。
如果存在实际/潜在违例,则处理线程或其它设备可在框708处理实际/潜在违例。在一实施例中,可存储关于所检测到的违例的信息,以供进一步分析或报告给用户。应当意识到可省略框708的操作。然后,在框709,处理线程或其它设备可将从处理缓冲器读取的存储器存取信息添加到与存储器存取信息的存储地址相关联的高速缓存条目。应当意识到,可在诸如框705之类的其它框之后执行框709的操作。
如果在框705确定在高速缓存中没有与存储器存取信息的存储地址相关联的高速缓存条目,则在框711,处理线程或其它设备可确定是添加存储器存取信息还是跳过它。在一实施例中,处理线程或其它设备可至少部分地基于存储地址是否在感兴趣的存储区内来作出框711的决定。响应于添加存储器存取信息,处理线程可在框712从高速缓存获取空白的高速缓存条目,在框713初始化高速缓存记录,并在框714将存储器存取信息添加到空白的高速缓存条目。在框715,响应于跳过存储器存取信息,处理线程或其它设备可忽略存储器存取信息并继续从处理缓冲器读取下一存储器存取信息。
尽管结合某些实施例描述了本发明,但应该理解在不背离本发明的精神和范围的情况下可以进行修改和改变,如本领域的技术人员所容易理解的。这种修改和改变被认为在本发明和所附权利要求的范围内。
Claims (26)
1.一种方法,包括:
获取与当前用户线程对存储地址的当前存储器存取有关的当前存储器存取信息;
确定高速缓存是否包括与所述存储地址相关联的高速缓存条目;以及
如果所述高速缓存包括与所述存储地址相关联的高速缓存条目,则分析存储在所述高速缓存条目中的存取历史和当前存储器存取信息,以检测是否存在存取所述存储地址的实际违例或潜在违例中的至少一个。
2.如权利要求1所述的方法,其特征在于,所述存取历史包括与对所述存储地址的多个存储器存取有关的存储器存取信息,所述多个存储器存取中的每一个由多个用户线程之一执行,其中与所述多个存储器存取中的一个存储器存取有关的所述存储器存取信息包括来自下组的一个或多个:存储器存取的时间信息、存储器存取的类型、存储器存取长度、执行存储器存取的多个用户线程中的一个用户线程的标识符、以及存储地址。
3.如权利要求1所述的方法,其特征在于,所述分析还包括:
确定所述存取历史是否包括与所述当前用户线程对所述存储地址的先前存储器存取有关的先前存储器存取信息;以及
如果所述存储器存取信息包括先前存储器存取信息,则确定从所述先前存储器存取的先前存取时间持续到所述当前存储器存取的当前存取时间的检测间隔。
4.如权利要求1所述的方法,其特征在于,所述分析还包括:
如果所述存取历史显示在检测间隔期间的远程存取时间由远程用户线程对所述存储地址的远程存储器存取,则检测到所述实际违例,所述远程存储器存取导致所述当前用户线程对存取所述存储地址的违例,且所述远程存取时间是基于存取历史的存取所述存储地址的最近时间;以及
如果所述存取历史显示在检测间隔期间的远程存取时间由远程用户线程对所述存储地址的远程存储器存取,则检测到所述潜在违例,所述远程存储器存取导致所述当前用户线程对存取所述存储地址的违例,且所述远程存取时间是基于存取历史的存取所述存储地址的非最近时间。
5.如权利要求1所述的方法,其特征在于,还包括:如果所述高速缓存包括与所述存储地址相关联的所述高速缓存条目,则将所述当前存储器存取信息添加到所述高速缓存条目。
6.如权利要求1所述的方法,其特征在于,还包括:如果所述高速缓存不包括与所述存储地址相关联的高速缓存条目,则
如果所述存储地址在预定的存储区内,则找到所述高速缓存的另一个高速缓存条目并将所述当前存储器存取信息存储到另一个高速缓存条目;以及
如果所述存储地址不在所述预定的存储区内,则跳过所述当前存储器存取信息。
7.如权利要求1所述的方法,其特征在于,所述当前存储器存取信息是从第一缓冲器中获取的。
8.如权利要求1所述的方法,其特征在于,还包括:如果第二缓冲器已满,则将第一缓冲器与第二缓冲器交换,其中所述第二缓冲器记录与多个用户线程存取存储区有关的信息。
9.如权利要求8所述的方法,其特征在于,所述存储地址包括用于标识所述第二缓冲器的至少一个位。
10.一种系统,包括:
存取存储器的多个用户线程;
处理线程;
与所述处理线程相关联的高速缓存;以及
与所述处理线程相关联的第一缓冲器,
其中所述高速缓存的高速缓存条目存储包括存储器存取信息的存取历史,所述存储器存取信息与对存储地址的多个存储器存取有关,所述多个存储器存取中的每一个由多个用户线程之一执行,且其中所述存储器存取信息是从所述第一缓冲器获取的。
11.如权利要求10所述的系统,其特征在于,与所述多个存储器存取中的一个存储器存取有关的所述存储器存取信息包括来自下组的一个或多个:存储器存取的时间信息、存储器存取的类型、存储器存取长度、执行存储器存取的多个用户线程中的一个用户线程的标识符、以及存储地址。
12.如权利要求10所述的系统,其特征在于,所述高速缓存是软件高速缓存。
13.如权利要求10所述的系统,其特征在于,所述处理线程还用于
从所述第一缓冲器获取与所述多个用户线程中的当前用户线程对所述存储地址的当前存储器存取有关的当前存储器存取信息;
确定所述高速缓存是否包括与所述存储地址相关联的高速缓存条目;以及
如果所述高速缓存包括与所述存储地址相关联的高速缓存条目,则分析存储在所述高速缓存条目中的存取历史和所述当前存储器存取信息,以检测是否存在实际违例或潜在违例中的至少一个。
14.如权利要求13所述的系统,其特征在于,所述处理线程还用于:
确定所述存取历史是否包括与所述当前用户线程对所述存储地址的先前存储器存取有关的先前存储器存取信息;以及
如果所述存取历史包括所述先前存储器存取信息,则确定从所述先前存储器存取的先前存取时间持续到所述当前存储器存取的当前存取时间的检测间隔。
15.如权利要求13所述的装置,其特征在于,所述处理线程还用于:
如果所述存取历史显示在检测间隔期间的远程存取时间由所述多个用户线程中的远程用户线程对所述存储地址的远程存储器存取,则检测到所述实际违例,所述远程存储器存取导致所述当前用户线程对存取所述存储地址的违例,且所述远程存取时间是基于存取历史的最近存储器存取时间;以及
如果所述存取历史显示在检测间隔期间的远程存取时间由所述多个用户线程中的远程用户线程对所述存储地址的远程存储器存取,则检测到所述潜在违例,所述远程存储器存取导致所述当前用户线程对存取所述存储地址的违例,且所述远程存取时间是基于存取历史的非最近存储器存取时间。
16.如权利要求10所述的系统,其特征在于,还包括与所述处理线程相关联的第二缓冲器,其中所述第二缓冲器用于存储与所述多个用户线程存取存储区有关的存储器存取信息,且所述处理线程还用于在所述第二线程已满时将第二缓冲器与第一缓冲器交换。
17.如权利要求16所述的系统,其特征在于,所述存储地址包括用于标识所述第二缓冲器的至少一个位。
18.一种包括多个指令的机器可读介质,在执行所述多个指令时导致系统:
获取与当前用户线程对存储地址的当前存储器存取有关的当前存储器存取信息;
确定高速缓存是否包括与所述存储地址相关联的高速缓存条目;以及
如果所述高速缓存包括与所述存储地址相关联的高速缓存条目,则分析存储在所述高速缓存条目中的存取历史和当前存储器存取信息,以检测是否存在存取所述存储地址的实际违例或潜在违例中的至少一个。
19.如权利要求18所述的机器可读介质,其特征在于,所述存取历史包括与对所述存储地址的多个存储器存取有关的存储器存取信息,所述多个存储器存取中的每一个由多个用户线程之一执行,其中与所述多个存储器存取中的一个存储器存取有关的所述存储器存取信息包括来自下组的一个或多个:存储器存取的时间信息、存储器存取的类型、存储器存取长度、执行存储器存取的多个用户线程中的一个用户线程的标识符、以及存储地址。
20.如权利要求18所述的机器可读介质,其特征在于,导致所述系统分析的多个指令还导致所述系统:
确定所述存取历史是否包括与所述当前用户线程对存储地址的先前存储器存取有关的先前存储器存取信息;以及
如果所述存储器存取信息包括先前存储器存取信息,则确定从所述先前存储器存取的先前存取时间持续到所述当前存储器存取的当前存取时间的检测间隔。
21.如权利要求18所述的机器可读介质,其特征在于,导致所述系统分析的多个指令还导致所述系统:
如果所述存取历史显示在检测间隔期间的远程存取时间由远程用户线程对所述存储地址的远程存储器存取,则检测到所述实际违例,所述远程存储器存取导致所述当前用户线程对存取所述存储地址的违例,且所述远程存取时间是基于存取历史的存取所述存储地址的最近时间;以及
如果所述存取历史显示在检测间隔期间的远程存取时间由远程用户线程对所述存储地址的远程存储器存取,则检测到所述潜在违例,所述远程存储器存取导致所述当前用户线程对存取所述存储地址的违例,且所述远程存取时间是基于存取历史的存取所述存储地址的非最近时间。
22.如权利要求18所述的机器可读介质,其特征在于,所述多个指令还导致所述系统:如果所述高速缓存包括与所述存储地址相关联的所述高速缓存条目,则将所述当前存储器存取信息添加到所述高速缓存条目。
23.如权利要求18所述的机器可读介质,其特征在于,所述多个指令还导致所述系统:如果所述高速缓存不包括与所述存储地址相关联的高速缓存条目,则
如果所述存储地址在预定的存储区内,则找到所述高速缓存的另一个高速缓存条目并将所述当前存储器存取信息存储到另一个高速缓存条目;以及
如果所述存储地址不在所述预定的存储区内,则跳过所述当前存储器存取信息。
24.如权利要求18所述的机器可读介质,其特征在于,所述当前存储器存取信息是从第一缓冲器中获取的。
25.如权利要求18所述的机器可读介质,其特征在于,所述多个指令还导致所述系统:如果第二缓冲器已满,则将第一缓冲器与第二缓冲器交换,其中所述第二缓冲器记录与多个用户线程存取存储区有关的信息。
26.如权利要求18所述的机器可读介质,其特征在于,所述存储地址包括用于标识所述填充缓冲器的至少一个位。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/186,416 | 2008-08-05 | ||
US12/186,416 US8032706B2 (en) | 2008-08-05 | 2008-08-05 | Method and apparatus for detecting a data access violation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101645034A true CN101645034A (zh) | 2010-02-10 |
CN101645034B CN101645034B (zh) | 2013-07-24 |
Family
ID=41396994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101611707A Expired - Fee Related CN101645034B (zh) | 2008-08-05 | 2009-08-04 | 用于检测数据存取违例的方法和装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8032706B2 (zh) |
EP (1) | EP2151760B1 (zh) |
JP (1) | JP5039754B2 (zh) |
KR (1) | KR101109210B1 (zh) |
CN (1) | CN101645034B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102844744A (zh) * | 2010-04-19 | 2012-12-26 | 国际商业机器公司 | 调试多线程代码 |
US9053333B2 (en) | 2011-06-23 | 2015-06-09 | International Business Machines Corporation | Managing confidential information |
CN107223240A (zh) * | 2015-03-12 | 2017-09-29 | 英特尔公司 | 与文件高速缓存的上下文感知管理相关联的计算方法和装置 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8959442B2 (en) * | 2010-06-11 | 2015-02-17 | Microsoft Corporation | Memory allocation visualization for unmanaged languages |
US9081628B2 (en) | 2011-05-27 | 2015-07-14 | Intel Corporation | Detecting potential access errors in a multi-threaded application |
US8898794B1 (en) | 2011-09-06 | 2014-11-25 | Andrei Teodor Borac | Efficient and secure data structure synchronization |
US9003126B2 (en) | 2012-09-25 | 2015-04-07 | Intel Corporation | Apparatus, system and method for adaptive cache replacement in a non-volatile main memory system |
US9501340B2 (en) | 2013-03-15 | 2016-11-22 | Intel Corporation | Mechanism for facilitating dynamic and efficient management of instruction atomicity violations in software programs at computing systems |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5701432A (en) * | 1995-10-13 | 1997-12-23 | Sun Microsystems, Inc. | Multi-threaded processing system having a cache that is commonly accessible to each thread |
US6920634B1 (en) | 1998-08-03 | 2005-07-19 | International Business Machines Corporation | Detecting and causing unsafe latent accesses to a resource in multi-threaded programs |
US6412043B1 (en) * | 1999-10-01 | 2002-06-25 | Hitachi, Ltd. | Microprocessor having improved memory management unit and cache memory |
US6701528B1 (en) | 2000-01-26 | 2004-03-02 | Hughes Electronics Corporation | Virtual video on demand using multiple encrypted video segments |
JP2002091795A (ja) * | 2000-09-14 | 2002-03-29 | Toshiba Corp | キャッシュ制御装置 |
US6502170B2 (en) * | 2000-12-15 | 2002-12-31 | Intel Corporation | Memory-to-memory compare/exchange instructions to support non-blocking synchronization schemes |
JP2002207613A (ja) | 2001-01-12 | 2002-07-26 | Fujitsu Ltd | 履歴採取装置及び履歴採取方法 |
US7516446B2 (en) * | 2002-06-25 | 2009-04-07 | International Business Machines Corporation | Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs |
US7093262B2 (en) | 2002-07-30 | 2006-08-15 | Intel Corporation | Detecting deadlocks in multithreaded programs |
US7168010B2 (en) * | 2002-08-12 | 2007-01-23 | Intel Corporation | Various methods and apparatuses to track failing memory locations to enable implementations for invalidating repeatedly failing memory locations |
CA2435148A1 (en) * | 2003-07-15 | 2005-01-15 | Robert J. Blainey | System and method for lock caching for compound atomic operations on shared memory |
US7849297B2 (en) * | 2003-08-28 | 2010-12-07 | Mips Technologies, Inc. | Software emulation of directed exceptions in a multithreading processor |
US7711931B2 (en) * | 2003-08-28 | 2010-05-04 | Mips Technologies, Inc. | Synchronized storage providing multiple synchronization semantics |
US7549150B2 (en) * | 2004-03-24 | 2009-06-16 | Microsoft Corporation | Method and system for detecting potential races in multithreaded programs |
JP2006318412A (ja) * | 2005-05-16 | 2006-11-24 | Toshiba Corp | 半導体装置 |
US7716645B2 (en) * | 2005-06-10 | 2010-05-11 | International Business Machines Corporation | Using atomic sets of memory locations |
US7844971B2 (en) | 2005-09-28 | 2010-11-30 | Intel Corporation | Method and apparatus for detecting cross-thread stack access in multithreaded programs |
US7577795B2 (en) * | 2006-01-25 | 2009-08-18 | International Business Machines Corporation | Disowning cache entries on aging out of the entry |
US7653789B2 (en) | 2006-02-01 | 2010-01-26 | Sun Microsystems, Inc. | Multiprocessor system that supports both coherent and non-coherent memory accesses |
JP4944518B2 (ja) * | 2006-05-26 | 2012-06-06 | 富士通セミコンダクター株式会社 | タスク遷移図表示方法及び表示装置 |
US7673181B1 (en) * | 2006-06-07 | 2010-03-02 | Replay Solutions, Inc. | Detecting race conditions in computer programs |
US8533681B2 (en) | 2007-03-07 | 2013-09-10 | The Board Of Trustees Of The University Of Illinois | Atomicity violation detection using access interleaving invariants |
US7861118B2 (en) * | 2007-03-30 | 2010-12-28 | Microsoft Corporation | Machine instruction level race condition detection |
US7539979B1 (en) * | 2008-03-31 | 2009-05-26 | International Business Machines Corporation | Method and system for forcing context-switch during mid-access to non-atomic variables |
-
2008
- 2008-08-05 US US12/186,416 patent/US8032706B2/en not_active Expired - Fee Related
-
2009
- 2009-07-27 EP EP09251884.4A patent/EP2151760B1/en not_active Not-in-force
- 2009-07-28 JP JP2009175730A patent/JP5039754B2/ja not_active Expired - Fee Related
- 2009-08-04 CN CN2009101611707A patent/CN101645034B/zh not_active Expired - Fee Related
- 2009-08-05 KR KR1020090072057A patent/KR101109210B1/ko active IP Right Grant
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102844744A (zh) * | 2010-04-19 | 2012-12-26 | 国际商业机器公司 | 调试多线程代码 |
US8838939B2 (en) | 2010-04-19 | 2014-09-16 | International Business Machines Corporation | Debugging multithreaded code by generating exception upon target address CAM search for variable and checking race condition |
US9053333B2 (en) | 2011-06-23 | 2015-06-09 | International Business Machines Corporation | Managing confidential information |
CN107223240A (zh) * | 2015-03-12 | 2017-09-29 | 英特尔公司 | 与文件高速缓存的上下文感知管理相关联的计算方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
US8032706B2 (en) | 2011-10-04 |
EP2151760A3 (en) | 2010-06-02 |
KR101109210B1 (ko) | 2012-01-30 |
JP2010067265A (ja) | 2010-03-25 |
EP2151760A2 (en) | 2010-02-10 |
EP2151760B1 (en) | 2015-10-28 |
KR20100017078A (ko) | 2010-02-16 |
JP5039754B2 (ja) | 2012-10-03 |
US20100037025A1 (en) | 2010-02-11 |
CN101645034B (zh) | 2013-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101645034B (zh) | 用于检测数据存取违例的方法和装置 | |
JP3618385B2 (ja) | データをバッファリングする方法およびそのシステム | |
CN102498477B (zh) | Tlb预取 | |
US8533681B2 (en) | Atomicity violation detection using access interleaving invariants | |
US7958317B2 (en) | Cache directed sequential prefetch | |
CN105701033B (zh) | 取决于模式而可动态配置的高速缓存存储器 | |
US10019381B2 (en) | Cache control to reduce transaction roll back | |
CN101158925B (zh) | 用于支持跟踪和标准高速缓存行的同时存储的装置和方法 | |
US20070130237A1 (en) | Transient cache storage | |
US9201806B2 (en) | Anticipatorily loading a page of memory | |
JPH1196074A (ja) | 交換アルゴリズム動的選択コンピュータシステム | |
CN102169429A (zh) | 预取单元、数据预取方法以及微处理器 | |
US11520589B2 (en) | Data structure-aware prefetching method and device on graphics processing unit | |
CN105701031A (zh) | 取决于模式而可动态配置以选择分配至全部或是一个组的多模式组相联高速缓存存储器 | |
CN102236541A (zh) | 预加载指令控制 | |
CN108463811A (zh) | 记录组指示符 | |
US20120096241A1 (en) | Performance of Emerging Applications in a Virtualized Environment Using Transient Instruction Streams | |
CN107003894A (zh) | 用于硬件事务内存程序的剖析器的装置和方法 | |
CN105930281A (zh) | 以配置信息驱动数据访存模式匹配的片上缓存预取机制 | |
CN101661437A (zh) | 旁路转换缓冲器以及在其中进行地址匹配的方法和装置 | |
JP4669244B2 (ja) | キャッシュメモリ装置およびメモリ制御方法 | |
US20160217079A1 (en) | High-Performance Instruction Cache System and Method | |
US20070266199A1 (en) | Virtual Address Cache and Method for Sharing Data Stored in a Virtual Address Cache | |
JP4867451B2 (ja) | キャッシュメモリ装置及びそれに用いるキャッシュメモリ制御方法並びにそのプログラム | |
US20140082286A1 (en) | Prefetching Method and Apparatus |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130724 Termination date: 20210804 |
|
CF01 | Termination of patent right due to non-payment of annual fee |