CN106030515A - 用于多处理器和多核平台的二进制翻译 - Google Patents
用于多处理器和多核平台的二进制翻译 Download PDFInfo
- Publication number
- CN106030515A CN106030515A CN201380076992.XA CN201380076992A CN106030515A CN 106030515 A CN106030515 A CN 106030515A CN 201380076992 A CN201380076992 A CN 201380076992A CN 106030515 A CN106030515 A CN 106030515A
- Authority
- CN
- China
- Prior art keywords
- translation
- thread
- overall situation
- response
- binary
- 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
Classifications
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/62—Uninstallation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
用于多核平台上的部分二进制翻译的技术包括用于每个处理器内核的共享翻译缓存、二进制翻译线程调度器、全局安装线程以及本地翻译线程和分析线程。在检测到热点时,如果被挂起,则线程调度器首先再继续全局线程,接着如果翻译缓存操作是待决的,则激活全局线程,以及最后调度本地翻译或分析线程以用于执行。翻译缓存操作集中于全局线程中并且与分析和翻译解耦合。线程调度器可以在非抢先核心中执行,并且翻译和分析线程可以在抢先运行时间中执行。全局线程可以主要是抢先的,其中小的非抢先核心用以将更新提交给共享的翻译缓存。全局线程可以迁移到处理器内核中的任何内核。保证了正向前进。描述和请求保护其他实施例。
Description
背景技术
计算机处理器通常执行以特定指令集编码的二进制代码。二进制翻译将以特定指令集为目标的二进制代码翻译为通常以另一指令集为目标的翻译的二进制代码。二进制翻译可以用于使能对于软件应用程序的向后或向前兼容,或者提高处理效率。例如,以诸如PowerPC的减少的指令集计算(RISC)体系结构为目标的二进制代码可以被翻译为以诸如IA-32的复杂指令集计算(CISC)体系结构为目标的二进制代码,从而允许遗赠应用程序在较新的硬件上运行。作为另一示例,二进制翻译可以生成以相同计算机体系结构为目标,但通过使用诸如较广的指令、改进的向量指令等的较新特征进行优化的翻译的二进制代码。二进制翻译可以是动态的,即代码可以随着其被执行而被翻译。对于一些系统,二进制翻译软件可以接近于硬件、对于任何操作系统或虚拟机监视器(VMM)透明地执行。
一些二进制翻译系统提供部分翻译。在这样的系统中,处理器可以原生地执行二进制代码,直到检测到代码“热点”为止。热点可以是可以受益于通过二进制翻译的优化的任何代码片段。一旦检测到热点,系统分析原生代码,将原生代码翻译为翻译后的代码,并且将翻译后的代码安装在翻译缓存(T缓存)中。在翻译之后,无论何时遭遇到热点,处理器执行翻译后的代码而不是原生代码。二进制翻译系统还可以计及自修改代码;即,在运行时间中修改自身的可执行代码。受到自修改代码影响的翻译后的代码通常是无效的。
附图说明
在此描述的概念作为示例并且不作为在附图中的限制来说明。为了说明的简单和清楚,在附图中示出的元件不必按比例绘制。在合适考虑的情况下,参考标记已经在附图当中重复以指示对应或类似元件。
图1是用于多核或多处理器平台中的二进制翻译的计算装置的至少一个实施例的简化方框图;
图2是图1的计算装置的环境的至少一个实施例的简化方框图;
图3是图1和2的计算装置的处理器内核的至少一个实施例的简化状态转变图;
图4是可以由图1和2的计算装置执行的用于二进制翻译线程调度的方法的至少一个实施例的简化流程图;以及
图5是可以由图1和2的计算装置执行的用于全局线程的方法的至少一个实施例的简化流程图。
具体实施方式
虽然本公开的概念易受到各种修改和替换形式的影响,但是其具体实施例已经作为附图中的示例示出并且将在此详细描述。然而,应理解,不存在将本公开的概念限制于所公开的特定形式的意图,而是相反,意图是覆盖与本公开和所附权利要求一致的所有修改、等同物和替换物。
在说明书中对“一个实施例”、“实施例”、“说明性实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但每个实施例可以或者可以不必然包括该特定特征、结构或特性。此外,这样的短语并不必然正提及相同实施例。此外,在特定特征、结构或特性结合实施例描述时,应认为,无论是否明确描述,结合其他实施例实现这样的特征、结构或特性在本领域技术人员的知识内。
所公开的实施例在一些情况下可以以硬件、固件、软件或其任何组合来实施。所公开的实施例还可以作为由瞬态或非瞬态机器可读(例如计算机可读)存储介质携带或存储在其上的指令来实施,其可以由一个或多个处理器读取并且执行。机器可读存储介质可以体现为用于存储或传输机器可读形式的信息的任何存储装置、机构或其他物理结构(例如,易失或非易失存储器、媒体盘或其他介质装置)。
在附图中,一些结构或方法特征可以以特定布置和/或排序示出。然而,应理解,可以不需要这样特定的布置和/或排序。相反,在一些实施例中,这样的特征可以以不同于说明性附图中所示的方式和/或次序来布置。附加地,在特定附图中包括结构或方法特征并不意味着暗示这样的特征在全部实施例中是需要的,并且在一些实施例中,可以不包括其他特征或者可以与其他特征组合。
现参照图1,用于二进制翻译的说明性计算装置100包括多核处理器120、I/O子系统128以及存储器130。处理器120支持热点驱动部分二进制翻译;即,处理器120的每个内核可以原生地执行代码或者可以生成并且执行优化的翻译后的代码。存储器130包括在处理器120的全部内核之间共享的全局翻译缓存。全局翻译缓存上的全部更新操作集中在单个全局线程内;安装因此与翻译和分析隔离。更新操作总是使用短的非抢先提交阶段和非阻挡锁定来使能二进制翻译系统的正向前进。附加地,全局线程可以在处理器内核之间迁移以允许执行翻译缓存更新的关键任务的抢先完成。二进制翻译系统调度器以以下次序将二进制翻译任务列入优先,其中最高优先级任务首先:本地翻译卸载、全局线程再继续、全局线程激活以安装或删除翻译、本地线程调度(其中翻译优先于分析)以及最后,翻译的本地安装。
与每内核生成一个私有翻译缓存相反,在内核当中共享翻译缓存减少资源消耗并且防止加倍的二进制翻译。附加地,计算装置100在内核当中协调二进制翻译活动以避免死锁并且确保二进制翻译的正向前进。因此,由计算装置100支持的二进制翻译对于包括大量处理器内核的处理器120是实用的。
计算装置100可以体现为能够执行在此描述的功能的任何类型的计算装置。例如,计算装置100可以体现为(不限于)计算机、智能电话、平板计算机、膝上型计算机、笔记本计算机、台式计算机、工作站、移动计算装置、蜂窝电话、手机、短信收发装置、车载远程信息处理装置、网络设备、环球网设备、分布式计算系统、多处理器系统、基于处理器的系统、消费电子装置、数字电视装置和/或配置为处理系统管理中断的任何其他计算装置。如图1所示,说明性计算装置100包括处理器120、I/O子系统128、存储器130以及数据存储设备136。当然,在其他实施例中,计算装置100可以包括其他或附加组件,诸如台式计算机中通常具有的那些组件(例如,各种输入/输出装置)。附加地,在一些实施例中,说明性组件中的一个或多个可以并入在另一组件中或者以其它方式来自另一组件的一部分。例如,在一些实施例中,存储器130或其部分可以并入在处理器120中。
处理器120可以体现为能够执行在此描述的功能的任何类型的多核处理器。例如,处理器120可以体现为微处理器、数字信号处理器、微控制器或其他处理器或处理/控制电路。处理器120包括处理器内核122;处理器内核122中的每一个是能够执行编程指令的独立处理单元。说明性处理器120包括两个处理器内核122;然而,在其他实施例中,处理器120可以包括一个或多个处理器内核122。虽然所示为包括多个处理器内核122的包括的单个处理器120,但在其他实施例中,计算装置100可以包括多个处理器120,其中的每一个可以是单或多核的。
处理器120包括分析器(profiler)124。分析器124简要描述通过处理器内核122的原生代码的执行并且检测热点。如上所述,热点是可以适合于通过二进制翻译进行优化的原生代码片段。刚一检测到热点,分析器124就生成用于特定处理器内核122的中断,通常已知为热点事件(HSE)。分析器124可以以硬件、微代码或固件实施。
处理器120还包括二进制翻译支持模块126。二进制翻译支持模块126截取由分析器124生成的热点事件并且将执行切换到受影响的处理器内核122上的合适二进制翻译软件。二进制翻译支持模块126还检测翻译后的代码内的自修改代码并且在翻译后的代码内标识自修改代码以用于删除。二进制翻译支持模块126还可以包括翻译条目(entry)机制以允许处理器内核122执行翻译后的代码。在一些实施例中,翻译条目机制可以包括映象表以将虚拟地址映射到翻译后的代码。例如,二进制翻译支持模块126可以在用于每个处理器内核122的页面表中设定条目,其提及翻译上下文中的翻译后的代码。二进制翻译支持模块126可以以硬件、微代码或固件实施。
处理器120可通信地耦合至I/O子系统128,其可以体现为电路和/或组件以便于与处理器120、存储器130和计算装置100的其他组件的输入/输出操作。例如,I/O子系统128可以体现为,或以其它方式包括存储器控制器集线器、平台控制器集线器、输入/输出控制集线器、固件装置、通信链路(即,点到点链路、总线链路、导线、电缆、光导、印刷电路板迹线等)和/或其他组件和子系统以便于输入/输出操作。在一些实施例中,I/O子系统128可以形成芯片上系统(SoC)的一部分并且与处理器120、存储器130和计算装置100的其他组件一起并入在单个集成电路芯片上。
存储器130可以体现为能够执行在此描述的功能的任何类型的易失或非易失存储器或数据存储装置。在操作中,存储器130可以存储在计算装置100的操作期间使用的各种数据和软件,诸如操作系统、应用程序、程序、库和驱动器。如上所述,存储器130可以经由I/O子系统128可通信地耦合至处理器120,或者在一些实施例中可以直接耦合至处理器120。存储器130包括原生代码区域132和翻译缓存134。如上所述,每个处理器内核122执行存储在原生代码区域132中的代码。附加地,每个处理器内核122可以翻译存储在原生代码区域132中的代码并且将翻译后的代码存储在翻译缓存134中。如上所述,翻译缓存134在全部处理器内核122当中共享。在一些实施例中,翻译缓存134可以是从计算装置100的操作系统或VMM不可访问的,或以其它方式被保护免受计算装置100的操作系统或VMM。存储器130还可以同时包括用于翻译缓存134的控制机制,包括非阻挡多读取者/单写入者锁定。在其他实施例(未图示)中,存储器130可以包括多于一个的混合共享/私有翻译缓存134,并且这些混合翻译缓存134中的每一个可以在包括处理器内核122的不相交子集的域当中共享。换言之,存储器130可以包括用于每个域的一个翻译缓存134,其中每个域设法满足在处理器内核122的子集当中共享资源的需求。
数据存储设备136可以体现为配置为用于数据的短期或长期存储的任何类型的一个或多个装置,诸如例如存储器装置和电路、存储器卡、硬盘驱动、固态驱动或其他数据存储装置。数据存储设备136可以存储用于二进制翻译的软件和/或固件,以及原生代码图像。
现参照图2,在一个实施例中,计算装置100建立操作期间的环境200。说明性实施例200包括原生应用程序202、翻译后的应用程序204以及二进制翻译模块206。环境200的各种模块可以体现为硬件、固件、软件或其组合。
原生应用程序202可以体现为位于原生代码区域132中的任何原生可执行的。翻译后的应用程序204可以体现为与原生应用程序202相对应的翻译后的二进制代码。因此,原生应用程序202是二进制翻译的输入而翻译后的应用程序204是二进制翻译的输出。虽然所示为应用程序,原生应用程序202和翻译后的应用程序204两者都可以包括任何可执行代码或可执行代码片段,诸如操作系统、公用程序、代码库或其他可执行代码。
二进制翻译模块206配置为将原生应用程序202的原生二进制代码翻译为翻译后的应用程序204的二进制代码。为了执行二进制翻译,二进制翻译模块206执行三个阶段:分析、翻译和安装。在分析阶段,二进制翻译模块206识别由分析器124识别的原生代码区域132中的区域——“热点”——用于翻译。在翻译阶段,热点处的原生代码被翻译并且排队以用于安装。在安装阶段,翻译后的代码被安装到翻译缓存134中,允许计算装置100执行翻译后的应用程序204。在一些实施例中,这些阶段中的每一个可以由子模块执行,例如由二进制翻译线程调度器212、全局线程核心214、全局线程运行时间216、翻译模块220、热点分析模块224或安装队列228执行。
二进制翻译模块206还包含二进制翻译核心208和二进制翻译运行时间210。二进制翻译核心的功能在处理器内核122上在非抢先状态下执行;即,二进制翻译核心208的功能不可以被计算装置100的其他进程或者外部中断中断。因此,为了实现可接受的等待时间和保存交互性,二进制翻译核心208内的操作可以是非阻挡的并且可以具有相对短的执行时间。二进制翻译线程调度器212和全局线程核心214可以被包含在二进制翻译核心208内。相比之下,二进制翻译运行时间210的功能在处理器内核122上以抢先状态执行;即,二进制翻译运行时间210的功能可以由计算装置100的其他进程或者外部中断中断。当中断时,二进制翻译运行时间210的功能可以被挂起并且能够在随后的时间再继续。全局线程运行时间216、翻译模块220以及热点分析模块224可以被包含在二进制翻译运行时间210内。
二进制翻译模块206的各种阶段可以通过由二进制翻译线程调度器212管理的一个或多个线程来执行。安装阶段可以由单个全局线程218执行。全局线程218在处理器内核122之间是可迁移的并且可以以抢先和非抢先模式两者执行,并且因此被图示为包含在二进制翻译核心208和二进制翻译运行时间210两者内。虽然图示为包括单个全局线程218,但是在一些处理器内核122被划分为包括在域中的子集的实施例中,二进制翻译模块206可以包括用于每个域的一个全局线程218。翻译阶段可以由包含在二进制翻译运行时间210内的一个或多个翻译线程222执行。翻译线程222中的每一个可以仅在单个处理器内核122上执行,并且二进制翻译模块206可以包括用于每个处理器内核122的一个翻译线程222。类似地,分析阶段可以由包含在二进制翻译运行时间210内的一个或多个分析线程226执行。分析线程226中的每一个可以仅在单个处理器内核122上执行,并且二进制翻译模块206可以包括用于每个处理器内核122的一个分析线程226。线程218、222、226中的每一个可以体现为硬件线程、操作系统线程、轻量进程、光纤或任何其他能够在处理器内核122之一上执行的独立指令流。
(多个)安装队列228缓冲将要安装在翻译缓存134中的由翻译线程222产生的翻译数据。因此,(多个)安装队列228解耦翻译,其可以从安装在多个线程222、226上同时执行,所述安装由单个全局线程218连续地执行。因此,(多个)安装队列228可以由二进制翻译核心208和二进制翻译运行时间210两者访问。(多个)安装队列228可以包括用于处理器内核122中的每一个的分开的安装队列。在一些实施例中,(多个)安装队列228可以包括在全部处理器内核122当中共享的单个安装队列,其包括并发控制机制。
现参照图3,在使用中,计算装置100的每个处理器内核122可以以由状态转变图300示出的多个状态执行。处理器内核122以NATIVE状态302开始。在NATIVE状态302中,处理器内核122原生地执行代码;即,处理器内核122执行来自原生代码区域132的代码而不施加任何二进制翻译。处理器内核122可以从NATIVE状态302来回转变至TREX状态304。在TREX状态304下,处理器内核122执行来自翻译缓存134的翻译后的代码。在处于NATIVE状态302中的同时,当热点事件(HSE)被检测到时,处理器内核122转变到TRANS核心状态306。
TRANS核心状态306是非抢先状态。即,处理器内核122不可以被中断;如由带回到TRANS核心状态306的INT状态转变所示的。在TRANS核心状态306中,处理器内核122执行二进制翻译线程调度器。如下所述,二进制翻译线程调度器管理分析、翻译以及安装线程的执行以及建立它们之间的优先级。这些线程中的每一个可以在各个点处抢先,并且线程调度器必须识别哪个任务开始或再继续。刚一确定开始分析或翻译线程,或者再继续被挂起的分析或翻译线程,处理器内核122就转变到TRANS运行时间状态308。
TRANS运行时间状态308是抢先状态。即,刚一接收到中断INT,处理器内核122就转变到SUSPEND状态310。在SUSPEND状态310中,当前执行的线程被挂起以便能够在随后的时间再继续。例如,处理器内核122可以存储当前线程上下文,当前体系结构状态的拷贝等等。在挂起之后,处理器内核122转变回到NATIVE状态302。因此,挂起的线程仅在随后检测到HSE事件时再继续。
回到参照TRANS运行时间状态308,在完成热点分析和翻译之后,处理器内核122转变回到TRANS核心状态306以发起翻译后的代码的安装。在TRANS核心状态306中,处理器内核122确定是否开始或再继续全局线程以处理安装任务。为了执行安装,处理器内核122转变到全局线程运行时间状态312。
全局线程运行时间状态312是抢先状态。刚一接收到中断INT,处理器内核122就转变到SUSPEND状态310,并且如上所述,全局线程被挂起。在处于全局线程运行时间状态312中的同时,处理器内核122将翻译后的代码安装到全局翻译缓存134中。当写入全局翻译缓存134时,处理器内核122转变到全局线程核心状态314。
全局线程核心状态314是非抢先状态。即,任何中断INT不使处理器内核122转变状态。因此,到翻译缓存134的写入是原子性的并且可以使用相当简单和无错非阻挡多读取者/单写入者锁定来保护。为了减少输入等待时间,全部写入应该相对快速地提交,以使得处理器内核122可以快速地转变到全局线程核心状态314外。在完成写入之后,如果另外的安装任务保留,则处理器内核122转变到全局线程运行时间状态312。如果没有另外的安装任务保留,则处理器内核122转变到DEACTIVATE状态316。在DEACTIVE状态316中,全局线程被解激活。不同于在SUSPEND状态310中,当解激活时,全局线程不可以被再继续而是必须在需要时被重新开始。在解激活全局线程之后,处理器内核122转变回到NATIVE状态302。
现参照图4,在使用中,计算装置100可以执行用于二进制翻译线程调度的方法400。方法开始于方框402中的调度器条目。如上所述,在检测到由分析器124生成的热点事件(HSE)之后,可以进入二进制翻译线程调度器。如图示的,在二进制翻译核心208中进入线程调度器。如上所述,虽然在二进制翻译核心208中,但方法400是非抢先的。方法400的非抢先进程在图4中以双线框示出;抢先进程以单线框示出。
在线程条目之后,在方框404中,计算装置100确定本地卸载对于当前处理器内核122是否是待决的。当翻译后的代码的一部分已经由全局线程218标记以用于删除时,本地卸载是待决的。为了确定本地卸载是否是待决的,计算装置100可以检查特定于当前处理器内核122的删除待决事件标记或其他数据结构。计算装置100在再继续或开始二进制翻译线程之前检查本地卸载,以确保当前处理器内核122与翻译缓存134之间的一致性。如果本地卸载不是待决的,则方法400分出来向前到方框408。如果本地卸载是待决的,则方法400前进到方框406。
在方框406中,计算装置100执行用于当前处理器内核122的任何待决本地卸载。计算装置100可以调用二进制翻译支持模块126以从特定于当前处理器内核122的数据结构去除针对本地卸载调度的翻译后的代码片段。例如,计算装置100可以从当前处理器内核122的页面表去除对翻译后的代码片段的虚拟地址的引用。
在方框408中,计算装置100确定全局线程218是否被挂起。如上所述,全局线程218可以在执行期间被抢先和挂起。如果全局线程218未被挂起,方法400分出来向前到方框412。如果全局线程218被挂起,则方法400前进到方框410。在方框410中,计算装置100将全局线程218迁移到当前处理器内核122并且再继续全局线程218。线程迁移可以使用微代码或处理器内核122的其他低级别特征来使能。在这样做的情况下,计算装置100转变到二进制翻译运行时间210,从而允许抢先。在再继续全局线程218之后,方法400将执行转移到全局线程218先前被挂起的点,如以下关于图5描述的。因此,计算装置100通过在开始或再继续任何其他二进制翻译线程222、226之前再继续全局线程218来使全局线程218优先于其他二进制翻译线程222、226。
返回参照方框408,如果全局线程218未被挂起,则方法400分出来向前到方框412。在方框412中,计算装置100确定翻译缓存操作是否是待决的。翻译缓存操作可以包括来自翻译缓存134的请求的安装或请求的删除。如下所述,在完成翻译之后,翻译线程通过全局线程218将用于安装的翻译后的代码排队到(多个)安装队列228中。附加地,由于检测到自修改代码,二进制翻译支持模块126可以标记用于删除的翻译后的代码。如果没有翻译缓存是待决的,则方法400分出来向前到方框418。如果翻译缓存操作是待决的,则方法400前进到方框414。在方框414中,计算装置100激活当前处理器内核122上的全局线程218。如上所述,全局线程218在二进制翻译运行时间210中被激活,从而允许抢先。在激活之后,方法400前进到方框416中的全局线程条目点,如以下关于图5描述的。
返回参照方框412,如果没有翻译缓存操作是待决的,则方法400分出来向前到方框418。在方框418中,计算装置100确定与当前处理器内核122相关联的翻译线程222是否被挂起。不同于全局线程218,若干翻译线程222可以在计算装置100上同时存在。因此,翻译线程222不在处理器内核122之间迁移。如果没有用于处理器内核122的翻译线程222被挂起,则方法400分出来向前到方框426。如果翻译线程222已经被挂起,则方法400前进到方框420。
在方框420中,计算装置100再继续翻译线程222。翻译线程222被再继续并且在二进制翻译运行时间210中执行并且因此是可抢先的。因此,计算装置100通过在开始分析线程226之前再继续翻译线程222而使翻译优先于分析。在方框422中,执行翻译线程222的计算装置100生成用于热点的翻译后的代码。翻译后的代码在安装队列228中排队以由全局线程218安装。如上所述,每个处理器内核122可以具有专用的安装队列228,或者单个安装队列228可以由处理器内核122共享,易受诸如锁定的同时控制机制。在使翻译后的代码排队之后,方法400跳回到方框424中的调度器条目。因此,计算装置100在方框402处重新进入二进制翻译调度器,如上所述。
返回参照方框418,如果没有用于处理器内核122的翻译线程222被挂起,则方法400分出来向前到方框426。在方框426中,计算装置100确定当前检测到的热点事件(HSE)是否已经完全被处理。即,计算装置100确定翻译线程222是否已经完成生成用于当前检测到的HSE(与例如针对其翻译被抢先的较早的HSE相反)的翻译后的代码。如果代码生成已经完成,则计算装置100退出二进制线程调度器并且返回到方框428中的原生代码执行。如上所述,在原生代码执行期间,计算装置100在其被遭遇时可以执行来自翻译缓存134的翻译后的代码。如果代码生成还未完成,则方法400分出来到方框430。
在方框430中,计算装置100开始分析线程226以分析当前热点事件。分析线程226在二进制翻译运行时间210中执行并且因此是可抢先的。如图示的,分析线程226具有其他线程的最低优先级并且将仅在没有挂起的全局线程218、没有待决翻译缓存操作以及没有挂起的翻译线程222时执行。在分析线程226的执行期间,计算装置100识别对应于要被翻译的原生代码的原生代码区域132内的目标位置。所识别的热点可以是频繁执行的代码区域、循环、嵌套循环、基本块或可以受益于二进制翻译的任何其他代码区域。在分析线程226的完成之后,方法400前进到方框432。
在方框432中,计算装置100确定在翻译缓存134中是否存在用于由分析线程226识别的热点的翻译后的代码。方框432在二进制翻译核心208中执行并且因此是非可抢先的。如果不存在翻译,则方法400前进到方框434。在方框434中,计算装置100开始翻译线程222以翻译热点。翻译线程222在二进制翻译运行时间210中执行并且因此是可抢先的。在开始翻译线程222之后,方法400进行到方框422以生成翻译和使用于安装的翻译后的代码排队,如上所述。
返回参照方框432,如果确实存在用于热点的翻译,方法400分出来向前到方框436。在方框436中,计算装置100执行用于当前处理器内核122的翻译后的代码的本地安装。本地安装使翻译后的代码对于当前处理器内核122是可视的并且可执行的。在本地安装期间,计算装置100可以对当前处理器内核122的翻译条目机制编程。例如,计算装置100可以使用二进制翻译支持模块126以在用于处理器内核122的页面表中安装对翻译后的代码的引用,以用于翻译上下文。本地安装在二进制翻译核心208中执行并且因此是非可抢先的。附加地,在本地安装期间,计算装置100可以在翻译缓存134上取出非阻挡多读取者/单写入者锁定,以确保在本地安装期间翻译缓存134不被全局线程218更新并且因此确保数据一致性。在一个实施例中,这样的非阻挡锁定可以通过确定该锁定是否由写入者采取并且如果该锁定由作为写入者的另一线程采取则产出执行来实施。因此,保证了二进制翻译的正向前进。在执行本地安装之后,方法400前进到方框428以返回到原生代码执行,如上所述。
总而言之,在遭遇到热点事件时,方法400可以在处理器内核122的每一个上被调用。方法400的每次调用使调度全局线程218优先于任何本地翻译线程222或分析线程226。因此,连同在本地处理器内核122上调度线程222、226的一个或多个本地调度器一起,方法400有效地实施单个全局调度器,其将全局线程218列入优先。因此,全局线程218与翻译线程222和分析线程226的执行解耦合。
现参照图5,在使用中,计算装置100可以执行用于全局线程218的方法500。方法500开始于方框502中的全局线程条目点并且前进到方框504。在方框504中,计算装置100确定删除事件是否对于翻译缓存134是待决的。方法500的非抢先进程在图5中以双线框示出;抢先进程以单线框示出。因此,方框504的确定在二进制翻译运行时间210中做出,意味着该确定是可抢先的。例如在翻译后的代码不再有效时,删除事件指示翻译缓存134内的翻译后的代码应该被删除。删除事件可以通过二进制翻译支持模块126在检测到自修改代码时生成。计算装置100可以确定删除事件待决标识是否已经由二进制翻译支持模块126设定。如果没有删除事件是待决的,则方法500分出来向前到方框510。如果删除事件是待决的,方法500前进到方框506。
在方框506中,计算装置100对于从翻译缓存134的删除准备受影响的翻译。为了准备删除,计算装置100确定所有要更新的受影响的存储器位置。然而,计算装置100不提交对于存储器的任何写入。准备在二进制翻译运行时间210中做出并且因此是可抢先的。
在方框508中,计算装置100从翻译缓存134删除受影响的代码并且调度任何受影响的处理器内核122以用于本地卸载。对于翻译缓存134的删除被在二进制翻译核心208中写入并且因此是非可抢先的。因为仅单个全局线程218任何时候可以是激活的,将不存在对于翻译缓存134的并发安装。因此,全局线程218可以在对翻译缓存134的写入之前获得非阻挡多读取者/单写入者锁定。因此,对于翻译缓存134的更新相对于彼此是有效原子性的,并且翻译缓存134可以总是在一致状态中。计算装置100可以通过设定删除待决事件标识或以其它方式更新的特定于受影响的处理器内核122的数据结构来调度本地卸载。调度二进制翻译核心208中的本地卸载确保所删除的翻译将对于受影响的处理器内核122不再是可视的,如上所述。
返回参照方框504,如果没有删除事件是待决的,则方法500分出来向前至方框510。在方框510中,计算装置100确定翻译卸载是否是待决的。计算装置100可以引用用于由翻译线程222排队的任何待决翻译的安装队列228。全局线程218可以实施工作调度逻辑以选择翻译后的代码用于安装以将特定翻译列入优先,确保公平性,或以其它方式控制安装的次序。该确定发生在二进制翻译核心208中并且因此是非可抢先的。如果没有安装是待决的,则方法500前进到方框512。在方框512中,计算装置100解激活全局线程218,并且在方框514中计算装置100返回到原生代码执行。计算装置100留下二进制翻译核心208并且因此是可抢先的。如上所述,一旦在原生代码执行中,计算装置100可以执行原生代码以及所遭遇的翻译缓存134内的任何翻译后的代码。此外,如上所述,一旦解激活,全局线程218可以在需要时通过二进制线程调度器来重新开始。
返回参照方框510,如果安装是待决的,方法500分出来向前到方框516。方框516在二进制翻译运行时间210中执行并且因此是可抢先的,除非另外指明。在方框516中,计算装置100将由翻译线程222生成的翻译后的代码安装到全局翻译缓存134中。在方框518中,计算装置100在翻译缓存134内分配用于翻译后的代码的存储器。在方框520中,计算装置100确定是否充足的存储器被分配。如果是,则方法500分出来向前到方框526,以下所述的。如果否,则方法500前进到方框522。
在方框522中,计算装置100执行无用单元收集以回收翻译缓存134内的存储器。计算装置100可以使用任何算法以识别翻译缓存134内可以被删除的翻译后的代码。例如,计算装置100可以删除最近已经不使用的翻译后的代码。作为另一示例,计算装置100可以删除从其他翻译后的代码不可到达的翻译后的代码。在无用单元收集期间,计算装置100识别用于删除的翻译后的代码,但不提交对于存储器的任何更新。
在方框524中,计算装置100从翻译缓存134删除回收的存储器并且设定用于任何受影响的处理器内核122的本地卸载。对于翻译缓存134的更新和设定本地卸载发生在二进制翻译核心208内并且因此是非可抢先的。如上所述,在更新期间,全局线程218可以取出翻译缓存134上的非阻挡多读取者/单写入者锁定以确保数据一致性。如以上结合方框508描述的,本地卸载通过更新删除待决事件标识或特定于受影响的处理器内核122的其他数据结构来设定。在调度本地卸载之后,方法500返回到方框518以再次尝试分配存储器。
返回参照方框520,如果充足的存储器被分配,则方法500分出来向前到方框526。在方框526中,计算装置100将翻译后的数据写入翻译缓存134中。全局线程218可以在写入期间通过在翻译缓存134上采取非阻挡多读取者/单写入者锁定来保护数据一致性。在翻译缓存134中的安装之后,翻译后的代码对于全部处理器内核122是可访问的,但可能是不执行的。在本地安装之后,翻译后的代码可以在每个处理器内核122上执行,如以上结合图4的方框436描述的。
在执行安装之后,在方框528中,计算装置100确定附加的翻译是否留待安装。如果是,则方法500返回到方框518以继续安装。如果否,则方法500完成方框516。在方框516中完成全局安装之后,方法500返回到方框504以确定附加的翻译缓存操作是否是待决的。
示例
以下提供在此公开的装置、系统和方法的说明性示例。装置、系统和方法的实施例可以包括以下描述的示例中的任何一个或多个以及示例的任何组合。
示例1包括一种用于多核二进制翻译的计算装置,所述计算装置包括:全局翻译缓存;包括多个处理器内核的多核处理器,所述多核处理器用以执行全局线程和本地二进制翻译线程,所述全局线程用以将二进制翻译安装在所述全局翻译缓存中;以及包括二进制翻译线程调度器的二进制翻译模块,用以:在所述多个处理器内核中的处理器内核的非抢先模式中并且响应于进入所述二进制翻译调度器,确定所述全局线程是否被挂起;响应于确定所述全局线程被挂起,将所述全局线程迁移到所述处理器内核并且再继续所述全局线程;在所述非抢先模式中并且响应于确定所述全局线程未被挂起,确定全局翻译缓存操作是否是待决的;响应于确定所述全局翻译缓存操作是待决的,激活所述处理器内核上的所述全局线程;以及在所述处理器内核上的抢先模式中并且响应于确定所述全局翻译缓存操作不是待决的,开始所述本地二进制翻译线程以生成待决全局翻译缓存操作;其中,所述处理器用以在所述多个处理器内核中的处理器内核上,响应于识别原生代码热点的热点事件而进入所述二进制翻译调度器。
示例2包括示例1的主题,并且其中所述本地二进制翻译线程包括翻译线程;所述二进制翻译线程调度器还用以在所述二进制翻译调度器中的所述非抢先模式中确定所述全局翻译缓存中是否存在用于所述热点的二进制翻译;以及在所述处理器内核上的所述抢先模式中并且响应于确定不存在用于所述热点的所述二进制翻译,开始所述翻译线程以:(i)生成用于所述热点的所述二进制翻译以及(ii)在完成时使所述二进制翻译排队以用于安装,其中使所述二进制翻译排队以用于安装包括生成所述待决全局翻译缓存操作;以及其中,所述全局线程还用以在所述非抢先模式中,确定所述二进制翻译是否已经排队以用于安装;以及在所述抢先模式中,响应于确定所述二进制翻译已经排队以用于安装而将所述二进制翻译安装到所述全局翻译缓存中。
示例3包括示例1和2中的任何一个所述的主题,并且其中,确定所述全局翻译缓存中是否存在用于所述热点的所述二进制翻译包括在所述全局翻译缓存上采取非阻挡读取锁定。
示例4包括示例1-3中的任何一个所述的主题,并且其中,将所述二进制翻译安装到所述全局翻译缓存中包括在所述全局翻译缓存上采取非阻挡写入锁定。
示例5包括示例1-4中的任何一个所述的主题,并且其中,所述全局线程还用以:在所述抢先模式中,在确定所述二进制翻译是否已经排队以用于安装之前确定全局翻译缓存删除事件是否是待决的;以及在所述非抢先模式中,响应于确定所述全局翻译缓存删除事件是待决的而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载;以及所述二进制翻译线程调度器还用以:在所述非抢先模式中,在确定所述全局线程是否被挂起之前确定本地卸载对于所述处理器内核是否是待决的;以及在所述非抢先模式中,响应于确定所述本地卸载是待决的而执行所述待决的本地卸载。
示例6包括示例1-5中的任何一个所述的主题,并且其中,响应于确定所述全局翻译缓存删除事件是待决的而调度用于每个受影响的处理器内核的本地卸载包括在所述全局翻译缓存上采取非阻挡写入锁定。
示例7包括示例1-6中的任何一个所述的主题,并且其中,所述全局线程还用以:在所述抢先模式中执行无用单元收集以恢复全局翻译缓存存储器;以及在所述非抢先模式中,响应于所述无用单元收集而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载。
示例8包括示例1-7中的任何一个所述的主题,并且其中,响应于所述无用单元收集而调度用于每个受影响的处理器内核的本地卸载包括在所述全局翻译缓存上采取非阻挡写入锁定。
示例9包括示例1-8中的任何一个所述的主题,并且其中,所述二进制翻译线程调度器还用以:在所述非抢先模式中并且在确定是否存在用于所述热点的所述二进制翻译之前,确定所述翻译线程是否被挂起;在所述抢先模式中,响应于确定所述翻译线程被挂起而再继续所述翻译线程;在所述非抢先模式中,响应于确定所述翻译线程未被挂起而确定所述热点是否已经被分析;以及在所述抢先模式中,响应于确定所述热点还未被分析而开始热点分析线程以识别用于所述热点的原生代码位置。
示例10包括示例1-9中的任何一个所述的主题,并且其中,所述二进制翻译线程调度器还用以:在所述非抢先模式中,响应于确定用于所述热点的所述二进制翻译存在而将来自所述全局翻译缓存的所述二进制翻译在本地安装在所述处理器内核上。
示例11包括示例1-10中的任何一个所述的主题,并且其中,在本地安装在所述处理器内核上还包括在所述全局翻译缓存上采取非阻挡读取锁定。
示例12包括一种用于部分二进制翻译的计算装置,所述计算装置包括:全局翻译缓存;以及包括多个处理器内核的多核处理器,所述多核处理器用以在所述多核处理器的处理器内核的原生状态中执行原生代码;响应于检测到由所述多核处理器的分析器生成的热点事件而从所述原生状态转变到所述处理器内核的非抢先翻译核心状态;响应于开始本地翻译线程或本地分析线程而从所述翻译核心状态转变到所述处理器内核的抢先翻译运行时间状态,以生成用于安装的翻译后的代码;响应于开始全局线程而从所述翻译核心状态转变到所述处理器内核的抢先全局线程运行时间状态,以将所生成的翻译后的代码安装在所述全局翻译缓存中;以及响应于将数据写入所述全局翻译缓存中而从所述全局线程运行时间状态转变到所述处理器内核的非抢先全局线程核心状态。
示例13包括示例12所述的主题,并且其中,所述多核处理器还用以响应于在处于所述全局线程运行时间状态中的同时检测到中断而使所述全局线程挂起;以及响应于所述全局线程的再继续而从所述翻译核心状态转变到所述全局线程运行时间状态。
示例14包括示例12和13中的任何一个所述的主题,其中从所述翻译核心状态转变到所述全局线程运行时间状态具有比从所述翻译核心状态转变到所述抢先翻译运行时间状态更高的优先级。
示例15包括示例12-14中的任何一个所述的主题,并且其中,从所述翻译核心状态转变到所述全局线程运行时间状态包括将所述全局线程迁移到所述处理器内核。
示例16包括示例12-15中的任何一个所述的主题,并且其中,所述多核处理器还用以响应于在处于所述翻译运行时间状态中的同时检测到中断而使所述本地翻译线程挂起;以及响应于所述本地翻译线程的再继续而从所述翻译核心状态转变到所述翻译运行时间状态。
示例17包括示例12-16中的任何一个所述的主题,并且其中,响应于所述本地翻译线程的再继续而从所述翻译核心状态转变到所述翻译运行时间状态具有比响应于开始所述本地翻译线程或所述本地分析线程而从所述翻译核心状态转变到所述抢先翻译运行时间状态更高的优先级。
示例18包括示例12-17中的任何一个所述的主题,并且其中,多核处理器还用以响应于在处于所述翻译运行时间状态中的同时检测到中断而终止所述本地分析线程。
示例19包括示例12-18中的任何一个所述的主题,并且其中,多核处理器还用以响应于翻译后的代码安装到翻译缓存中的完成而从全局线程核心状态转变到原生状态。
示例20包括示例12-19中的任何一个所述的主题,并且其中多核处理器还用以响应于翻译后的代码的本地安装的完成而从翻译核心状态转变到原生状态。
示例21包括一种用于多核二进制翻译的方法,所述方法包括响应于识别原生代码热点的热点事件而在多核处理器的处理器内核上进入二进制翻译调度器;响应于进入所述二进制翻译调度器而在非抢先模式中确定全局线程是否被挂起;响应于确定所述全局线程被挂起而将所述全局线程迁移到所述处理器内核并且再继续所述全局线程;在所述非抢先模式中并且响应于确定所述全局线程未被挂起,确定全局翻译缓存操作是否是待决的;响应于确定所述全局翻译缓存操作是待决的而激活所述处理器内核上的所述全局线程;以及在所述处理器内核上的抢先模式中并且响应于确定所述全局翻译缓存操作不是待决的,开始本地二进制翻译线程以生成待决全局翻译缓存操作。
示例22包括示例21的主题,并且其中,开始所述本地翻译线程包括:在所述二进制翻译调度器中的所述非抢先模式中,确定全局翻译缓存中是否存在用于所述热点的二进制翻译;以及在所述处理器内核上的抢先模式中并且响应于确定不存在用于所述热点的所述二进制翻译,开始翻译线程以:(i)生成用于所述热点的所述二进制翻译以及(ii)在完成时使所述二进制翻译排队以用于安装,其中使所述二进制翻译排队以用于安装包括生成所述待决全局翻译缓存操作;所述方法还包括在所述非抢先模式中并且在所述全局线程中,确定所述二进制翻译是否已经排队以用于安装;以及在所述抢先模式中并且在所述全局线程中,响应于确定所述二进制翻译已经排队以用于安装而将所述二进制翻译安装到所述全局翻译缓存中。
示例23包括示例21和22中的任何一个所述的主题,其中,确定全局翻译缓存中是否存在用于热点的二进制翻译包括在全局翻译缓存上采取非阻挡读取锁定。
示例24包括示例21-23中的任何一个所述的主题,并且其中,将二进制翻译安装到全局翻译缓存中包括在全局翻译缓存上采取非阻挡写入锁定。
示例25包括示例21-24中的任何一个所述的主题,并且还包括在所述全局线程中的所述抢先模式中,在确定所述二进制翻译已经排队以用于安装之前确定全局翻译缓存删除事件是否是待决的;在所述全局线程中的所述非抢先模式中,响应于确定所述全局翻译缓存删除事件是待决的而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载;在所述二进制翻译调度器中的所述非抢先模式中,在确定所述全局线程是否被挂起之前确定本地卸载对于所述处理器内核是否是待决的;以及在所述二进制翻译调度器中的所述非抢先模式中,响应于确定所述本地卸载是待决的而执行所述待决的本地卸载。
示例26包括示例21-25中的任何一个所述的主题,并且其中,响应于确定所述全局翻译缓存删除事件是待决的而调度用于每个受影响的处理器内核的本地卸载包括在全局翻译缓存上采取非阻挡写入锁定。
示例27包括示例21-26中的任何一个所述的主题,并且其中,将所述二进制翻译安装到所述全局翻译缓存中包括:在所述全局线程中的所述抢先模式中执行无用单元收集以恢复全局翻译缓存存储器;以及在所述全局线程中的所述非抢先模式中,响应于执行所述无用单元收集而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载。
示例28包括示例21-27中的任何一个所述的主题,并且其中,响应于执行所述无用单元收集而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载包括在全局翻译缓存上采取非阻挡写入锁定。
示例29包括示例21-28中的任何一个所述的主题,并且其中,开始所述本地翻译线程还包括:在所述二进制翻译调度器中的所述非抢先模式中并且在确定是否存在用于所述热点的所述二进制翻译之前,确定所述翻译线程是否被挂起;在所述处理器内核上的所述抢先模式中,响应于确定所述翻译线程被挂起而再继续所述翻译线程;在所述二进制翻译调度器中的所述非抢先模式中,响应于确定所述翻译线程未被挂起而确定所述热点是否已经被分析;以及在所述处理器内核上的所述抢先模式中,响应于确定所述热点还未被分析而开始热点分析线程以识别用于所述热点的原生代码位置。
示例30包括示例21-29中的任何一个所述的主题,并且还包括在所述二进制翻译调度器中的所述非抢先模式中,响应于确定存在用于所述热点的所述二进制翻译而将来自所述全局翻译缓存的所述二进制翻译在本地安装在所述处理器内核上。
示例31包括示例21-30中的任何一个所述的主题,并且其中在本地安装在所述处理器内核上还包括在全局翻译缓存上采取非阻挡读取锁定。
示例32包括一种用于多核处理器上的部分二进制翻译的方法,所述方法包括在所述多核处理器中的处理器内核的原生状态中执行原生代码;响应于检测到由所述多核处理器的分析器生成的热点事件而从所述原生状态转变到所述处理器内核的非抢先翻译核心状态;响应于开始本地翻译线程或本地分析线程而从所述翻译核心状态转变到所述处理器内核的抢先翻译运行时间状态,以生成用于安装的翻译后的代码;响应于开始全局线程而从所述翻译核心状态转变到所述处理器内核的抢先全局线程运行时间状态,以将所生成的翻译后的代码安装在全局翻译缓存中;以及响应于将数据写入所述全局翻译缓存中而从所述全局线程运行时间状态转变到所述处理器内核的非抢先全局线程核心状态。
示例33包括示例32所述的主题,并且还包括响应于在处于所述全局线程运行时间状态中的同时检测到中断而使所述全局线程挂起;以及响应于再继续所述全局线程而从所述翻译核心状态转变到所述全局线程运行时间状态。
示例34包括示例32和33中的任何一个所述的主题,并且其中从所述翻译核心状态转变到所述全局线程运行时间状态具有比从所述翻译核心状态转变到所述抢先翻译运行时间状态更高的优先级。
示例35包括示例32-34中的任何一个所述的主题,并且其中从所述翻译核心状态转变到所述全局线程运行时间状态包括将所述全局线程迁移到所述处理器内核。
示例36包括示例32-35中的任何一个所述的主题,并且还包括响应于在处于翻译运行时间状态中的同时检测到中断而挂起本地翻译线程;以及响应于再继续本地翻译线程而从翻译核心状态转变到翻译运行时间状态。
示例37包括示例32-36中的任何一个所述的主题,并且其中响应于再继续本地翻译线程而从所述翻译核心状态转变到所述翻译运行时间状态具有比响应于开始本地翻译线程或本地分析线程而从所述翻译核心状态转变到所述抢先翻译运行时间状态更高的优先级。
示例38包括示例32-37中的任何一个所述的主题,并且还包括响应于在处于翻译运行时间状态中的同时检测到中断而终止本地分析线程。
示例39包括示例32-38中的任何一个所述的主题,并且还包括响应于翻译后的代码到翻译缓存中的安装的完成而从全局线程核心状态转变到原生状态。
示例40包括示例32-39中的任何一个所述的主题,并且还包括响应于完成翻译后的代码的本地安装而从翻译核心状态转变到原生状态。
示例41包括一种计算装置,其包括:处理器;以及具有存储在其中的多个指令的存储器,所述多个指令在由所述处理器执行时使所述计算装置执行示例21-40中的任何一个所述的方法。
示例42包括一个或多个机器可读存储介质,包括存储在其上的多个指令,所述多个指令响应于被执行而导致计算装置执行示例21-40中的任何一个所述的方法。
示例43包括一种计算装置,其包括用于执行示例21-40中的任何一个所述的方法的装置。
Claims (25)
1.一种用于多核二进制翻译的计算装置,所述计算装置包括:
全局翻译缓存;
包括多个处理器内核的多核处理器,所述多核处理器用以执行全局线程和本地二进制翻译线程,所述全局线程用以将二进制翻译安装在所述全局翻译缓存中;以及
包括二进制翻译线程调度器的二进制翻译模块,用以:
在所述多个处理器内核中的处理器内核的非抢先模式中并且响应于进入所述二进制翻译调度器,确定所述全局线程是否挂起;
响应于确定所述全局线程被挂起,将所述全局线程迁移到所述处理器内核并且再继续所述全局线程;
在所述非抢先模式中并且响应于确定所述全局线程未被挂起,确定全局翻译缓存操作是否是待决的;
响应于确定所述全局翻译缓存操作是待决的,激活所述处理器内核上的所述全局线程;以及
在所述处理器内核上的抢先模式中并且响应于确定所述全局翻译缓存操作不是待决的,开始所述本地二进制翻译线程以生成待决全局翻译缓存操作;
其中,所述处理器用以在所述多个处理器内核中的处理器内核上,响应于识别原生代码热点的热点事件而进入所述二进制翻译调度器。
2.根据权利要求1所述的计算装置,其中:
所述本地二进制翻译线程包括翻译线程;
所述二进制翻译线程调度器还用以:
在所述二进制翻译调度器中的所述非抢先模式中,确定在所述全局翻译缓存中是否存在用于所述热点的二进制翻译;以及
在所述处理器内核上的所述抢先模式中并且响应于确定不存在用于所述热点的所述二进制翻译,开始所述翻译线程以:
(i)生成用于所述热点的所述二进制翻译以及(ii)在完成时使所述二进制翻译排队以用于安装,其中使所述二进制翻译排队以用于安装包括生成所述待决全局翻译缓存操作;以及
其中,所述全局线程还用以:
在所述非抢先模式中,确定所述二进制翻译是否已经排队以用于安装;以及
在所述抢先模式中,响应于确定所述二进制翻译已经排队以用于安装而将所述二进制翻译安装到所述全局翻译缓存中。
3.根据权利要求2所述的计算装置,其中,确定在所述全局翻译缓存中是否存在用于所述热点的所述二进制翻译包括在所述全局翻译缓存上采取非阻挡读取锁定。
4.根据权利要求2所述的计算装置,其中,将所述二进制翻译安装到所述全局翻译缓存中包括在所述全局翻译缓存上采取非阻挡写入锁定。
5.根据权利要求2所述的计算装置,其中:
所述全局线程还用以:
在所述抢先模式中,在确定所述二进制翻译是否已经排队以用于安装之前确定全局翻译缓存删除事件是否是待决的;以及
在所述非抢先模式中,响应于确定所述全局翻译缓存删除事件是待决的而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载;以及
所述二进制翻译线程调度器还用以:
在所述非抢先模式中,在确定所述全局线程是否被挂起之前确定本地卸载对于所述处理器内核是否是待决的;以及
在所述非抢先模式中,响应于确定所述本地卸载是待决的而执行所述待决的本地卸载。
6.根据权利要求5所述的计算装置,其中,响应于确定所述全局翻译缓存删除事件是待决的而调度用于每个受影响的处理器内核的本地卸载包括在所述全局翻译缓存上采取非阻挡写入锁定。
7.根据权利要求5所述的计算装置,其中,所述全局线程还用以:
在所述抢先模式中执行无用单元收集以恢复全局翻译缓存存储器;以及
在所述非抢先模式中,响应于所述无用单元收集而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载。
8.根据权利要求7所述的计算装置,其中,响应于所述无用单元收集而调度用于每个受影响的处理器内核的本地卸载包括在所述全局翻译缓存上采取非阻挡写入锁定。
9.根据权利要求2所述的计算装置,其中,所述二进制翻译线程调度器还用以:
在所述非抢先模式中并且在确定是否存在用于所述热点的所述二进制翻译之前,确定所述翻译线程是否被挂起;
在所述抢先模式中,响应于确定所述翻译线程被挂起而再继续所述翻译线程;
在所述非抢先模式中,响应于确定所述翻译线程未被挂起而确定所述热点是否已经被分析;以及
在所述抢先模式中,响应于确定所述热点还未被分析而开始热点分析线程以识别用于所述热点的原生代码位置。
10.根据权利要求2所述的计算装置,其中,所述二进制翻译线程调度器还用以:在所述非抢先模式中,响应于确定存在用于所述热点的所述二进制翻译而将来自所述全局翻译缓存的所述二进制翻译在本地安装在所述处理器内核上。
11.根据权利要求10所述的计算装置,其中,在本地安装在所述处理器内核上还包括在所述全局翻译缓存上采取非阻挡读取锁定。
12.一种用于部分二进制翻译的计算装置,所述计算装置包括:
全局翻译缓存;以及
包括多个处理器内核的多核处理器,所述多核处理器用以:
在所述多核处理器的处理器内核的原生状态中执行原生代码;
响应于检测到由所述多核处理器的分析器生成的热点事件,从所述原生状态转变到所述处理器内核的非抢先翻译核心状态;
响应于开始本地翻译线程或本地分析线程,从所述翻译核心状态转变到所述处理器内核的抢先翻译运行时间状态,以生成用于安装的翻译后的代码;
响应于开始全局线程,从所述翻译核心状态转变到所述处理器内核的抢先全局线程运行时间状态,以将所生成的翻译后的代码安装在所述全局翻译缓存中;以及
响应于将数据写入所述全局翻译缓存中,从所述全局线程运行时间状态转变到所述处理器内核的非抢先全局线程核心状态。
13.根据权利要求12所述的计算装置,其中,所述多核处理器还用以:
响应于在处于所述全局线程运行时间状态中的同时检测到中断,使所述全局线程挂起;以及
响应于所述全局线程的再继续,从所述翻译核心状态转变到所述全局线程运行时间状态,其中从所述翻译核心状态转变到所述全局线程运行时间状态具有比从所述翻译核心状态转变到所述抢先翻译运行时间状态更高的优先级。
14.根据权利要求13所述的计算装置,其中,从所述翻译核心状态转变到所述全局线程运行时间状态包括将所述全局线程迁移到所述处理器内核。
15.根据权利要求12所述的计算装置,其中,所述多核处理器还用以:
响应于在处于所述翻译运行时间状态中的同时检测到中断,使所述本地翻译线程挂起;
响应于在处于所述翻译运行时间状态中的同时检测到中断,终止所述本地分析线程;以及
响应于再继续所述本地翻译线程,从所述翻译核心状态转变到所述翻译运行时间状态,其中响应于再继续所述本地翻译线程而从所述翻译核心状态转变到所述翻译运行时间状态具有比响应于开始所述本地翻译线程或所述本地分析线程而从所述翻译核心状态转变到所述抢先翻译运行时间状态更高的优先级。
16.一种用于多核二进制翻译的方法,所述方法包括:
响应于识别原生代码热点的热点事件,在多核处理器的处理器内核上进入二进制翻译调度器;
响应于进入所述二进制翻译调度器,在非抢先模式中确定全局线程是否被挂起;
响应于确定所述全局线程被挂起,将所述全局线程迁移到所述处理器内核并且再继续所述全局线程;
在所述非抢先模式中并且响应于确定所述全局线程未被挂起,确定全局翻译缓存操作是否是待决的;
响应于确定所述全局翻译缓存操作是待决的,激活所述处理器内核上的所述全局线程;以及
在所述处理器内核上的抢先模式中并且响应于确定所述全局翻译缓存操作不是待决的,开始本地二进制翻译线程以生成待决全局翻译缓存操作。
17.根据权利要求16所述的方法,其中:
开始所述本地二进制翻译线程包括:
在所述二进制翻译调度器中的所述非抢先模式中,确定在全局翻译缓存中是否存在用于所述热点的二进制翻译;以及
在所述处理器内核上的抢先模式中并且响应于确定不存在用于所述热点的所述二进制翻译,开始翻译线程以:(i)生成用于所述热点的所述二进制翻译以及(ii)在完成时使所述二进制翻译排队以用于安装,其中使所述二进制翻译排队以用于安装包括生成所述待决全局翻译缓存操作;
所述方法还包括:
在所述非抢先模式中并且在所述全局线程中,确定所述二进制翻译是否已经排队以用于安装;以及
在所述抢先模式中并且在所述全局线程中,响应于确定所述二进制翻译已经排队以用于安装而将所述二进制翻译安装到所述全局翻译缓存中。
18.根据权利要求17所述的方法,还包括:
在所述全局线程中的所述抢先模式中,在确定所述二进制翻译已经排队以用于安装之前确定全局翻译缓存删除事件是否是待决的;
在所述全局线程中的所述非抢先模式中,响应于确定所述全局翻译缓存删除事件是待决的而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载;
在所述二进制翻译调度器中的所述非抢先模式中,在确定所述全局线程是否被挂起之前确定本地卸载对于所述处理器内核是否是待决的;以及
在所述二进制翻译调度器中的所述非抢先模式中,响应于确定所述本地卸载是待决的而执行所述待决的本地卸载。
19.根据权利要求18所述的方法,其中,将所述二进制翻译安装到所述全局翻译缓存中包括:
在所述全局线程中的所述抢先模式中,执行无用单元收集以恢复全局翻译缓存存储器;以及
在所述全局线程中的所述非抢先模式中,响应于执行所述无用单元收集而调度用于所述多核处理器中的每个受影响的处理器内核的本地卸载。
20.根据权利要求17所述的方法,其中,开始所述本地翻译线程还包括:
在所述二进制翻译调度器中的所述非抢先模式中并且在确定是否存在用于所述热点的所述二进制翻译之前,确定所述翻译线程是否被挂起;
在所述处理器内核上的所述抢先模式中,响应于确定所述翻译线程被挂起而再继续所述翻译线程;
在所述二进制翻译调度器中的所述非抢先模式中,响应于确定所述翻译线程未被挂起而确定所述热点是否已经被分析;以及
在所述处理器内核上的所述抢先模式中,响应于确定所述热点还未被分析而开始热点分析线程以识别用于所述热点的原生代码位置。
21.根据权利要求17所述的方法,还包括在所述二进制翻译调度器中的所述非抢先模式中,响应于确定存在用于所述热点的所述二进制翻译而将来自所述全局翻译缓存的所述二进制翻译在本地安装在所述处理器内核上。
22.一种用于多核处理器上的部分二进制翻译的方法,所述方法包括:
在所述多核处理器中的处理器内核的原生状态中执行原生代码;
响应于检测到由所述多核处理器的分析器生成的热点事件,从所述原生状态转变到所述处理器内核的非抢先翻译核心状态;
响应于开始本地翻译线程或本地分析线程,从所述翻译核心状态转变到所述处理器内核的抢先翻译运行时间状态,以生成用于安装的翻译后的代码;
响应于开始全局线程,从所述翻译核心状态转变到所述处理器内核的抢先全局线程运行时间状态,以将所生成的翻译后的代码安装在全局翻译缓存中;以及
响应于将数据写入所述全局翻译缓存中,从所述全局线程运行时间状态转变到所述处理器内核的非抢先全局线程核心状态。
23.根据权利要求22所述的方法,还包括:
响应于在处于所述全局线程运行时间状态中的同时检测到中断,使所述全局线程挂起;以及
响应于再继续所述全局线程,从所述翻译核心状态转变到所述全局线程运行时间状态,其中(i)从所述翻译核心状态转变到所述全局线程运行时间状态具有比从所述翻译核心状态转变到所述抢先翻译运行时间状态更高的优先级以及(ii)从所述翻译核心状态转变到所述全局线程运行时间状态包括将所述全局线程迁移到所述处理器内核。
24.一种计算装置,包括:
处理器;以及
具有存储在其中的多个指令的存储器,所述多个指令在由所述处理器执行时使所述计算装置执行权利要求16-23中的任一项所述的方法。
25.一个或多个机器可读存储介质,包括存储在其上的多个指令,所述多个指令响应于被执行而导致计算装置执行权利要求16-23中的任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2013/048563 WO2014209361A1 (en) | 2013-06-28 | 2013-06-28 | Binary translation for multi-processor and multi-core platforms |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106030515A true CN106030515A (zh) | 2016-10-12 |
CN106030515B CN106030515B (zh) | 2018-11-13 |
Family
ID=52142484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380076992.XA Active CN106030515B (zh) | 2013-06-28 | 2013-06-28 | 用于多处理器和多核平台的二进制翻译 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9990233B2 (zh) |
EP (1) | EP3014423B1 (zh) |
CN (1) | CN106030515B (zh) |
WO (1) | WO2014209361A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9524178B2 (en) * | 2013-12-30 | 2016-12-20 | Unisys Corporation | Defining an instruction path to be compiled by a just-in-time (JIT) compiler |
US10621143B2 (en) * | 2015-02-06 | 2020-04-14 | Ashish Govind Khurange | Methods and systems of a dedupe file-system garbage collection |
US20160283272A1 (en) * | 2015-03-25 | 2016-09-29 | Intel Corporation | Shared resource access control method and apparatus |
US10713146B2 (en) * | 2015-06-26 | 2020-07-14 | AVAST Software s.r.o. | Dynamic binary translation and instrumentation with postponed attachment to running native threads |
CN105511942B (zh) * | 2015-12-02 | 2019-02-19 | 华为技术有限公司 | 语言虚拟机中热点中间代码的识别方法以及装置 |
FR3053140B1 (fr) * | 2016-06-27 | 2019-11-22 | Thales | Architecture de calcul notamment pour un systeme embarque aeronautique |
US10789056B2 (en) * | 2016-07-06 | 2020-09-29 | Intel Corporation | Technologies for scalable translation caching for binary translation systems |
US10503626B2 (en) * | 2018-01-29 | 2019-12-10 | Oracle International Corporation | Hybrid instrumentation framework for multicore low power processors |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1570870A (zh) * | 2003-03-13 | 2005-01-26 | 诺斯罗普-格鲁曼公司 | 终极管道和最优重排技术 |
US20050050389A1 (en) * | 2003-08-25 | 2005-03-03 | Chaurasia Rajesh Kumar | Method of and apparatus for cross-platform core dumping during dynamic binary translation |
US20070067573A1 (en) * | 2005-09-20 | 2007-03-22 | Bruening Derek L | Thread-shared software code caches |
US20090222654A1 (en) * | 2008-02-29 | 2009-09-03 | Herbert Hum | Distribution of tasks among asymmetric processing elements |
CN102087609A (zh) * | 2011-02-23 | 2011-06-08 | 中国人民解放军国防科学技术大学 | 多处理器平台下的动态二进制翻译方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8087018B2 (en) * | 2006-03-31 | 2011-12-27 | Intel Corporation | Managing and supporting multithreaded resources for native code in a heterogeneous managed runtime environment |
US8812873B2 (en) * | 2012-09-26 | 2014-08-19 | Intel Corporation | Secure execution of a computer program using binary translators |
-
2013
- 2013-06-28 WO PCT/US2013/048563 patent/WO2014209361A1/en active Application Filing
- 2013-06-28 US US14/129,420 patent/US9990233B2/en not_active Expired - Fee Related
- 2013-06-28 CN CN201380076992.XA patent/CN106030515B/zh active Active
- 2013-06-28 EP EP13887955.6A patent/EP3014423B1/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1570870A (zh) * | 2003-03-13 | 2005-01-26 | 诺斯罗普-格鲁曼公司 | 终极管道和最优重排技术 |
US20050050389A1 (en) * | 2003-08-25 | 2005-03-03 | Chaurasia Rajesh Kumar | Method of and apparatus for cross-platform core dumping during dynamic binary translation |
US20070067573A1 (en) * | 2005-09-20 | 2007-03-22 | Bruening Derek L | Thread-shared software code caches |
US20090222654A1 (en) * | 2008-02-29 | 2009-09-03 | Herbert Hum | Distribution of tasks among asymmetric processing elements |
CN102087609A (zh) * | 2011-02-23 | 2011-06-08 | 中国人民解放军国防科学技术大学 | 多处理器平台下的动态二进制翻译方法 |
Also Published As
Publication number | Publication date |
---|---|
US9990233B2 (en) | 2018-06-05 |
WO2014209361A1 (en) | 2014-12-31 |
US20160188372A1 (en) | 2016-06-30 |
EP3014423A4 (en) | 2017-03-15 |
CN106030515B (zh) | 2018-11-13 |
EP3014423A1 (en) | 2016-05-04 |
EP3014423B1 (en) | 2018-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106030515A (zh) | 用于多处理器和多核平台的二进制翻译 | |
US8386822B2 (en) | Wake-and-go mechanism with data monitoring | |
US8341635B2 (en) | Hardware wake-and-go mechanism with look-ahead polling | |
US8171476B2 (en) | Wake-and-go mechanism with prioritization of threads | |
US8788795B2 (en) | Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors | |
US8250396B2 (en) | Hardware wake-and-go mechanism for a data processing system | |
US8230201B2 (en) | Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system | |
US8312458B2 (en) | Central repository for wake-and-go mechanism | |
US8516484B2 (en) | Wake-and-go mechanism for a data processing system | |
US8612977B2 (en) | Wake-and-go mechanism with software save of thread state | |
US8640142B2 (en) | Wake-and-go mechanism with dynamic allocation in hardware private array | |
CN101059783B (zh) | 事务型存储器的虚拟化 | |
US8732683B2 (en) | Compiler providing idiom to idiom accelerator | |
US8452947B2 (en) | Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms | |
US8225120B2 (en) | Wake-and-go mechanism with data exclusivity | |
US8880853B2 (en) | CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock | |
US8145849B2 (en) | Wake-and-go mechanism with system bus response | |
US8886919B2 (en) | Remote update programming idiom accelerator with allocated processor resources | |
US20100268791A1 (en) | Programming Idiom Accelerator for Remote Update | |
US20100268790A1 (en) | Complex Remote Update Programming Idiom Accelerator | |
US20100293341A1 (en) | Wake-and-Go Mechanism with Exclusive System Bus Response | |
KR20200014378A (ko) | 직무 관리 | |
US20150254113A1 (en) | Lock Spin Wait Operation for Multi-Threaded Applications in a Multi-Core Computing Environment | |
US8725992B2 (en) | Programming language exposing idiom calls to a programming idiom accelerator | |
CN115904677A (zh) | 内存分配方法、装置、计算机可读存储介质和程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |