Skip to content

Commit

Permalink
instruction_check:Add instruction check tests
Browse files Browse the repository at this point in the history
1. Implemented processor instruction set support detection by invoking the cpuid_check tool with the Avocado testing framework.

Signed-off-by: Haoliang Zhu<[email protected]>
  • Loading branch information
haoliang-Zhu authored and ysun committed May 30, 2024
1 parent 2832198 commit 500758f
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 0 deletions.
37 changes: 37 additions & 0 deletions BM/instruction-check/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Instruction Check

This README provides information about the `instruction-check` project, which focuses on the CPUID instruction in computer processors. The CPUID instruction allows software programs to query and retrieve detailed information about the processor, including the manufacturer, model, features, and other characteristics.

## CPUID Check Tool

In the `LKVS/tools` directory, you can find a pre-existing tool for checking CPUID information. This tool supports six parameters, for example: `cpuid_check 1 0 0 0 c 25`. The first four parameters represent the input values for the EAX, EBX, ECX, and EDX registers, while `c` indicates checking the output of the ECX register, and `25` represents checking the 25th bit.

## Preparation

### 1. Install the Avocado Test Framework
The Instruction Check project utilizes the Avocado Test Framework, so it needs to be installed first. You can install the Avocado test framework using either of the following methods:

1. Source code installation:
```
git clone git://github.com/avocado-framework/avocado.git
cd avocado
pip install .
```
2. Installation via pip:
```
pip3 install --user avocado-framework
```

### 2. Install the HTML plugin
After installing the framework, you also need to install the HTML plugin for generating test results in HTML format. You can do this by running the following command:
``pip install avocado-framework-plugin-result-html``

## Usage

### 1. ompile the cpuid_check tool
Run the command:
``./setuo.sh``

### 2. Execute instruction_check.py
Run the command:
``./ininstruction_check.py`` or ``python instruction_check.py``
49 changes: 49 additions & 0 deletions BM/instruction-check/feature_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
cpuid_info = {
"AESNI": ['1', '0', '0', '0', 'c', '25'],
"XSAVE": ['1', '0', '0', '0', 'c', '26'],
"FSGSBASE": ['7', '0', '0', '0', 'b', '0'],
"SMEP": ['7', '0', '0', '0', 'b', '7'],
"RDT_A": ['7', '0', '0', '0', 'b', '15'],
"AVX512_IFMA": ['7', '0', '0', '0', 'b', '21'],
"SHA_NI": ['7', '0', '0', '0', 'b', '29'],
"AVX512_VBMI": ['7', '0', '0', '0', 'c', '1'],
"UMIP": ['7', '0', '0', '0', 'c', '2'],
"WAITPKG": ['7', '0', '0', '0', 'c', '5'],
"AVX512_VBMI2": ['7', '0', '0', '0', 'c', '6'],
"CET_SS": ['7', '0', '0', '0', 'c', '7'],
"GFNI": ['7', '0', '0', '0', 'c', '8'],
"VAES": ['7', '0', '0', '0', 'c', '9'],
"AVX512_VNNI": ['7', '0', '0', '0', 'c', '11'],
"AVX512_BITALG": ['7', '0', '0', '0', 'c', '12'],
"RDPID": ['7', '0', '0', '0', 'c', '22'],
"KL": ['7', '0', '0', '0', 'c', '23'],
"CLDEMOTE": ['7', '0', '0', '0', 'c', '25'],
"MOVDIRI": ['7', '0', '0', '0', 'c', '27'],
"MOVDIR64B": ['7', '0', '0', '0', 'c', '28'],
"PKS": ['7', '0', '0', '0', 'c', '31'],
"UINTR": ['7', '0', '0', '0', 'd', '5'],
"AVX512_VP2INTERSECT": ['7', '0', '0', '0', 'd', '8'],
"SERIALIZE": ['7', '0', '0', '0', 'd', '14'],
"TSXLDTRK": ['7', '0', '0', '0', 'd', '16'],
"CET_IBT": ['7', '0', '0', '0', 'd', '20'],
"AMX_BF16": ['7', '0', '0', '0', 'd', '22'],
"AVX512_FP16": ['7', '0', '0', '0', 'd', '23'],
"AMX_TILE": ['7', '0', '0', '0', 'd', '24'],
"AMX_INT8": ['7', '0', '0', '0', 'd', '25'],
"AVX_VNNI": ['7', '0', '1', '0', 'a', '4'],
"FRED": ['7', '0', '1', '0', 'a', '17'],
"WRMSRNS": ['7', '0', '1', '0', 'a', '19'],
"AMX_FP16": ['7', '0', '1', '0', 'a', '21'],
"AVX_IFMA": ['7', '0', '1', '0', 'a', '23'],
"AVX_VNNI_INT8": ['7', '0', '1', '0', 'd', '4'],
"AVX_NE_CONVERT": ['7', '0', '1', '0', 'd', '5'],
"XFD": ['d', '0', '1', '0', 'a', '4'],
"KL_BITMAP0": ['19', '0', '0', '0', 'a', '0'],
"KL_BITMAP1": ['19', '0', '0', '0', 'a', '1'],
"KL_BITMAP2": ['19', '0', '0', '0', 'a', '2'],
"AESKLE": ['19', '0', '0', '0', 'b', '0'],
"AES_WIDE": ['19', '0', '0', '0', 'b', '2'],
"KL_IWKEYBACKUP": ['19', '0', '0', '0', 'b', '4'],
"KL_RANDOM_IWKEY": ['19', '0', '0', '0', 'c', '1']
# Add more cpuid_info here
}
25 changes: 25 additions & 0 deletions BM/instruction-check/instruction_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/python

import sys
from avocado.core.job import Job
from avocado.core.nrunner.runnable import Runnable
from avocado.core.suite import TestSuite
from feature_list import cpuid_info

def main():
feature_name_list = cpuid_info.keys()

suites = []

for feature_name in feature_name_list:
args = cpuid_info[feature_name]
runnable = Runnable("exec-test", "../tools/cpuid_check/cpuid_check", *args)
suite = TestSuite(name=feature_name, tests=[runnable])
suites.append(suite)

# Run the test suites
with Job(test_suites=suites) as j:
sys.exit(j.run())

if __name__=="__main__":
main()
5 changes: 5 additions & 0 deletions BM/instruction-check/setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
PARENT_DIR="$(dirname "$SCRIPT_DIR")"
cd "$PARENT_DIR/tools" || exit 1
make

0 comments on commit 500758f

Please sign in to comment.