Apa pseudo-instruksi untuk di gem5?

Aug 19 2020

Jadi, saya melihat bagaimana beberapa simulasi di gem5 diterapkan, lebih khusus lagi, saya melihat PIMSim (https://github.com/vineodd/PIMSim). Saya melihat mereka telah menerapkan beberapa instruksi semu untuk arsitektur x86. Saya telah melihat instruksi semu ini hanya digunakan dalam mode sistem penuh. Untuk itu mereka telah memodifikasi file-file berikut:

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

Saya telah memahami perubahan apa yang diperlukan untuk mengimplementasikan pseudo-instruksi kustom, tetapi yang tidak saya mengerti adalah apa itu dan bagaimana mereka digunakan. Saya tidak menemukan tempat di luar file-file ini yang disebut fungsi ini. Ada bantuan? Terima kasih sebelumnya!

Jawaban

1 CiroSantilli Aug 19 2020 at 21:39

Operasi semu adalah cara untuk membuat operasi simulasi sulap dari dalam tamu, jenis teknik ini lebih dikenal sebagai instrumentasi tamu.

Mereka dapat digunakan / diterapkan baik sebagai:

  • instruksi ajaib ditempatkan di ruang pengkodean yang tidak terpakai dari ISA asli

    Saya pikir ini selalu diaktifkan, kecuali di KVM di mana CPU host mengambil alih dan hanya macet jika instruksi yang tidak diketahui itu terlihat.

  • akses ke alamat memori ajaib. Ini dikonfigurasi / diaktifkan dari konfigurasi Python, System.pyberisi:

    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.")
    
  • Semihosting ARM : beberapa operasi semihosting kustom baru-baru ini dihubungkan ke m5ops. Tidak ada gunanya jika ada beberapa tumpang tindih antara apa yang beberapa m5ops dan apa yang beberapa operasi semihosting standar dapat mencapai, seperti keluar dari simulator.

Beberapa m5ops yang paling umum adalah:

  • m5 exit: keluar dari simulator
  • m5 checkpoint: ambil pos pemeriksaan
  • m5 dumpstats: statistik dump
  • m5 resetstats: nolkan statistik dan mulai menghitung untuk selanjutnya m5 dumpstats
  • m5 readfile: membaca nilai fs.py --scriptkonten opsi host , sangat berguna untuk menjalankan beban kerja yang berbeda setelah titik pemeriksaan boot Linux

m5ops berguna karena seringkali sulit untuk menentukan kapan Anda ingin melakukan operasi di atas dengan cara lain, misalnya: melakukan sesuatu ketika Linux selesai boot. Misalnya, untuk melakukannya secara naif dari simulator, Anda perlu mengetahui sebelumnya pada tanda centang apa yang terjadi. Anda bisa main-main dengan memeriksa apakah PC cocok dengan beberapa alamat (sudah dilakukan misalnya untuk panicpemeriksaan Linux ), tapi itu sedikit lebih sulit.

Ada juga alat m5 dalam pohon yang dapat Anda kompilasi silang dan tempatkan di tamu sistem lengkap Anda untuk mengekspos instruksi ajaib dari antarmuka CLI yang dapat dieksekusi.

Tapi Anda bisa langsung mengkodekannya di binari Anda juga untuk mendapatkan hasil yang lebih tepat jika diperlukan, misalnya hardcoding seperti di 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) :)

lebih banyak contoh hardcode di: https://github.com/cirosantilli/linux-kernel-module-cheat/blob/4f82f79be7b0717c12924f4c9b7c4f46f8f18e2f/lkmc/m5ops.hAtau Anda juga dapat menggunakannya dengan lebih baik dan lebih susah payah dari pohon jalur utama seperti yang ditunjukkan di: Cara menggunakan m5 di gem5-20

Beberapa info lebih lanjut juga dapat ditemukan di: https://cirosantilli.com/linux-kernel-module-cheat/#m5ops