gem5에서 의사 명령어는 무엇입니까?

Aug 19 2020

그래서 gem5의 일부 시뮬레이션이 어떻게 구현되는지, 좀 더 구체적으로 PIMSim (https://github.com/vineodd/PIMSim). 나는 그들이 x86 아키텍처에 대한 의사 명령어를 구현 한 것을 보았습니다. 이 의사 명령어는 전체 시스템 모드에서만 사용되는 것을 보았습니다. 이를 위해 다음 파일을 수정했습니다.

  • include / gem5 / m5ops.h
  • util / m5 / m5op_x86.S
  • src / arch / x86 / isa / decoder / two_byte_opcodes.isa
  • src / sim / pseudo_inst.hh (cc)

사용자 지정 의사 명령어를 구현하는 데 필요한 변경 사항이 무엇인지 이해했지만 이해하지 못하는 것은 그 내용과 사용 방법입니다. 이 함수가 호출되는 이러한 파일 외부의 위치를 ​​찾을 수 없습니다. 도움이 필요하세요? 미리 감사드립니다!

답변

1 CiroSantilli Aug 19 2020 at 21:39

의사 작업은 게스트 내부에서 매직 시뮬레이션 작업을 수행하는 방법입니다. 이러한 유형의 기술은 일반적으로 게스트 계측으로 알려져 있습니다.

다음과 같이 사용 / 구현할 수 있습니다.

  • 실제 ISA의 사용되지 않은 인코딩 공간에 배치 된 매직 명령어

    호스트 CPU가 인계를 받고 알 수없는 명령이 보이면 충돌하는 KVM을 제외하고는 항상 활성화되어 있다고 생각합니다.

  • 매직 메모리 주소에 대한 액세스. 이것은 Python 구성에서 구성 / 활성화되며 다음을 System.py포함합니다.

    m5ops_base = Param.Addr(
        0xffff0000 if buildEnv['TARGET_ISA'] == 'x86' else 0,
        "Base of the 64KiB PA range used for memory-mapped m5ops. Set to 0 "
        "to disable.")
    
  • ARM 세미 호스팅 : 일부 사용자 지정 세미 호스팅 작업이 최근 m5ops에 연결되었습니다. 일부 m5ops와 일부 표준화 된 세미 호스팅 작업 (예 : 시뮬레이터 종료)간에 겹치는 부분이 있다는 것은 가치가 없습니다.

가장 일반적인 m5ops는 다음과 같습니다.

  • m5 exit: 시뮬레이터 종료
  • m5 checkpoint: 체크 포인트 가져 오기
  • m5 dumpstats: 덤프 통계
  • m5 resetstats: 통계를 제로 아웃하고 다음 카운트를 다시 시작합니다. m5 dumpstats
  • m5 readfile: 호스트 fs.py --script옵션 내용 의 값 읽기, Linux 부팅 체크 포인트 후 다른 워크로드 를 실행하는 데 매우 유용 합니다.

m5ops는 위의 작업을 다른 방식으로 수행 할시기를 결정하기가 어렵 기 때문에 유용합니다. 예 : Linux가 부팅을 마칠 때 작업을 수행합니다. 예를 들어 시뮬레이터에서 기본적으로 순진하게 수행하려면 어떤 틱이 발생하는지 미리 알아야합니다. PC가 일부 주소와 일치하는지 확인하는 데 문제가있을 수 있지만 (예 : Linux panic확인을 위해 이미 완료 됨 ) 조금 더 어렵습니다.

또한 실행 가능한 CLI 인터페이스에서 매직 명령어를 노출하기 위해 전체 시스템 게스트에 크로스 컴파일 및 배치 할 수있는 트리 내 m5 도구 도 있습니다.

그러나 필요한 경우 더 정확한 결과를 얻기 위해 바이너리에 하드 코딩 할 수도 있습니다 (예 : X86에서와 같이 하드 코딩).

#define LKMC_M5OPS_CHECKPOINT __asm__ __volatile__ (".word 0x040F; .word 0x0043;" : : "D" (0), "S" (0) :)
#define LKMC_M5OPS_DUMPSTATS  __asm__ __volatile__ (".word 0x040F; .word 0x0041;" : : "D" (0), "S" (0) :)

더 많은 하드 코드 예제 : https://github.com/cirosantilli/linux-kernel-module-cheat/blob/4f82f79be7b0717c12924f4c9b7c4f46f8f18e2f/lkmc/m5ops.h또는 다음과 같이 메인 라인 트리 에서 더 멋지고 힘들게 사용할 수도 있습니다. gem5-20에서 m5를 사용하는 방법

더 많은 정보는 다음에서도 찾을 수 있습니다. https://cirosantilli.com/linux-kernel-module-cheat/#m5ops