---
name: "s390_runtime_instr"
section: "2"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/s390_runtime_instr"
---

# s390\_runtime\_instr(2)

enable/disable s390 CPU run-time instrumentation

## NAME

s390\_runtime\_instr - enable/disable s390 CPU run-time instrumentation

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <asm/runtime_instr.h> /* Definition of S390_* constants */
#include <sys/syscall.h>       /* Definition of SYS_* constants */
#include <unistd.h>
```

**int syscall(SYS\_s390\_runtime\_instr, int** *command***, int** *signum***);**

*Note*: glibc provides no wrapper for **s390\_runtime\_instr**(), necessitating the use of [**syscall**(2)](/syscall/2.md).

## DESCRIPTION

The **s390\_runtime\_instr**() system call starts or stops CPU run-time instrumentation for the calling thread.

The *command* argument controls whether run-time instrumentation is started (**S390\_RUNTIME\_INSTR\_START**, 1) or stopped (**S390\_RUNTIME\_INSTR\_STOP**, 2) for the calling thread.

The *signum* argument specifies the number of a real-time signal. This argument was used to specify a signal number that should be delivered to the thread if the run-time instrumentation buffer was full or if the run-time-instrumentation-halted interrupt had occurred. This feature was never used, and in Linux 4.4 support for this feature was removed; thus, in current kernels, this argument is ignored.

## RETURN VALUE

On success, **s390\_runtime\_instr**() returns 0 and enables the thread for run-time instrumentation by assigning the thread a default run-time instrumentation control block. The caller can then read and modify the control block and start the run-time instrumentation. On error, -1 is returned and *errno* is set to indicate the error.

## ERRORS

- **EINVAL**

  The value specified in *command* is not a valid command.

- **EINVAL**

  The value specified in *signum* is not a real-time signal number. From Linux 4.4 onwards, the *signum* argument has no effect, so that an invalid signal number will not result in an error.

- **ENOMEM**

  Allocating memory for the run-time instrumentation control block failed.

- **EOPNOTSUPP**

  The run-time instrumentation facility is not available.

## STANDARDS

Linux on s390.

## HISTORY

Linux 3.7. System z EC12.

## NOTES

The *asm/runtime\_instr.h* header file is available since Linux 4.16.

Starting with Linux 4.4, support for signalling was removed, as was the check whether *signum* is a valid real-time signal. For backwards compatibility with older kernels, it is recommended to pass a valid real-time signal number in *signum* and install a handler for that signal.

## SEE ALSO

[**syscall**(2)](/syscall/2.md), [**signal**(7)](/signal/7.md)
