20150103

1. MARSS 소스 코드 분석 – emulation/simulation switching 이해
emulation routine과 simulation routine이 어떻게 정보를 교환하는지 확인했다. Emulation routine과 simulation routine의 자유로운 전환은 어제 추측했듯이, Context 구조체에 의해 가능하다. CPUX86State Context 구조체는 원래 QEMU에서 사용하는 CPUX86State 구조체를 상속받는다. QEMU의 emulation routine에서는 Context 구조체를 원래 사용하던 CPUX86State처럼 접근하고, simulation routine에서는 Context 구조체로 접근한다.

1.1 Emulation Routine
1) ./qemu/cpus.c : cpu_exec_all()
모든 vcpu에 대해 ./qemu/cpus.c : qemu_cpu_exec() 호출.
qemu_cpu_exec()는 ./qemu/target-i386/cpu.h : cpu_exec() 호출.

2) ./qemu/target-i386/cpu.h : cpu_exec()
각기의 architecture에 대해 cpu_exec는 매크로로 선언되어 있다.

#define cpu_exec cpu_x86_exec

cpu_exec의 실제 소스 코드는 ./qemu/cpu-exec.c에 정의되어 있다. 이처럼 하는 이유는 heterogenuous emulation을 할 때, architecture 사이에 name collision을 방지하기 위함이다. (Jun, cpu_x86(), http://comments.gmane.org/gmane.comp.emulators.qemu/123411)

3) ./qemu/cpu-exec.c : cpu_exec()
예외, 인터럽트 등을 처리하고, 코드를 실행한다. tb_find_fast() 함수로 translation block을 찾고 이를 tcg_qemu_tb_exec() 함수로 실행한다.
(Qemu Detailed Study, http://lists.gnu.org/archive/html/qemu-devel/2011-04/pdfhC5rVdz7U8.pdf)

1.2 Simulation Routine
1) ./qemu/cpu-exec.c : sim_cpu_exec()
코드의 전반적인 구조는 cpu_exec와 비슷하다. 예외 및 인터럽트를 처리하며, ptl_simulate 함수로 simulation한다.

2) ./ptlsim/sim/ptlsim.cpp : ptl_simulate()
ptl_simulate에서 machine->run()을 호출해 simulation한다. machine은 여러 개의 context를 가지는데, 이 context는 앞서 QEMU에서 사용하던 것과 동일하다. 따라서 machine->run() 함수를 호출해도 이전 상태가 그대로 유지된다.

1.3 PTL Context Initialization
구체적으로 다음과 같은 흐름으로 Context 구조체가 초기화된다.
./qemu/vl.c : main() – module_call_init(MODULE_INIT_MACHINE);
./qemu/module.h : machine_init()
./qemu/hw/pc_piix.c : machine_init()
./qemu/hw/pc_piix.c : pc_init_pci()
./qemu/hw/pc_piix.c : pc_init1()
./qemu/hw/pc.c : pc_cpus_init()
./qemu/hw/pc.c : pc_new_cpu()
./qemu/target-i386/cpu.h : cpu_init
./qemu/target-i386/helper.c : cpu_x86_init()

#ifdef MARSS_QEMU
    env = ptl_create_new_context();
#else
    env = qemu_mallocz(sizeof(CPUX86State));
#endif

./ptlsim/sim/ptlsim.cpp : ptl_create_new_context()

extern "C"
CPUX86State* ptl_create_new_context() {

  static int ctx_counter = 0; 
  assert(ctx_counter < contextcount);

  // Create a new CPU context and add it to contexts array
  Context* ctx = new Context();
  ptl_contexts[ctx_counter] = ctx; 
  ctx_counter++;

  if (config.simpoint_file.set()) {
    init_simpoints();
  }

  return (CPUX86State*)(ctx);
}

2. MARSS 소스 코드 분석 – PTLsim 동작 방식 이해
MARSS에서 simulation routine은 PTLsim이 담당하며, PTLsim은 event driven simulator이다. Simulation은 machine->run() 함수를 호출해 시작한다 (./ptlsim/build/sim/ptlsim.cpp : ptl_simulate()에서 호출). BaseMachine::run() 함수에서는 cycle을 증가시키며 명령어를 해석하고 실행한다. core가 매 cycle마다 명령어를 해석하고, 내보내고, 실행한다. (coremodel.per_cycle_signals[i]->emit()). 이는 앞서 OooCore::runcycle() 함수를 매 사이클마다 실행하기로 등록해두었기에 가능한 것이다. (marss_register_per_cycle_event(&run_cycle);) 사이클마다 필요한 이벤트를 이벤트 큐에 추가하며(marss_add_event()), 적절한 시점에 이벤트를 실행한다(MemoryHierarchy::clock(), CPUController::clock()).

이벤트 등록 관련 함수
./ptlsim/build/sim/machine.cpp : marss_add_event(Signal* signal, int delay, void* arg)
./ptlsim/build/sim/machine.cpp : marss_register_per_cycle_event(Signal *signal)

실행의 흐름
./ptlsim/sim/machine.cpp : BaseMachine::run()
./ptlsim/build/cache/memoryHierarchy.cpp : MemoryHierarchy::clock()
./ptlsim/cache/cpuController.cpp : CPUController::clock()

OooCore::runcycle() 함수와 변경 사항에 대한 설명은 정섭이 형으로부터 들어야겠다.


3. Memory Systems Cache, DRAM, Disk – Chapter 7. Overview of DRAMS 읽음
– DRAM이 dynamic인 이유는 capacitor가 지속적으로 refresh되어야 하므로.
– JEDEC-style DRAM은 data, address, control, chip-select bus를 갖는다.
– DRAM 동작에서 uncertainty가 적을수록 더 빠른 동작이 가능하다.
(Delay-locked loop 등을 사용해 delay 보정)

내일은 Chapter 10. DRAM Memory System Organization을 읽어야겠다.


4. 영어 기사 읽기
1) Abortions in Medical Settings Rarely Have Major Complications, Scientific American
– Each year more than 1.1. million abortions are performed in the U.S. Nailing down clear safety data has been difficult, because many women must travel and are lost to follow-up tracking. (nail down – 합의, 결정을 이뤄내다. 목표를 달성하다)
– The results appear in the journal Obstetrics & Gynecology. (Obstetrics – 산과, Gynecology – 부인학)
2) End of Life Planning Does Not Make Cancer Patients Hopeless or Anxious, REUTERS
– He and his team set out to see if it was true that working through end of life planning took away cancer patients’ hope or raised their anxiety levels. (set out – 착수하다.)


5. 내일 할 것
– DRAMsim2 사용법 확인 및 소스 코드 분석
– Memory Systems Cache, DRAM, Disk – Chapter 10. DRAM Memory System Organization 읽기
– Computer Architecture A Quantitative Approach – Chapter 5. Thread-Level Parallelism 읽기
– kvm, qemu, Xen 등의 가상화 기술 조사 및 이해 (가상화 기술 종류 및 차이점 등)
– 영어 기사 읽기

Advertisements
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 88,328 hits
%d bloggers like this: