Abstract
M5 : Simulation frame work multiple ISA
GEMS : flexible memory system
gme5 : M5 + GEMS (ARM, ALPHA, MIPS, Power, SPARC, x86
1. Intro
기존의 시뮬레이터들은 라이센스 문제 및 코드의 퀄리티 때문에 협업이 힘들었다.
GEM5에서는 BSD 라이센스를 사용하고 CPU mode, Execution Mode, Memory systems의 다양한 옵션을 주어 Flexibility, Modular simulation system을 지원한다.
2. Overall Goals
Flexible modeling, Broad range of users, Wide avialability and utility
2.1 Flexibility
각 실험 환경에 대해 유동적인 시뮬레이터가 필요하다
(예를들어, Fine grain clock gating 실험에서는 detail한 CPU 모델이 필요하지만 다중 코어 모델링은 필요하지 않다
반면 highly scalable interconnect model에서는 다수의 CPU가 필요하지만 detail한 CPU 모델이 필요하지는 않다.)
Fig1에서 볼수 있듯이 speed/accuracy 측면에서 Trade off가능한 다양한 옵션이 확인가능하다.
CPU Model : 4가지 CPU Model을 지원한다.
AtomicSimple : Minimal single IPC CPU model
TimingSimple : 위와 비슷하지만 Memory Reference Timing 또한 모델링한다.
InOrder : 파이프라인 with in-order
O3 : 파이프라인 with out of order (InOrder 및 O3는 execute in execute Design)
System Mode : 2가지 Mode를 지원한다.
System-call Emulation(SE) : 대부분의 시스템 수준 서비스를 에뮬레이션하여 Device 또는 OS를 모델링 할 필요가 없다.
Full-System(FS) : 사용자 수준 및 커널 수준 명령을 모두 실행하고 Device 또는 OS를 포함한 전체 시스템을 모델링한다.
Memory System : 2가지의 Model을 지원한다.
Classic (from M5) : fast, easily configurable memory systems
Ruby (from GEMS) : accurately simulating for flexible infrastructure with cache coherent memory system
2.2 Availability
다른 유형의 사용자들이 광범위 하게 사용할 수 있도록 BSD 라이센스를 사용한다.
2.3 High Level of Colaboration
Community, wiki, 등 많은 참여자들이 존재한다.
3. Design Features
3가지 특징 : Object orientation, Python integration, domian specific languages, use of standard interfaces
3.1 Pervasive Object-Oriented Design
Flexibility를 위해 Object-Oriented Design을 선택했다.
GEM5의 Component들은 SimObject로 구성되어있으며 Cofinguration, initialization, statistic, serialization 등이 공유된다.
SimObject는 processor core, cahce, interconnect element등의 하드웨어 구성요소 뿐만 아니라, 워크로드, System call 에뮬을 위한 관련 프로세스 컨텍스트와 같은 추상적인 엔티티도 포함한다.
모든 SimObject는 Base class로부터 파생된 Python, C++ 의 두 클래스로 표현된다.
Python class definition은 SimObject의 parameter 및 Script-based configuration에 사용된다/.
Common Python base class는 이름지정 및 매개변수 설정을 위한 균일 한 메커니즘을 제공한다.
C++ class는 성능에 중요한 시뮬레이션 모델을 포함하여 State 및 나머지 동작들을 포함한다.
3.2 Python Integration
시뮬레이터의 85%가 C++로 작동되지만 Python은 작동적인 측면에서 실행된다.(초기화, 구성, 시뮬레이션 제어)
3.3 Domain Specific Lagnuages
Domain Specific Languages를 지원함으로서 상당한 유연성을 제공한다. (공통적인 지식과 관용구를 활용하여 간결하게 표현)
두개의 DSLs, 하나는 Instruction sets(M5에서 상속), Cache Coherence protocols(GEMS에서 상속)
GEM5 CPU model은 common C++ base class를 사용함으로 인스트럽션의 독립성을 제공
파생클래스들은 execute()와 같은 virtual functions을 오버라이드하여 opcode를 구성한다.
이러한 파생클래스에 대한 일련의 C++선언과 기계명령어를 사용하고 파생클래스중 하나의 인스턴스를 반환하는 함수가 필요하다.
ISA description 언어를 사용하면 사용자가 해당 C++코드를 간결하게 작성할 수 있다.
Cache Coherence DSL(SLICC)는 다양한 캐시 일관성 프로토콜을 구현할 수있는 DSL이다.
캐시, 메모리, DMA 컨트롤러를 개별 메모리 블럭별 State Machine으로 정의한다.
프로토콜은 State, Event, transition, actiond으로 정의한다.
1. Python으로 구현되어 읽고 편집이 간단해졌다.
2. SimObject 구조를 위해 모든 매개 벼누가 입력 매개 변수로 지정된다.
3. 지역변수가 프로그래밍을 단순화하고 성능을 향상시킬 수 있다.
3.4 Standard Interfaces
Port inteface, message buffer interface 2개의 주요한 인터페이스
Port 는 두 개의 메모리 개채를 함께 연결하는 데 사용되는 인터페이스이다.
Classc Memory System에서는 Port Interface를 사용해 CPU를 포함한 모든 메모리 개체를 캐시에, 캐시를 버스에, 버스를 장체와 메모리에 연결한다.
Port 는 데이터에 접근하기 위한 Timing, Atomic, functional 과 Topology 결정, Debugging을 제공
Timing Mode는 메모리 액세스의 자세한 타이밍을 모델링하는데 사용된다.
메시지를 보내 메모리 시스템에 요청하고 응답은 다른 메시지를 통해 비동기적으로 반환된다.
Atomic Mode는 일부 타이밍 정보를 가져오는데 사용되지만 메시지를 사용하지 않는다.
Functional Access는 타이밍 정보를 변경하지 않고 시뮬레이터 상태를 업데이트한다. (디버깅, System call 에뮬레이션, 초기화에 사용된다)
Ruby Memory System에서는 Port Interface를 사용하여 CPU 및 장치에 연결하고 메시지 버퍼를 추가하여 Ruby 개체에 내부적으로 연결한다.
Message Buffer는 Port와 유사하지만 메시지 유형 및 저장과 관련해 몇가지 미묘한 방식으로 다르다.
4. Simulation Capabilities
ISA : Alpha, ARM, MIPS, Power, SPARC, x86
Execution Mode
SE : System call을 에뮬, 스레드 스케쥴러가 없어 스레드를 정적으로 코어에 매핑해야한다.
FS : OS 실행에 적합한 bare-metal 환경을 시뮬한다. Interrupt, Exceptions, Privilege level, I/O Device등에 대한 support가 포함
SE보다 accuracy, variety workload 실행이 높다.
CPU Models
AtomicSimple : non-pipelined,모든 메모리 액세스를 즉시 완료하는 Minimal single IPC CPU이다.
TimingSimple : 한번에 하나의 Outstanding Memory Request만 허용하지만 CPU는 Memory Access Timing을 모델링한다.
InOrder : in-order pipeline으로 Instruction timing 및 시뮬레이션 정확도를 강조하는 execute in execute 모델이다.
O3 : Instruction, functional units, memory accesses, pipeline stage간의 종속성을 시뮬레이션하는 Out of order pipeline 모델이다.