1. Overview

System testing refers to the process of running a wide range of tests to evaluate the overall performance and functionality of a system. It’s a helpful method for finding any anomalies that are preventing the system from performing at its highest level.

There are a lot of tools available on the Internet that can perform system testing on Linux. We can use them to run different tests and benchmark various components, such as the Central Processing Unit (CPU), the Graphics Processing Unit (GPU), memory, database, and more.

In this tutorial, we’ll talk about some tools that we can use to test a Linux system. We’ll learn how to install them and how to use them to analyze system components.

In terms of installation, we’ll use the apt and dnf commands as the main package managers used on many major distributions. Moreover, we have to be a root user to install these tools, so we’ll use the sudo command.

2. Sysbench

Sysbench is a multi-purpose, open-source tool that offers a straightforward way to test a Linux system. This tool includes separate tests for memory, CPU, database, I/O, and many other components.

It’s especially useful for benchmarking database performance while it’s running under a heavy load.

2.1. Installation

If we’re installing Sysbench on a Debian-based distribution such as Ubuntu, we use the apt command:

$ sudo apt install sysbench

In the case of Fedora-based distros such as RHEL, we utilize the dnf command:

$ sudo dnf install sysbench

Now, let’s see some tests using Sysbench.

2.2. Running a CPU Test

We can run a test on any system component using Sysbench with the help of a single command:

$ sysbench --test=cpu run

Here, the –test option is used to specify the component that we want to test. In this case, it has a value of cpu, which indicates that we want to check the CPU. The run command instructs Sysbench to go ahead and run the test.

When the evaluation is complete, we get the results in the form of a long output:

sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Prime numbers limit: 10000

Initializing worker threads…

Threads started!

CPU speed:
    events per second: 1023.64

General statistics:
    total time:                            10.0010s
    total number of events:                10239

Latency (ms):
        min:                                       0.97
        avg:                                       0.98
        max:                                       2.76
        95th percentile:                           0.99
        sum:                                    9996.96

Threads fairness:
    events (avg/stddev):            10239.0000/0.00
    execution time (avg/stddev):    9.9970/0.00

Visibly, the output that we’ve obtained contains a lot of information about the CPU such as speed and latency values.

2.3. Running a Memory Test

The command used in the previous section can also be utilized for running a memory test:

$ sysbench --test=memory run

Evidently, the only difference is the value of the –test option, which is memory in this case. Clearly, the latter indicates that we want to perform a memory test.

After the memory test is complete, we get an output containing potentially important memory information:

sysbench 1.0.18 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time

Running memory speed test with the following options:
  block size: 1KiB
  total size: 102400MiB
  operation: write
  scope: global

Initializing worker threads...

Threads started!

Total operations: 51156308 (5114789.88 per second)

49957.33 MiB transferred (4994.91 MiB/sec)


General statistics:
    total time:                            10.0001s
    total number of events:                51156308

Latency (ms):
        min:                                       0.00
        avg:                                       0.00
        max:                                       0.03
        95th percentile:                           0.00
        sum:                                    4492.67

Threads fairness:
    events (avg/stddev):             51156308.0000/0.00
    execution time (avg/stddev):     4.4927/0.00

Notably, we again see different latency statistics as well as general information.

2.4. Running Component Tests

The same command we already used enables us to run other tests as well. We just have to specify the value that refers to the component that we want to test.

To be clear, we can obtain the names of components for the –test option by using the –help flag of sysbench. For example, there are other several compiled-in tests:

  • cpu: CPU performance
  • memory: memory functions speed
  • fileio: file I/O
  • threads: threads subsystem performance
  • mutex: mutex performance

In general, we can also find all the command-line utilities that Sysbench offers, along with options, tests, and other features.

3. Phoronix Test Suite

Phoronix Test Suite (PTS) is a benchmarking tool that provides a large number of suites for system testing on Linux. The tests cover a wide range of components, such as CPU, memory, GPU, I/O, and others.

The process of testing a component with this tool is fairly straightforward as it manages all the aspects of a test process:

  • dependencies
  • files
  • download caches
  • installation

In terms of installation, we’ll follow a three-step process for all distributions that we’re going to discuss in this case.

3.1. Installation on Debian-Based Distros

On Debian-based distros such as Ubuntu, the first step is to download the .deb file from the official .deb link. After the download is complete, we’ll go to the download location and note the name of the file for later use.

Secondly, we use the dpkg command to install this tool, which is a package manager used on Debian-based distributions to manage .deb files:

$ sudo dpkg -i phoronix-test-suite_10.8.4_all.deb

Above, the -i option, short for –install, instructs dpkg to install PTS using its .deb file. We’ve specified the file by adding its relative path after the -i option.

Upon entering the command, the PTS installation process will commence. However, we might encounter an error during the process since the above command doesn’t install all the required dependencies. So, we might need to type another command to fix this issue and complete installing PTS:

$ sudo apt install -f

In the above command, the -f option, short for –fix-broken, fixes the dependency error by installing the remaining dependencies. Then, apt goes ahead and completes the installation of PTS.

3.2. Installation on Fedora-Based Distros

If we’re using a Fedora-based distro such as RHEL, we start by visiting the official .tar.gz link and downloading the .tar file provided by PTS. Just like in the previous case, we’ll note the name of the downloaded file for future use.

Then, we’ll use the tar command to extract the .tar file:

$ tar -xf phoronix-test-suite-10.8.4.tar.gz -C /mnt/PTS

The -f option, short for –file, is used to specify the file to be extracted, which we’ve done by typing the name of the .tar file. Additionally, we’ve used the -x option, short for –extract, to instruct tar to extract the file. We’ve also utilized the -C option, short for –directory, to specify the target directory.

Finally, we navigate to the directory where the .tar file is extracted, i.e., PTS, and install the tool:

$ cd PTS
$ sudo ./install-sh

Above, we have executed the install-sh setup file to install PTS on the system.

Next, we’ll see how to run tests using this tool.

3.3. Running a CPU Test

If we want to perform a CPU evaluation, we have to follow two steps.

The first step is to utilize the benchmark command, which we can use to specify, install, and run a particular test:

$ phoronix-test-suite benchmark sysbench

Here, we’ve specified the sysbench test, as it enables us to test memory, CPU, and many other system components.

When initiating the test, we’re prompted to specify the component that we want to test. Since we want to perform CPU benchmarking, we’ll write 1 in the terminal:

Sysbench 1.0.20:
    pts/sysbench-1.1.0
    System Test Configuration
        1: CPU
        2: RAM / Memory
        3: Test All Options
        ** Multiple items can be selected, delimit by a comma. **
        Test: 1

The test now performs a complete CPU evaluation and prints the results to the terminal upon completion:

Sysbench 1.0.20:
    pts/sysbench-1.1.0 [Test: CPU]
    Test 1 of 1
    Estimated Trial Run Count: 3
    Estimated Time To Completion: 2 Minutes [08:44 IDT]
        Started Run 1 @ 08:42:40
        Started Run 2 @ 08:44:14
        Started Run 3 @ 08:45:48
        Started Run 4 @ 08:47:22 *
        Started Run 5 @ 08:48:56 *
        Started Run 6 @ 08:50:30 *
        Started Run 7 @ 08:52:04 *
        Started Run 8 @ 08:53:38 *
        Started Run 9 @ 08:55:12 *
        Started Run 10 @ 08:56:46 *
        Started Run 11 @ 08:58:20 *
        Started Run 12 @ 08:59:54 *
        Started Run 13 @ 09:01:28 *
        Started Run 14 @ 09:03:02 *
        Started Run 15 @ 09:04:36 *

    Test: CPU:
        6102.16
        5147.57
        5272.51
        5955.3
        5900.58
        5713.5
        5815.82
        5888.94
        6006.4
        6072.04
        5935.2
        5702.08
        5801.02
        5662.42
        5600.84

    Average: 5771.76 Events Per Second
    Deviation: 4.71%
    Samples: 15

    Comparison of 3,583 OpenBenchmarking.org samples;
    median result: 15811 Events Per Second.

As we can see, we’ve got a long output containing information about the CPU.

3.4. Running a Memory Test

If we run the same command that we used in the previous section and enter 2 in the terminal when prompted, we’ll initiate a thorough memory benchmarking process:

Sysbench 1.0.20:
    pts/sysbench-1.1.0
    System Test Configuration
        1: CPU
        2: RAM / Memory
        3: Test All Options
        ** Multiple items can be selected, delimit by a comma. **
        Test: 2

After the analysis is complete, we obtain an output that includes a bunch of information about memory:

Sysbench 1.0.20:
    pts/sysbench-1.1.0 [Test: RAM / Memory]
    Test 1 of 1
    Estimated Trial Run Count: 3
    Estimated Time To Completion: 5 Minutes [06:59 IDT]
        Started Run 1 @ 06:55:20
        Started Run 2 @ 06:55:34
        Started Run 3 @ 06:55:47
        Started Run 4 @ 06:56:00 *
        Started Run 5 @ 06:56:12 *
        Started Run 6 @ 06:56:24 *
        Started Run 7 @ 06:56:36 *
        Started Run 8 @ 06:56:49 *
        Started Run 9 @ 06:57:01 *
        Started Run 10 @ 06:57:14 *
        Started Run 11 @ 06:57:26 *
        Started Run 12 @ 06:57:38 *
        Started Run 13 @ 06:57:50 *
        Started Run 14 @ 06:58:03 *

    Test: RAM / Memory:
        11140.06
        11799.17
        11674.39
        12250.95
        12572.81
        12443.42
        11739.52
        12686.26
        12161.35
        12651.1
        12313.72
        12735.01
        11677.58
        10884.97

    Average: 12052.17 MiB/sec
    Deviation: 4.83%
    Samples: 14

    Comparison of 893 OpenBenchmarking.org samples;
    median result: 6604 MiB/sec.

Since Phoronix Test Suite provides tests for almost every component, it’s a comprehensive tool to use for system testing on Linux.

4. Conclusion

In this article, we discussed some tools that help us evaluate the performance of a Linux system. We talked about their installation processes and also looked at the methods that we can use to run tests via each.