คำแนะนำหลอกสำหรับใน gem5 คืออะไร?

Aug 19 2020

ดังนั้นฉันได้เห็นว่าการจำลองบางอย่างใน gem5 ถูกนำไปใช้อย่างไรโดยเฉพาะอย่างยิ่งฉันได้ดู PIMSim (https://github.com/vineodd/PIMSim). ฉันเห็นว่าพวกเขาใช้คำสั่งหลอกสำหรับสถาปัตยกรรม x86 ฉันได้เห็นคำแนะนำหลอกเหล่านี้ใช้ในโหมดระบบเต็มรูปแบบเท่านั้น เพื่อที่พวกเขาได้แก้ไขไฟล์ต่อไปนี้:

  • รวม / gem5 / m5ops.h
  • util / m5 / m5op_x86.S
  • src / arch / x86 / isa / decoder / two_byte_opcodes.isa
  • src / ซิม / pseudo_inst.hh (ซีซี)

ฉันเข้าใจว่าการเปลี่ยนแปลงใดที่จำเป็นในการใช้คำสั่งหลอกที่กำหนดเอง แต่สิ่งที่ฉันไม่เข้าใจคือสิ่งที่พวกเขาคืออะไรและใช้อย่างไร ฉันไม่พบสถานที่ใด ๆ นอกไฟล์เหล่านี้ฟังก์ชันนี้เรียกว่า ความช่วยเหลือใด ๆ ขอบคุณล่วงหน้า!

คำตอบ

1 CiroSantilli Aug 19 2020 at 21:39

Pseudo ops เป็นวิธีการสร้างการจำลองมายากลจากภายในแขกเทคนิคประเภทนี้เป็นที่รู้จักกันโดยทั่วไปว่าเป็นเครื่องมือสำหรับแขก

สามารถใช้ / นำไปใช้งานได้ทั้งในรูปแบบ:

  • คำแนะนำวิเศษที่วางไว้ในพื้นที่เข้ารหัสที่ไม่ได้ใช้งานของ ISA จริง

    ฉันคิดว่าสิ่งนี้ถูกเปิดใช้งานเสมอยกเว้นใน KVM ที่ CPU โฮสต์เข้ามาแทนที่และจะหยุดทำงานหากเห็นคำแนะนำที่ไม่รู้จักเหล่านั้น

  • เข้าถึงที่อยู่หน่วยความจำวิเศษ สิ่งนี้ได้รับการกำหนดค่า / เปิดใช้งานจากการกำหนดค่า 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 semihosting : การดำเนินการกึ่งโฮสต์ที่กำหนดเองบางอย่างถูกเชื่อมต่อกับ m5ops เมื่อเร็ว ๆ นี้ มันไม่มีค่าอะไรที่จะมีการทับซ้อนกันระหว่างสิ่งที่ m5ops บางตัวและสิ่งที่การดำเนินการกึ่งโฮสต์มาตรฐานบางอย่างสามารถบรรลุได้เช่นการออกจากโปรแกรมจำลอง

m5ops คอมมอนส์ส่วนใหญ่บางตัว ได้แก่ :

  • m5 exit: ออกจากโปรแกรมจำลอง
  • m5 checkpoint: ใช้ด่าน
  • m5 dumpstats: สถิติการถ่ายโอนข้อมูล
  • m5 resetstats: ให้ค่าสถิติเป็นศูนย์และเริ่มนับใหม่ในครั้งต่อไป m5 dumpstats
  • m5 readfile: อ่านค่าของfs.py --scriptเนื้อหาตัวเลือกโฮสต์ซึ่งมีประโยชน์มากในการเรียกใช้ปริมาณงานที่แตกต่างกันหลังจากจุดตรวจสอบการบูต Linux

m5ops มีประโยชน์เพราะมักจะยากที่จะระบุว่าเมื่อใดที่คุณต้องการดำเนินการข้างต้นด้วยวิธีอื่นเช่น: ทำบางอย่างเมื่อ Linux บูตเสร็จ เช่นหากต้องการทำแบบไร้เดียงสาจากเครื่องจำลองคุณจำเป็นต้องรู้ล่วงหน้าว่าเห็บเกิดอะไรขึ้น คุณสามารถตรวจสอบว่าพีซีตรงกับที่อยู่บางส่วนหรือไม่ (ทำไปแล้วเช่นสำหรับการpanicตรวจสอบLinux ) แต่ก็ยากกว่าเล็กน้อย

นอกจากนี้ยังมีเครื่องมือ m5 ในแผนผังที่คุณสามารถคอมไพล์ข้ามและวางไว้ในผู้เยี่ยมชมระบบทั้งหมดของคุณเพื่อแสดงคำสั่งวิเศษจากอินเทอร์เฟซ CLI ที่เรียกใช้งานได้

แต่คุณสามารถฮาร์ดโค้ดไว้ในไบนารีของคุณได้เช่นกันเพื่อให้ได้ผลลัพธ์ที่แม่นยำยิ่งขึ้นหากจำเป็นเช่นการเข้ารหัสแบบฮาร์ดโค้ดเช่นเดียวกับใน 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หรือคุณสามารถใช้มันอย่างสวยงามและใช้แรงงานมากขึ้นจากต้นไม้เมนไลน์ดังที่แสดงใน: วิธีใช้ m5 ใน gem5-20

สามารถดูข้อมูลเพิ่มเติมได้ที่: https://cirosantilli.com/linux-kernel-module-cheat/#m5ops