20141104

창현이 형과 같이 연구하게 되었다. MARSSx86을 보는 중.

MARSSx86은 qemu와 ptlsim이 통합된 형태이다. 소스 코드를 분석해 봄.

ptlsim의 시작 지점은 ptl_simulate이다. ptl_simulate는 다음 과정을 거쳐 호출된다.
MARSSx86의 시작 지점은 vl.c의 main()이다.
main()에서는 qemu의 여러 옵션들을 처리해준 뒤, main_loop()를 호출한다. (./qemu/vl.c)
main_loop()에서는 vm_start()를 호출해 가상 머신을 시작한다. (./qemu/vl.c)
main_loop()가 sim_cpu_exec()를 호출한다. (./qemu/cpu-exec.c)
sim_cpu_exec()는 ptl_simulate()를 호출한다.(./ptlsim/sim/ptlsim.cpp)
ptl_simulate()에서는 machine->run()을 호출해, simulation을 시작한다.(./ptlsim/sim/machine.cpp)
./ptlsim/sim/machine.cpp의 BaseMachine::run()에서는 for loop을 돌면서 계속해서 simulation한다.

한 번의 for loop이 한 사이클을 의미하며, 중간에 몇 사이클을 실행 중인지 출력한다.
목표 cycle이 될 때까지 for loop를 실행한다.

memoryHierarchyPtr->clock();, clock_qemu_io_events();가 중요 이벤트를 처리하는 것 같다.
memoryHierarchyPtr->clock();은 ./ptlsim/cache/memoryHierarchy.cpp에 선언되어 있으며,
((MemoryController*)memoryController_)->mem->update();를 호출한다.
DRAMsim에 memory request를 보내는 것이다.
한편, DRAMsim에서는 addTransaction()으로 memory request를 추가해야 한다.
addTransaction()은 handle_interconnect_cb()에서 호출한다. (./ptlsim/cache/memoryController.cpp)
handle_interconnect_cb()는 handle_interconnect에 의해 호출되며, 이는 get_interconnect_signal()에 의해 호출된다.
get_interconnect_signal()은 cache쪽에서 호출하는 것으로 보인다.

Advertisements
Tagged with: , , , ,
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

누적 방문자 수
  • 98,786 hits
%d bloggers like this: