d56772a8c089e29891eb2e2b58b3b304b3d73908
Some checks failed
Build / build (push) Failing after 1m52s
Update package version in build workflow to reflect new release version
CPU Check
CPU torture test designed for SMP systems, attempting to find CPU hardware faults, focusing primarily on the x86_64 architecture.
The basic operation is to:
- Run threads with affinity fixed to each logical CPU.
- Generate a chunk of random data, either dictionary based text, or random binary data.
- Run a number of checksum/hash algorithms over the data, store their results.
- Compress the data via one of (zlib, ...).
- Encrypt the data via AES-256-GCM.
- Copy the data ('rep movsb' on x86, else memcpy).
- Switch affinity to an alternate logical CPU.
- Decrypt.
- Decompress.
- Run checksum/hash algorithms and compare with stored results.
Algorithms are chosen to exercise various hardware extensions. Eg. on x86_64, SSE4.2, AVX, etc.
Prerequisites:
Designed to run under Unix/Linux OS.
- cmake: https://cmake.org/
- zlib
- OpenSSL
- Abseil-cpp: https://github.com/abseil/abseil-cpp
Note that Abseil must be built with the C++17 standard and include the StatusOr package (release 2020_09_23 or later).
Building
sh$ git clone --recursive https://github.com/google/cpu-check.git
sh$ cd cpu-check
sh$ mkdir build
sh$ cd build
sh$ cmake ..
sh$ make
Options
Some options have been implememented that affect the build, which may be passed to cmake via, eg:
cmake -DCMAKE_BUILD_TYPE=(Debug|Release)
- CMAKE_BUILD_TYPE=(Release|Debug)
- USE_CLANG=(ON|OFF)
- BUILD_STATIC=(ON|OFF)
TODO:
- Use git submodules for:
- highwayhash: https://github.com/google/highwayhash
- crc32c: https://github.com/google/crc32c
- cityhash: https://github.com/google/cityhash
- brotli: https://github.com/google/brotli
- gipfeli: https://github.com/google/gipfeli
- Expand encryption coverage - find those algorithms that stress the HW.
- Flags to enable/disable steps, eg. encryption.
- Flags controlling min/max buffer size.
- Use cpuid to dynamically select appropriate instruction set extensions.
- Query ACPI/cpuid for more meaningful CPU identification.
- Extra x86_64 instruction coverage:
- movnti (SSE2 mov doubleword with non-temporal hint)
- prefetch*
- movbe (mov with byte swap)
- Consider floating point tests?
- Keep stats on corruptions (eg. buffer lengths/alignments, detection means (crc32), etc).
- Try to narrow down corruptions automatically.
Description
Languages
C++
94%
CMake
3.9%
C
2.1%