प्रौद्योगिकी साझेदारी

NEMU DiffTest इत्यस्य मूलभूतसिद्धान्ताः

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


अयं लेखः..."RISC-V निर्देश सेट् विभेदक परीक्षण (DiffTest) श्रृङ्खला पाठ्यक्रम"१, अन्यलेखानां जाँचार्थं स्वागतम्।

१ DiffTest सिद्धान्तस्य संक्षिप्तं वर्णनम्

DiffTest इत्यस्य मूलविचारः : समानविनिर्देशाधारितयोः कार्यान्वयनयोः कृते, समानं परिभाषितं निवेशं दत्त्वा, तेषां व्यवहारः सुसंगतः भवेत् ।
प्रोसेसर-डिजाइनं प्रति पुनः, riscv-पुस्तिकायाः ​​अनुसारं द्वयोः कार्यान्वयनयोः कृते, समानं सम्यक् कार्यक्रमं दत्त्वा, तेषां अवस्थापरिवर्तनानि (पञ्जिकाः, स्मृतिः) द्वयोः कार्यान्वयनयोः कृते सुसंगताः भवेयुः:

  • तेषु एकं अस्माकं CPU अस्ति;
  • वैकल्पिकरूपेण, सन्दर्भकार्यन्वयनरूपेण अनुकरणकं चिनुत ।
    अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
    प्रत्येकं वारं द्वयोः पक्षयोः निर्देशस्य निष्पादनं समाप्तं भवति चेत्, ते स्वस्य स्वस्य रजिस्टरस्य स्मृतिस्य च स्थितिं पश्यन्ति यदि ते पश्यन्ति यत् स्थितिः असङ्गता अस्ति तर्हि ते तत्क्षणमेव त्रुटिं निवेदयन्ति तथा च क्लायन्ट् प्रोग्रामस्य निष्पादनं स्थगयन्ति (अस्य कृते assert judgment करणस्य बराबरम् प्रत्येकं निर्देशः)।
  • DiffTest = ऑनलाइन आदेश-स्तरीय व्यवहारसत्यापन पद्धति
    • ऑनलाइन = कार्यक्रमं चालयन् सत्यापयन्तु
    • निर्देशस्तरः = निष्पादितं प्रत्येकं निर्देशं सत्यापितं भवति
  • कस्यापि कार्यक्रमस्य निर्देशस्तरीयपरीक्षासु परिवर्तयितुं स्थितिं च प्रतिपादयितुं शक्नोति
    • ये कार्यक्रमाः समाप्ताः न भविष्यन्ति, तेषां समर्थनं कुर्वन्तु, यथा OS
  • प्रक्रियायाः परिणामं पूर्वमेव ज्ञातुं आवश्यकता नास्ति
    • यतः वयं निर्देशनिष्पादनस्य व्यवहारस्य तुलनां कुर्मः, न तु कार्यक्रमस्य अर्थशास्त्रस्य

DiffTest इत्यस्य बृहत्तमाः उपयोगाः सन्ति :यदा शतशः वा सहस्राणि वा निर्देशान् चालयित्वा डिकोडिंग् अथवा निष्पादनदोषाः भवन्ति तदा प्रथमदोषनिर्देशं कथं शीघ्रं प्राप्नुमः?

अस्मिन् लेखे वयं उदाहरणरूपेण निम्नलिखितम् चिनोमः ।

  • QEMU सन्दर्भवस्तुरूपेण (REF) .
  • परीक्षणविषयत्वेन नेमुः (DUT) २.

अवश्यं, यदि भवान् प्रोसेसर-हार्डवेयरस्य परीक्षणं कर्तुं प्रवृत्तः अस्ति तर्हि प्रोसेसरस्य उपयोगः DUT इत्यस्य रूपेण अपि कर्तुं शक्यते ।

२ NEMU द्वारा समर्थितं DiffTest

make menuconfig
  • 1

परीक्षणं त्रुटिनिवारणं च -> विभेदपरीक्षणं सक्षमं कुर्वन्तु -> सन्दर्भनिर्माणं, निम्नलिखितरूपेण प्रविष्टं कुर्वन्तु:

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
यदा DUT कृते NEMU इत्यस्य उपयोगः भवति तदा भवान् 5 simulator modes इत्येतत् reference simulator REF इत्यस्य रूपेण चिन्वितुं शक्नोति ।

  • QEMU, गतिशीलपुस्तकालयविधिः, कोडः NEMU/tools/qemu-dl-diff/ इत्यत्र स्थितः अस्ति ।
  • QEMU, Socket mode, कोडः NEMU/tools/qemu-socket-diff/ इत्यत्र स्थितः अस्ति ।
  • KVM, कोडः NEMU/tools/kvm-diff/ इत्यत्र स्थितः अस्ति ।
  • नेमु
  • भृष्टि

उत्तरत्रयाणां कृते लेखकेन किमपि विशिष्टं संशोधनं न कृतम् अतः अयं लेखः तेषां परिचयं न करिष्यति ।

३ QEMU REF (dynamic library mode) इति करोति ।

भवन्तः NEMU/tools/ परिवर्तयितुं शक्नुवन्ति।कमु-द्ल-विभेदः/, गतिशीलपुस्तकालये संकलितः riscv64-qemu-so.
NEMU, गतिशीलपुस्तकालयाः, QEMU च इत्येतयोः मध्ये सम्बन्धः :
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

  • गतिशीलपुस्तकालयः: riscv64-qemu-so, यत् कार्यान्तरफलकानां difftest_xx श्रृङ्खलां निर्यातयति ।
  • QEMU: qemu-system-riscv64 कार्यान्वयनीयसञ्चिकायां cpu_xx, gdb_xx तथा qemu_xx श्रृङ्खलाकार्य-अन्तरफलकाः सन्ति ।
  • NEMU: riscv64-nemu-interpreter कार्यक्रमः गतिशीलपुस्तकालयं आह्वयति, यत् ततः QEMU आह्वयति ।

विशिष्टा प्रक्रिया : १.

  • NEMU एक्जीक्यूटिव प्रोग्राम riscv64-nemu-interpreter dlopen फंक्शन् आह्वयन् riscv64-qemu-so लोड् करोति, तथा च अनन्तरं कॉल् कृते difftest_xx श्रृङ्खला फंक्शन् चिह्नानि पार्स करोति ।
  • ततः, NEMU आरम्भार्थं difftest_init फंक्शन् आह्वयति ।
  • difftest_init फंक्शन् मध्ये, dlopen फंक्शन् पुनः आह्वयिष्यते यत् qemu-system-riscv64 एक्जीक्यूटिव सञ्चिकां लोड् कर्तुं तथा च फंक्शन् चिह्नानां cpu_xx, gdb_xx तथा qemu_xx श्रृङ्खलायाम् विश्लेषणं करिष्यति .
  • qemu-system-riscv64 सञ्चिकातः, parsed फंक्शन् मुख्यं फंक्शन् अस्ति, ततः difftest_init फंक्शन् qemu प्रोग्राम् आरभ्यतुं तत् आह्वयिष्यति ।
  • ततः यदि सर्वं सामान्यं भवति तर्हि निर्देशपरिणामानां तुलनां कर्तुं qemu फंक्शन् आह्वयितुं शक्नुवन्ति ।

४ REF (Socket mode) कृते QEMU .

भवन्तः NEMU/tools/ परिवर्तयितुं शक्नुवन्ति।क्वेमु-सॉकेट-विभेदः/, गतिशीलपुस्तकालये संकलितः riscv64-qemu-so.
NEMU, गतिशीलपुस्तकालयाः, QEMU च इत्येतयोः मध्ये सम्बन्धः :
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

  • गतिशीलपुस्तकालयः: riscv64-qemu-so, यत् कार्यान्तरफलकानां difftest_xx श्रृङ्खलां निर्यातयति ।
  • QEMU: qemu-system-riscv64 कार्यान्वयनीयसञ्चिकायां cpu_xx तथा gdb_xx श्रृङ्खलाकार्यान्तरफलकानि सन्ति ।
  • NEMU: riscv64-nemu-interpreter कार्यक्रमः गतिशीलपुस्तकालयं आह्वयति गतिशीलपुस्तकालयः सॉकेटद्वारा एकं आदेशपैकेटं प्रेषयति QEMU च पैकेटं प्राप्य तस्य विश्लेषणं करोति, तथा च विशिष्टादेशस्य आधारेण कस्य कार्यस्य निष्पादनार्थं आह्वानं कर्तव्यम् इति निर्णयं करोति ।

विशिष्टा प्रक्रिया : १.

  • NEMU एक्जीक्यूटिव प्रोग्राम riscv64-nemu-interpreter dlopen फंक्शन् आह्वयन् riscv64-qemu-so लोड् करोति, तथा च अनन्तरं कॉल् कृते difftest_xx श्रृङ्खला फंक्शन् चिह्नानि पार्स करोति ।
  • ततः, NEMU आरम्भार्थं difftest_init फंक्शन् आह्वयति ।
  • difftest_init फंक्शन् मध्ये, एकः बालप्रक्रिया fork() आउट् करिष्यति तथा च execlp फंक्शन् आह्वयित्वा QEMU आरभेत, यदा मातापितृप्रक्रिया निष्पादनं निरन्तरं करोति, सॉकेटद्वारा QEMU इत्यनेन सह सम्बद्धं भवति, तथा च init_isa फंक्शन् इत्यस्य आरम्भार्थं आह्वयति
  • ततः यदि सर्वं सामान्यं भवति तर्हि सॉकेट् मार्गेण आदेशपरिणामानां तुलनां कर्तुं शक्नुवन्ति ।

सन्दर्भदस्तावेजः : १.