History

ring-buffer: Introducing ring-buffer mapping functions

In preparation for allowing the user-space to map a ring-buffer, add a set of mapping functions: ring_buffer_{map,unmap}() And controls on the ring-buffer: ring_buffer_map_get_reader() /* swap reader and head */ Mapping the ring-buffer also involves: A unique ID for each subbuf of the ring-buffer, currently they are only identified through their in-kernel VA. A meta-page, where are stored ring-buffer statistics and a description for the current reader The linear mapping exposes the meta-page, and each subbuf of the ring-buffer, ordered following their unique ID, assigned during the first mapping. Once mapped, no subbuf can get in or out of the ring-buffer: the buffer size will remain unmodified and the splice enabling functions will in reality simply memcpy the data instead of swapping subbufs. Link: https://lore.kernel.org/linux-trace-kernel/20240510140435.3550353-3-vdonnefort@google.com

Vincent Donnefort committed 2 years ago

Commit 117c3921 parent c09d4163 files · +463 −3Browse files

Showing the changes to include/uapi/linux (1 of 3 files). Show all

Unified · Split

include/uapi/linux/trace_mmap.h+46−0
@@ -0,0 +1,46 @@
1+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2+#ifndef _TRACE_MMAP_H_
3+#define _TRACE_MMAP_H_
4+
5+#include <linux/types.h>
6+
7+/**
8+ * struct trace_buffer_meta - Ring-buffer Meta-page description
9+ * @meta_page_size: Size of this meta-page.
10+ * @meta_struct_len: Size of this structure.
11+ * @subbuf_size: Size of each sub-buffer.
12+ * @nr_subbufs: Number of subbfs in the ring-buffer, including the reader.
13+ * @reader.lost_events: Number of events lost at the time of the reader swap.
14+ * @reader.id: subbuf ID of the current reader. ID range [0 : @nr_subbufs - 1]
15+ * @reader.read: Number of bytes read on the reader subbuf.
16+ * @flags: Placeholder for now, 0 until new features are supported.
17+ * @entries: Number of entries in the ring-buffer.
18+ * @overrun: Number of entries lost in the ring-buffer.
19+ * @read: Number of entries that have been read.
20+ * @Reserved1: Internal use only.
21+ * @Reserved2: Internal use only.
22+ */
23+struct trace_buffer_meta {
24+ __u32 meta_page_size;
25+ __u32 meta_struct_len;
26+
27+ __u32 subbuf_size;
28+ __u32 nr_subbufs;
29+
30+ struct {
31+ __u64 lost_events;
32+ __u32 id;
33+ __u32 read;
34+ } reader;
35+
36+ __u64 flags;
37+
38+ __u64 entries;
39+ __u64 overrun;
40+ __u64 read;
41+
42+ __u64 Reserved1;
43+ __u64 Reserved2;
44+};
45+
46+#endif /* _TRACE_MMAP_H_ */