KR101462347B1 - 가상 머신 바이너리 변환 방법 - Google Patents

가상 머신 바이너리 변환 방법 Download PDF

Info

Publication number
KR101462347B1
KR101462347B1 KR20130079685A KR20130079685A KR101462347B1 KR 101462347 B1 KR101462347 B1 KR 101462347B1 KR 20130079685 A KR20130079685 A KR 20130079685A KR 20130079685 A KR20130079685 A KR 20130079685A KR 101462347 B1 KR101462347 B1 KR 101462347B1
Authority
KR
South Korea
Prior art keywords
register
order
register allocation
conversion
translation
Prior art date
Application number
KR20130079685A
Other languages
English (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
Application filed by 충북대학교 산학협력단 filed Critical 충북대학교 산학협력단
Priority to KR20130079685A priority Critical patent/KR101462347B1/ko
Application granted granted Critical
Publication of KR101462347B1 publication Critical patent/KR101462347B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources

Abstract

본 발명은 가상 머신 바이너리 변환 방법에 관한 것으로서,본 발명은 각 변환 블록(Translation block)이 상호 연결(block chaining)되어 있는 가상 머신(Virtual Machine) 바이너리 변환(Binary translation) 방법에 있어서, 상기 각 변환 블록에서의 임시 레지스터(temporary register) 또는 원본 레지스터(source register)로부터 타겟 레지스터(target register)로 변환하는 순서를 배정함에 있어서 레지스터의 사용순서인 레지스터 할당 순서를 정적(statically) 또는 동적(dynamically)으로 설정하되, 각 변환블럭에 적용되는 레지스터 할당 순서를 설정하되, 각 변환블록에 적용되는 레지스터 할당 순서가 서로 동일하지 않도록 설정하는 단계 및 상기 각 변환 블록은 설정된 레지스터 할당 순서들 중에서 하나의 레지스터 할당 순서에 의해 레지스터를 할당하여 사용하되, 동일한 레지스터 할당 순서를 다른 변환 블록과 중복하여 사용하지 않도록 레지스터 할당 순서를 정적 또는 동적으로 변경하는 단계를 포함한다. 본 발명에 의하면 가상머신 바이너리 변환에서 교대 레지스터 할당 기법을 제안함으로써, 바이너리 변환의 성능을 향상시킬 수 있는 효과가 있다.

Description

가상 머신 바이너리 변환 방법 {Method for binary translation on virtual machine}
본 발명은 가상 머신 바이너리 변환 방법에 관한 것으로서, 더욱 상세하게는 가상 머신(Virtual Machine) 바이너리 변환(Binary Translation) 분야에서 시스템 성능 향상 방법에 관한 것이다.
일반적으로 현대 마이크로프로세서는 파이프라이닝(pipelining) 효과를 극대화하기 위해서, 명령어들 간의 상호 종속성을 최소화하는 방법을 사용한다. 명령어 종속성(instruction dependency)에는 여러 종류가 있는데 실제 종속성(true dependency)의 경우는 인위적으로 바이너리 변환과정에서 제거하기 어렵다.
반면, 거짓 종속성(false dependency)으로 분류되는 명령어 종속성은 제거할 수 있다. 그런데, 기존의 가상머신 바이너리 변환과정에서 무심코 활용하는 레지스터 사용순서가 본의 아니게 거짓 종속성을 유발한다.
종래 x86 기반 스마트 디바이스에서 안드로이드 애플리케이션 실행의 문제점을 살펴보면 다음과 같다.
안드로이드 운영체제는 이미 x86으로 포팅되어 있기 때문에(http://www.android-x86.org/), x86 아키텍쳐에서 안드로이드 운영체제를 실행하는 것이 특별한 것은 아니다. 단, 기존에 앱스토어에 등록/배포되고 있는 애플리케이션을 x86 기반 안드로이드에서 실행하고자 하는 경우 호환성 문제가 발생한다.
일반적인 안드로이드 애플리케이션은 대부분의 자바 바이트코드(JAVA bytecode)로 컴파일(compile)되어 있으며, JAVA 기반의 Dalvik-VM에서 동작하므로, x86기반 안드로이드 운영체제에서도 문제없이 수행 가능하다.
그러나, 현재 앱스토어에 등록되어 있는 일부 애플리케이션들은 JAVA 바이트코드(bytecode) 외에 추가적으로 NDK를 통하여 컴파일된 코드를 포함하고 있는데, 이 부분이 ARM 아키텍쳐(architecture)를 타켓(target)으로 설정한 바이너리(binary)인 경우 x86 기반 안드로이드 운영체제에서 수행하는데 어려움이 있다.
인텔(Intel)은 최근 자사의 모바일용 x86 아키텍쳐(Medfield architecture)를 발표하면서, ARM 기반 모바일 프로세서 시장에 진입을 시도하고 있다. 실제로 인텔은 x86 안드로이드 운영체제를 탑재한 스마트폰 이미 출시한 바 있으며, ARM 바이너리(binary)에 대한 호환성을 위하여 바이너리 변환(binary translation) 기술을 소프트웨어적으로 탑재하고 있다. 애플(Apple)이 파워PC(PowerPC) 아키텍쳐(architecture)로부터 x86 호환 아키텍쳐(architecture)로 넘어왔듯, 인텔(Intel) 역시 ATOM 아키텍쳐(architecture)를 ARM과 호환 가능하도록 하는 방향을 추진하는 것이다.
인텔은 Medfield architecture에서 바이너리 변환 소프트웨어를 통해 ARM 바이너리(binary)를 직접 실행할 수 있는 기능을 제공한다. Medfield 스마트폰은 안드로이드 운영체제를 기반으로 동작하며, 안드로이드 애플리케이션은 대부분 플랫폼 독립적인 Java 바이트 코드로 되어 있으므로 ARM과 x86프로세서에서 모두 실행 가능하다. 그러나, NDK를 활용하는 일부 애플리케이션은 native ARM 코드를 사용하기 때문에 ARM 플랫폼에서만 실행된다. 이에 따라, 인텔은 바이너리 변환기(binary translator)를 통하여 x86 기반 폰에서 대부분의 안드로이드 애플리케이션이 실행 가능하도록 하는 방안을 제시하였다. 실제로 LG전자는 인텔의 Medfield 아키텍처에 기반한 최초의 인텔기반 안드로이드 폰을 공개한 바 있다.
과거 ARM 아키텍쳐(architecture)를 타겟(target)으로 컴파일(compile)된 바이너리(binary)를 실행할 수 있도록 하는 에뮬레이션(emulation) 환경을 개발하려는 노력이 있다.
동적 변환(dynamic translation, emulation)과 정적 변환(static translation) 방법이 그것인데, 동적 변환 방법은 실행시간에 on-the-fly로 ARM 바이너리(binary)를 명령어를 x86 명령어 세트(instruction set)로translation 해준다. 이러한 과정에서 시스템 호출(system call) 역시 x86 호스트(host)의 시스템 호출(system call)로 변환된다.
동적변환(dynamic translation)과 에뮬레이션(emulation)에 대해 설명하면 다음과 같다.
Emulation(dynamic translation)은 사실상 하드웨어를 소프트웨어적으로 구현하여 실제의 동작과 동일하거나 유사한 결과를 얻도록 하는 방법이다.
에뮬레이터(Emulator)는 CPU, system chip(DMA, timer, interrupt controller, bus controller 등) 다양한 하드웨어 컴포넌트(hardware component), 서브시스템(subsystem)을 포함한다. 이러한 소프트웨어 컴포넌트(component)의 조합은 종종 가상 머신(virtual machine)으로 알려져 있다.
가상 머신(Virtual machine)은 에뮬레이터의 가장 대표적인 방법이고 현재 널리 사용되고 있다. 호스트 플랫폼(Host platform, hardware machine)에 가상화 소프트웨어(virtualization software)를 추가함으로써, 가상머신상에서 응용프로그램(application)을 실행할 수 있도록 하는 것이다. 이러한 가상머신은 Process Virtual Machine과 (whole) System Virtual Machine의 두 가지가 있다.
① 프로세스 VM(Process VM)
게스트 프로세스(guest process)가 호스트 프로세스(host process)와 서로 혼재하는 구조로서, HW 플랫폼으로부터 다른 ISA(instruction set architecture, 즉 HW 플랫폼과 다른 아키텍쳐를 target으로 컴파일된)를 갖는 애플리케이션을 실행할 수 있다. 런타임 시스템(Runtime system) 수준에서 ABI 레벨(level)에서 커플링(coupling)한다. 이러한 방법은 3D 가속을 위한 API 수준에서 구현하는데 유용하며, 적은 메모리를 소모하고, 메모리 접근 시 MMU 변환을 수행할 필요가 없으므로 성능상 유리하다. 또한, Host OS의 기능을 활용할 수 있어 유리하다.
② 시스템 VM (whole System VM)
시스템 VM은 전체 시스템 환경(system environment)을 제공하고, ISA 수준에서(즉, 애플리케이션은 물론 OS를 포함한 전체 소프트웨어) 가상 머신을 생성할 수 있다. 가장 대표적인 것으로 VMware, VirtualBox 등이 이에 해당한다. 구조적으로 단순하여 구현에 용이하고, 상용 또는 공개소스 소프트웨어로 널리 사용되고 있으며, 대규모 클러스터 또는 클라우드 컴퓨팅 환경에서 서버 자원활용률을 증가시키는 콘솔리데이션(consolidation)을 실현할 수 있다.
QEMU 가상머신에서의 바이너리 변환 기법은 다음과 같다.
QEMU 바이너리 변환은 변환 블록(Translation block, TB)이라 하는 변환 기본 블록(basic block)을 사용한다. 기본블록이란, 분기명령(branch instruction)에 의해 시작/종료되는 명령어 블록을 나타낸다.
QEMU 바이너리 변환은 다음과 같은 절차에 의해 동작한다. 게스트 명령어(Guest Instructions)을 호스트명령어(Host Instruction)로 변환하는 것이 바이너리 변환이다. 그런데, QEMU의 경우 매우 다양한 프로세서 아키텍쳐를 지원하기 때문에, 모든 조합을 만족하기 위해서 게스트 명령어(guest instruction)를 중간코드(intermediate instruction)로 변환 후 다시 타겟 명령어(target instruction)으로 변환하는 방법을 사용한다. 예를들어, QEMU는 Intel X86, ARM, MIPS, PowerPC, Sparc32, Sparc64, Xtensa, Alpha, CRIS, M68k, SH4를 지원하므로, x86 to ARM 바이너리 변환, PowerPC to Sparc32 바이너리 변환, Xtensa to Alpha 바이너리 변환, SH4 to Intel X64 바이너리 변환, ARM to x86 바이너리 변환 등이 가능하다.
따라서, 이와 같은 모든 경우(case)에 대해서, 모든 바이너리 변환 알고리즘을 마련할 수는 없기 때문에 QEMU는 중간표현(intermediated representation)으로 변환하는 방식을 도입하였다. 중간언어 표현을 사용하는 방법은 다음과 같은 장점이 있다. 즉, Intel X86, ARM, MIPS, PowerPC, Sparc32, Sparc64, Xtensa, Alpha, CRIS, M68k, SH4로부터 중간표현으로 변환하는 방법에 대해서만 구현하면 된다. 그리고, 다음은 중간표현으로부터 Intel X86, ARM, MIPS, PowerPC, Sparc32, Sparc64, Xtensa, Alpha, CRIS, M68k, SH4로 다시 변환하는 방법에 대해서만 구현하면 되는 것이다.
정리하면, 현대 스마트폰에서 안드로이드폰, 아이폰, 윈도우폰 애플리케이션은 ARM 명령어 세트(instruction set)에 기반한 프로세서에서 동작하는 경우가 대부분이다. ARM 아키텍쳐는 물론 저전력성, 고성능, 고집적 패키징 등 여러가지 면에서 장점을 갖고 있어 현대 임베디드 시스템, SoC 분야에서 매우 널리 활용되고 있다. 현재 ARM 기반 프로세서가 대부분의 스마트폰 시장을 점유하고 있는데 반하여, 향후 x86 기반 프로세서가 탑재된 저렴한 스마트폰이 출시될 수 있는 가능성이 있다. 이러한 환경에서는 안드로이드 운영체제가 ARM 계열이 아닌 x86 계열 모바일 프로세서에서 운용하는 경우를 가정해야 하는데, 이때, 애플리케이션 호환성 및 성능 문제가 발생하므로 이를 해결하기 위한 바이너리 변환 기법이 제공되어야 할 필요성이 있다.
ARM 명령어를 x86에서 명령어로 바이너리 변환하는 과정에 있어, 연산자(opcode)를 변환하는 것은 기계적으로 매핑(mapping)가능하므로, 그 변환과정 자체에서는 큰 어려움이 없다. 예를들어 ARM 아키텍쳐에서 덧셈(add) 명령은 x86 아키텍쳐에서 그에 상응하는 덧셈(add) 명령이 존재하므로 1:1로 대체 가능하다.
그러나, 하나의 컴퓨터 명령어는 연산자(opcode) 뿐만 아니라 오퍼런드(operand) 와 함께 구성되므로, 오퍼런드(operand)에 대한 레지스터 할당값을 조정하는 것이 필요하다.
그런데, x86 기반 시스템은 RISC 아키텍쳐보다 그 갯수가 적기 때문에, x86 시스템의 레지스터(register) 자원을 각 ARM명령어에 대해서 할당하는 데 있어서는 그 제약이 심하다.
일반적으로, ARM은 하바드 아키텍쳐(Havard architecture) 기반의 머신이므로 메모리에 접근하는 명령어가 2개(load/store)로 한정된다. ARM은 많은 수의 레지스터를 제공함으로써 대부분의 연산이 이러한 레지스터 상에서 수행되는 특성이 있기 때문이다.
반면, 인텔(Intel) x86 아키텍쳐는 다수의 명령어가 메모리에 존재하는 데이터를 직접 접근할 수 있는 특성이 있다. 따라서, 레지스터의 데이터와 메모리상의 데이터를 직접 더하거나 빼는 등의 연산을 할 수 있는 특징이 있다.
따라서, 인텔(Intel) 아키텍쳐는 ARM 아키텍쳐보다 레지스터의 개수가 적은 특성이 있으므로, ARM 명령어에서 사용된 레지스터 할당 기법을 인텔(Intel) 명령어에서 그대로 적용할 수 없다. 따라서, 레지스터 할당 기법에 대한 고려가 필요한 이유가 바로 이 때문이다.
도 1은 바이너리 변환(binary translation) 과정을 설명하기 위한 도면이다.
도 1은 ARM to x86의 사례와 같이 source 측 레지스터 개수가 target 측 레지스터 개수보다 많은경우의 바이너리 변환과정에서 레지스터 값을 처리하는 일반적인 방법을 보여준다. 즉, 바이너리 변환에서 게스트 명령(guest instruction)이 타겟 코드(target code)로 변환되는 과정이다. 게스트 레지스터는 r0레지스터가 사용되었고, 이를 중간표현으로 변환한 결과, r13, r0, r14, pc 의 레지스터가 사용된다. 이는 다시 타겟 코드에서 0x34(%ebp), 0x0(%ebp), 0x38(%ebp), 0x3c(%ebp)의 형태로 표현된다.
도 2는 바이너리 변환에서 소스(source) 측 레지스터를 타켓 호스트(target host)에서 핸들링하는 방법을 설명하기 위한 도면이다.
도 2에서는 타겟(target) 측 레지스터 중 특정한 레지스터를 활용하여 소스 레지스터 블록(source register block) 전체의 시작주소를 가리키도록 하는 방법이 도시되어 있다. 이러한 방법에 의하여, 소스(source) 측 레지스터의 개수가 타겟(target) 측 레지스터의 개수보다 월등히 많다 하더라도, 메모리의 용량이 허용하는 한, R1 레지스터를 시작으로 하는 상대변위를 표시함으로써 손쉽게 바이너리 변환을 수행할 수 있는 장점이 있다.
대한민국 공개특허 10-2006-0010594
본 발명은 상기와 같은 문제점을 해결하기 위하여 안출된 것으로서, x86 기반 모바일 가상 머신에서 바이너리 변환을 통해 애플리케이션 실행할 때 성능을 향상하기 위한 바이너리 변환 방법을 제안하는데 그 목적이 있다.
x86 안드로이드 계열 스마트 기기에서는 바이트코드(bytecode)와 ARM 바이너리(binary)를 모두 포함하는 애플리케이션을 실행할 경우, 바이너리 변환 기능이 반드시 필요한데, 본 발명에서는 이러한 경우를 대상으로 하여 x86 기반 모바일 가상 머신에서의 성능향상을 위한 바이너리 변환 방법을 제안하는 것이다.
QEMU 바이너리 변환에서 각 명령어(guest instruction)를 중간코드를 거쳐 변환함에 따라 이와 같은 거짓 종속성이 빈번하게 발생하는 데, 본 발명에서는 이를 해결하기 위하여 교대 레지스터할당(alternative register allocation) 기법을 제안한다.
본 발명은 파이프라인 실행구조에서 바이너리 변환 후 명령어 간 데이터 종속성으로 인한 성능저하를 방지하기 위하여 교대 레지스터 할당기법(alternative register allocation order)을 제안한다.
본 발명의 목적은 이상에서 언급한 목적으로 제한되지 않으며, 언급되지 않은 또 다른 목적들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
이와 같은 목적을 달성하기 위한 본 발명은 각 변환 블록(Translation block)이 상호 연결(block chaining)되어 있는 가상 머신(Virtual Machine) 바이너리 변환(Binary translation) 방법에 있어서, 상기 각 변환 블록에서의 임시 레지스터(temporary register) 또는 원본 레지스터(source register)로부터 타겟 레지스터(target register)로 변환하는 순서를 배정함에 있어서 레지스터의 사용순서인 레지스터 할당 순서를 정적(statically) 또는 동적(dynamically)으로 설정하되, 각 변환블럭에 적용되는 레지스터 할당 순서가 설정하되, 각 변환블록에 적용되는 레지스터 할당 순서가 서로 동일하지 않도록 설정하는 단계 및 상기 각 변환 블록은 설정된 레지스터 할당 순서들 중에서 하나의 레지스터 할당 순서에 의해 레지스터를 할당하여 사용하되, 동일한 레지스터 할당 순서를 다른 변환 블록과 중복하여 사용하지 않도록 레지스터 할당 순서를 정적 또는 동적으로 변경하는 단계를 포함한다.
상기 레지스터 할당 순서를 미리 설정하는 단계에서, 하나 또는 여러 개의 레지스터 할당 순서를 미리 정해진 순서대로 각각 서로 다르게 설정할 수 있다.
상기 레지스터 할당 순서를 미리 설정하는 단계에서, 둘 이상의 레지스터 할당 순서를 동적으로 생성하거나 또는 랜덤(random)하게 생성하여 설정할 수 있다.
상기 레지스터를 할당하여 사용하는 단계에서, 각 변환블록은 상기 하나 또는 둘 이상의 레지스터 할당 순서로부터 순차적으로 레지스터 할당 순서를 적용하고, 해당 레지스터 할당 순서에 의해 레지스터를 할당하여 사용할 수 있다.
상기 레지스터를 할당하여 사용하는 단계에서, 두 개의 레지스터 할당 순서가 설정되어 있는 경우, 각 변환블록은 상기 두 개의 레지스터 할당 순서를 교대로 번갈아가며 적용하거나 또는 연속되지 않는 임의의 순서로 적용할 수 있다.
본 발명에 의하면 가상머신 바이너리 변환에서 교대 레지스터 할당 기법을 제안함으로써, 바이너리 변환의 성능을 향상시킬 수 있는 효과가 있다. 특히 x86 안드로이드 계열 스마트 기기에서 바이트코드(bytecode)와 ARM 바이너리(binary)를 모두 포함하는 애플리케이션을 실행할 경우와 같이, 바이너리 변환 기능이 필요한 경우에 유용할 것으로 기대된다.
도 1은 바이너리 변환(binary translation) 과정을 설명하기 위한 도면이다.
도 2는 바이너리 변환에서 소스(source) 측 레지스터를 타켓 호스트(target host)에서 핸들링하는 방법을 설명하기 위한 도면이다.
도 3은 실제 변환 블록(translation block)의 내용과 상호 연결(block chaining)을 설명하기 위한 예시도이다.
도 4는 본 발명의 일 실시예에 따른 교대 레지스터 할당을 위한 레지스터 사용 우선순위를 도시한 도면이다.
도 5는 본 발명의 일 실시예에 따른 가상 머신에서의 바이너리 변환 방법을 보여주는 흐름도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 갖고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 갖는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
또한, 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 본 발명을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
도 3은 실제 변환 블록(translation block)의 내용과 상호 연결(block chaining)을 설명하기 위한 예시도이다.
도 3을 참조하면, 각 변환블록(변환블록1~변환블록3)에서 레지스터의 사용순서가 동일하게 9번부터 시작되도록 되어 있다고 가정하자. 각 변환블록은 상호 연결(block chaining)되어 연속적으로 끊김없이 실행되어야 하는데, 매 변환블록의 시작부분에서 항상 동일한 레지스터를 사용하므로 불필요한 데이터 종속성이 발생한다.
따라서, 실제 종속성(true dependency)이 아님에도 불구하고, 발생하는 이러한 거짓 종속성(false dependency)을 방지하기 위해서, 본 발명에서는 교대 레지스터 할당(alternative register allocation)을 제안한다.
예를 들어, 인텔(Intel) x86 파이프라인 실행구조에서 ARM 바이너리를 변환 후 명령어 간 데이터 종속성으로 인한 성능저하를 방지하기 위하여, 본 발명에서는 다음과 같은 교대 레지스터 할당기법을 제안한다.
레지스터 할당기법에서 레지스터 할당 순서란 임시 레지스터(temporary register)로부터 타겟(target) 레지스터로 변환하는 순서를 배정함에 있어, 사전에 정해진 순서를 사용하는 것이다.
도 4는 본 발명의 일 실시예에 따른 교대 레지스터 할당을 위한 레지스터 사용 우선순위를 도시한 도면이다.
도 4를 참조하면, 본 발명에서 제안하는 교대 레지스터 할당(alternative register allocation order) 기법은 레지스터 사용 순서를 각 변환블록(translation block)에서 교대로 적용하는 것이다.
즉, 도 3의 변환블록1(Translation Block 1)에서는 도 4의 좌측에 있는 레지스터 할당 순서를 적용하고, 변환블록2(Translation Block 2)에서는 도 4의 우측에 있는 레지스터 할당 순서를 적용한다. 그리고, 변환블록3(Translation Block 3)에서는 도 4의 좌측에 있는 레지스터 할당 순서를 적용한다. 참고로, 레지스터의 사용순서를 단순히 무조건 적용하는 것이 아니라, 이러한 우선순위에 입각하여 각 레지스터의 라이브니스(liveness)를 확인함으로써, 실제로 프리(free) 레지스터에 대해서 적용하여 사용하는 것이다. 따라서, 사용중인 레지스터를 다른 용도로 중복 사용할 우려는 없다. 이렇게 함으로써, 각 변환 블록(Translation) Block 들 사이에 불필요한 거짓 종속성(false dependency)이 발생하는 것을 방지할 수 있다.
도 5는 본 발명의 일 실시예에 따른 가상 머신에서의 바이너리 변환 방법을 보여주는 흐름도이다.
도 5를 참조하면, 각 변환 블록(Translation block)이 상호 연결(block chaining)되어 있는 가상 머신(Virtual Machine) 바이너리 변환(Binary translation) 방법에 있어서, 각 변환 블록에서의 임시 레지스터(temporary register)에서 타겟 레지스터(target register)로 변환하는 순서를 배정함에 있어서 레지스터의 사용순서인 레지스터 할당 순서를 둘 이상 미리 설정하되, 각 레지스터 할당 순서가 다른 레지스터 할당 순서와 동일하지 않도록 설정한다(S510).
그리고, 각 변환 블록은 설정된 레지스터 할당 순서들 중에서 하나의 레지스터 할당 순서에 의해 레지스터를 할당하여 사용하되, 동일한 레지스터를 다른 변환 블록과 중복하여 사용하지 않도록 레지스터를 할당하여 사용한다(S520).
본 발명의 일 실시예에서 S510 단계에서, 둘 이상의 레지스터 할당 순서를 미리 정해진 순서로 각각 설정할 수 있다.
또는, 본 발명의 다른 실시예에서 S510 단계에서, 둘 이상의 레지스터 할당 순서를 동적으로 생성하여 설정할 수도 있다.
본 발명의 일 실시예에서 S520 단계에서, 각 변환블록은 둘 이상의 레지스터 할당 순서 중에서 순차적으로 레지스터 할당 순서를 적용하고, 해당 레지스터 할당 순서에 의해 레지스터를 할당하여 사용할 수 있다.
본 발명의 일 실시예에서 S520 단계에서, 두 개의 레지스터 할당 순서가 설정되어 있는 경우, 각 변환블록은 상기 두 개의 레지스터 할당 순서를 교대로 번갈아가며 적용할 수 있다.
본 발명에서는 이와 같은 교대 레지스터 할당(alternative register allocation) 기법을 QEMU에 적용하여 실행하고 성능을 측정하였다. 실험환경은 Unbuntu Linux 12 운영체제에서 Intel Core i5 메모리4G에서 QEMU 1.2.0를 사용하였다. 수행한 애플리케이션 workload는 ARM application 으로서, uptime, pwd, dirname, cp, echo, dmesg, touch, which, extdisk, grep, busybox, netstat, mount 의 13개 애플리케이션이다. 전체적으로 기존 방법(교대 레지스터 할당을 사용하지 않은 QEMU)에 비해 우수한 성능을 보였다. 특히, 본 발명은 현재 널리 활용되는 QEMU 바이너리 변환 가상머신을 활용하여 제안하는 알고리즘의 효과를 검증하였다.
과거 MPEG(Motion Picture Encoding Group)에서 이미지/동영상 압축을 구현할 때, 각 macro block의 ZIGZAG SCAN 특허(“Zigzag scan order for image/video encoder and decoder”, PCT/US2002/039264)에서는 scan 순서에 따라 이미지/동영상 성능이 좌우될 수 있음을 보인 바 있다. 그리고, 현재 ZIGZAG SCAN 방법은 대부분의 MPEG 인코더/디코더에서 매우 널리 사용되고 있다.
본 발명에서는 바이너리 변환 분야에서 앞서 언급한 바와 같이 거짓 종속성(false dependency) 해결을 통한 바이너리 변환성능을 향상시키기 위하여, 교대 레지스터 할당 기법(alternative register allocation order)를 제안하였고, 이는 성능향상을 위해 매우 효과적인 방법이며, 향후 널리 활용될 수 있을 것으로 기대된다.
이상 본 발명을 몇 가지 바람직한 실시예를 사용하여 설명하였으나, 이들 실시예는 예시적인 것이며 한정적인 것이 아니다. 본 발명이 속하는 기술분야에서 통상의 지식을 지닌 자라면 본 발명의 사상과 첨부된 특허청구범위에 제시된 권리범위에서 벗어나지 않으면서 다양한 변화와 수정을 가할 수 있음을 이해할 것이다.

Claims (5)

  1. 각 변환 블록(Translation block)이 상호 연결(block chaining)되어 있는 가상 머신(Virtual Machine) 바이너리 변환(Binary translation) 방법에 있어서,
    상기 각 변환 블록에서의 임시 레지스터(temporary register) 또는 원본 레지스터(source register)로부터 타겟 레지스터(target register)로 변환하는 순서를 배정함에 있어서 레지스터의 사용순서인 레지스터 할당 순서를 정적(statically) 또는 동적(dynamically)으로 설정하되, 각 변환블럭에 적용되는 레지스터 할당 순서를 설정하되, 각 변환블록에 적용되는 레지스터 할당 순서가 서로 동일하지 않도록 설정하는 단계; 및
    상기 각 변환 블록은 설정된 레지스터 할당 순서들 중에서 하나의 레지스터 할당 순서에 의해 레지스터를 할당하여 사용하되, 동일한 레지스터 할당 순서를 다른 변환 블록과 중복하여 사용하지 않도록 레지스터 할당 순서를 정적 또는 동적으로 변경하는 단계를 포함하는 가상 머신 바이너리 변환 방법.
  2. 청구항 1에 있어서,
    상기 레지스터 할당 순서를 미리 설정하는 단계에서,
    하나 또는 여러 개의 레지스터 할당 순서를 미리 정해진 순서대로 각각 서로 다르게 설정하는 것을 특징으로 하는 가상 머신 바이너리 변환 방법.
  3. 청구항 1에 있어서,
    상기 레지스터 할당 순서를 미리 설정하는 단계에서,
    하나 또는 둘 이상의 레지스터 할당 순서를 동적으로 생성하거나 또는 랜덤(random)하게 생성하여 설정하는 것을 특징으로 하는 가상 머신 바이너리 변환 방법.
  4. 청구항 1에 있어서,
    상기 레지스터를 할당하여 사용하는 단계에서,
    각 변환블록은 상기 하나 또는 둘 이상의 레지스터 할당 순서로부터 순차적으로 레지스터 할당 순서를 적용하고, 해당 레지스터 할당 순서에 의해 레지스터를 할당하여 사용하는 것을 특징으로 하는 가상 머신 바이너리 변환 방법.
  5. 청구항 1에 있어서,
    상기 레지스터를 할당하여 사용하는 단계에서,
    두 개의 레지스터 할당 순서가 설정되어 있는 경우, 각 변환블록은 상기 두 개의 레지스터 할당 순서를 교대로 번갈아가며 적용하거나 또는 연속되지 않는 임의의 순서로 적용하는 것을 특징으로 하는 가상 머신 바이너리 변환 방법.
KR20130079685A 2013-07-08 2013-07-08 가상 머신 바이너리 변환 방법 KR101462347B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR20130079685A KR101462347B1 (ko) 2013-07-08 2013-07-08 가상 머신 바이너리 변환 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR20130079685A KR101462347B1 (ko) 2013-07-08 2013-07-08 가상 머신 바이너리 변환 방법

Publications (1)

Publication Number Publication Date
KR101462347B1 true KR101462347B1 (ko) 2014-12-04

Family

ID=52676748

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20130079685A KR101462347B1 (ko) 2013-07-08 2013-07-08 가상 머신 바이너리 변환 방법

Country Status (1)

Country Link
KR (1) KR101462347B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004021336A (ja) * 2002-06-12 2004-01-22 Internatl Business Mach Corp <Ibm> コンパイラ、レジスタ割当装置、プログラム、記録媒体、コンパイル方法、及びレジスタ割当方法
JP2010225162A (ja) * 1998-10-10 2010-10-07 Internatl Business Mach Corp <Ibm> プログラムコード変換方法
KR20110080767A (ko) * 2010-01-07 2011-07-13 한국과학기술연구원 액티브엑스 컨트롤 변환 시스템 및 방법
US20130067199A1 (en) * 2011-04-07 2013-03-14 Via Technologies, Inc. Control register mapping in heterogeneous instruction set architecture processor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010225162A (ja) * 1998-10-10 2010-10-07 Internatl Business Mach Corp <Ibm> プログラムコード変換方法
JP2004021336A (ja) * 2002-06-12 2004-01-22 Internatl Business Mach Corp <Ibm> コンパイラ、レジスタ割当装置、プログラム、記録媒体、コンパイル方法、及びレジスタ割当方法
KR20110080767A (ko) * 2010-01-07 2011-07-13 한국과학기술연구원 액티브엑스 컨트롤 변환 시스템 및 방법
US20130067199A1 (en) * 2011-04-07 2013-03-14 Via Technologies, Inc. Control register mapping in heterogeneous instruction set architecture processor

Similar Documents

Publication Publication Date Title
JP6458959B2 (ja) 協調設計されたプロセッサ用動的言語アクセラレータ
JP5706036B2 (ja) 複合仮想グラフィクスデバイス
KR101680496B1 (ko) 코드 실행의 유연한 가속
Mijat et al. Virtualization is coming to a platform near you
US8938723B1 (en) Use of GPU for support and acceleration of virtual machines and virtual environments
JP5608243B2 (ja) 仮想化環境においてi/o処理を行う方法および装置
US9201635B2 (en) Just-in-time dynamic translation for translation, compilation, and execution of non-native instructions
US20180074843A1 (en) System, method, and computer program product for linking devices for coordinated operation
US9213563B2 (en) Implementing a jump instruction in a dynamic translator that uses instruction code translation and just-in-time compilation
RU2667791C2 (ru) Команда запуска виртуального выполнения для диспетчеризации множественных потоков в компьютере
CN109643277B (zh) 用于中介传递和共享存储器页合并的装置和方法
CN107479943B (zh) 基于工业互联网操作系统的多操作系统运行方法及装置
US20080244538A1 (en) Multi-core processor virtualization based on dynamic binary translation
EP2881860B1 (en) Method for implementing an interrupt between virtual processors, related device, and system
RU2666249C2 (ru) Диспетчеризация множественных потоков в компьютере
US9524178B2 (en) Defining an instruction path to be compiled by a just-in-time (JIT) compiler
TW201724011A (zh) 用於針對陰影結構的智慧型資源提供之設備及方法
US9529610B2 (en) Updating compiled native instruction paths
US9183018B2 (en) Dynamic on/off just-in-time compilation in a dynamic translator using instruction code translation
US9898307B2 (en) Starting application processors of a virtual machine
KR101462347B1 (ko) 가상 머신 바이너리 변환 방법
US11900142B2 (en) Improving memory access handling for nested virtual machines
KR20110080767A (ko) 액티브엑스 컨트롤 변환 시스템 및 방법
CN117331704B (zh) 图形处理器gpu调度方法、装置和存储介质
US20150186168A1 (en) Dedicating processing resources to just-in-time compilers and instruction processors in a dynamic translator

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20171101

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee