aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/apps/vespa-probe-io-uring/probe_io_uring.cpp
blob: ef3e6ddbef2c1b72fa8597f3a533eaf3b4179378 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include <vespa/config.h>
#include <stdio.h>
#include <stdlib.h>

#ifdef VESPA_HAS_IO_URING

#include <sys/utsname.h>
#include <liburing.h>
#include <liburing/io_uring.h>

#include <string>
#include <vector>

std::vector<std::string> op_names = {
    "IORING_OP_NOP",
    "IORING_OP_READV",
    "IORING_OP_WRITEV",
    "IORING_OP_FSYNC",
    "IORING_OP_READ_FIXED",
    "IORING_OP_WRITE_FIXED",
    "IORING_OP_POLL_ADD",
    "IORING_OP_POLL_REMOVE",
    "IORING_OP_SYNC_FILE_RANGE",
    "IORING_OP_SENDMSG",
    "IORING_OP_RECVMSG",
    "IORING_OP_TIMEOUT",
    "IORING_OP_TIMEOUT_REMOVE",
    "IORING_OP_ACCEPT",
    "IORING_OP_ASYNC_CANCEL",
    "IORING_OP_LINK_TIMEOUT",
    "IORING_OP_CONNECT",
    "IORING_OP_FALLOCATE",
    "IORING_OP_OPENAT",
    "IORING_OP_CLOSE",
    "IORING_OP_FILES_UPDATE",
    "IORING_OP_STATX",
    "IORING_OP_READ",
    "IORING_OP_WRITE",
    "IORING_OP_FADVISE",
    "IORING_OP_MADVISE",
    "IORING_OP_SEND",
    "IORING_OP_RECV",
    "IORING_OP_OPENAT2",
    "IORING_OP_EPOLL_CTL",
    "IORING_OP_SPLICE",
    "IORING_OP_PROVIDE_BUFFERS",
    "IORING_OP_REMOVE_BUFFERS",
    "IORING_OP_TEE",
    "IORING_OP_SHUTDOWN",
    "IORING_OP_RENAMEAT",
    "IORING_OP_UNLINKAT",
    "IORING_OP_MKDIRAT",
    "IORING_OP_SYMLINKAT",
    "IORING_OP_LINKAT",
    "IORING_OP_MSG_RING",
    "IORING_OP_FSETXATTR",
    "IORING_OP_SETXATTR",
    "IORING_OP_FGETXATTR",
    "IORING_OP_GETXATTR",
    "IORING_OP_SOCKET",
    "IORING_OP_URING_CMD",
    "IORING_OP_SEND_ZC",
    "IORING_OP_SENDMSG_ZC"
};

int main() {
    fprintf(stderr, "Vespa was compiled with io_uring\n");
    utsname host_info;
    uname(&host_info);
    fprintf(stderr, "kernel version: %s\n", host_info.release);
    io_uring_probe *probe = io_uring_get_probe();
    if (probe == nullptr) {
        fprintf(stderr, "io_uring probe failed!\n");
        return 1;
    }
    fprintf(stderr, "operation support: {\n");
    for (size_t i = 0; i < op_names.size(); ++i) {
        fprintf(stderr, "  %s: %s\n", op_names[i].c_str(),
                io_uring_opcode_supported(probe, i) ? "yes" : "no");
    }
    fprintf(stderr, "}\n");
    free(probe);
    return 0;
}

#else // VESPA_HAS_IO_URING

int main() {
    fprintf(stderr, "Vespa was compiled without io_uring\n");
    return 1;
}

#endif // VESPA_HAS_IO_URING