mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2026-01-22 20:57:38 +00:00
The hwnoise tool is a special mode for the osnoise top tool.
hwnoise dispatches the osnoise tracer and displays a summary of the noise.
The difference is that it runs the tracer with the OSNOISE_IRQ_DISABLE
option set, thus only allowing only hardware-related noise, resulting in
a simplified output. hwnoise has the same features of osnoise.
An example of the tool's output:
# rtla hwnoise -c 1-11 -T 1 -d 10m -q
Hardware-related Noise
duration: 0 00:10:00 | time is in us
CPU Period Runtime Noise % CPU Aval Max Noise Max Single HW NMI
1 #599 599000000 138 99.99997 3 3 4 74
2 #599 599000000 85 99.99998 3 3 4 75
3 #599 599000000 86 99.99998 4 3 6 75
4 #599 599000000 81 99.99998 4 4 2 75
5 #599 599000000 85 99.99998 2 2 2 75
Link: https://lkml.kernel.org/r/2d6f49a6f3a4f8b51b2c806458b1cff71ad4d014.1675805361.git.bristot@kernel.org
Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: Daniel Bristot de Oliveira <bristot@kernel.org>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: Clark Williams <williams@redhat.com>
Cc: Bagas Sanjaya <bagasdotme@gmail.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
90 lines
1.8 KiB
C
90 lines
1.8 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@kernel.org>
|
|
*/
|
|
|
|
#include <getopt.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
#include "osnoise.h"
|
|
#include "timerlat.h"
|
|
|
|
/*
|
|
* rtla_usage - print rtla usage
|
|
*/
|
|
static void rtla_usage(int err)
|
|
{
|
|
int i;
|
|
|
|
static const char *msg[] = {
|
|
"",
|
|
"rtla version " VERSION,
|
|
"",
|
|
" usage: rtla COMMAND ...",
|
|
"",
|
|
" commands:",
|
|
" osnoise - gives information about the operating system noise (osnoise)",
|
|
" hwnoise - gives information about hardware-related noise",
|
|
" timerlat - measures the timer irq and thread latency",
|
|
"",
|
|
NULL,
|
|
};
|
|
|
|
for (i = 0; msg[i]; i++)
|
|
fprintf(stderr, "%s\n", msg[i]);
|
|
exit(err);
|
|
}
|
|
|
|
/*
|
|
* run_command - try to run a rtla tool command
|
|
*
|
|
* It returns 0 if it fails. The tool's main will generally not
|
|
* return as they should call exit().
|
|
*/
|
|
int run_command(int argc, char **argv, int start_position)
|
|
{
|
|
if (strcmp(argv[start_position], "osnoise") == 0) {
|
|
osnoise_main(argc-start_position, &argv[start_position]);
|
|
goto ran;
|
|
} else if (strcmp(argv[start_position], "hwnoise") == 0) {
|
|
hwnoise_main(argc-start_position, &argv[start_position]);
|
|
goto ran;
|
|
} else if (strcmp(argv[start_position], "timerlat") == 0) {
|
|
timerlat_main(argc-start_position, &argv[start_position]);
|
|
goto ran;
|
|
}
|
|
|
|
return 0;
|
|
ran:
|
|
return 1;
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int retval;
|
|
|
|
/* is it an alias? */
|
|
retval = run_command(argc, argv, 0);
|
|
if (retval)
|
|
exit(0);
|
|
|
|
if (argc < 2)
|
|
goto usage;
|
|
|
|
if (strcmp(argv[1], "-h") == 0) {
|
|
rtla_usage(0);
|
|
} else if (strcmp(argv[1], "--help") == 0) {
|
|
rtla_usage(0);
|
|
}
|
|
|
|
retval = run_command(argc, argv, 1);
|
|
if (retval)
|
|
exit(0);
|
|
|
|
usage:
|
|
rtla_usage(1);
|
|
exit(1);
|
|
}
|