summaryrefslogtreecommitdiff
path: root/progs
diff options
context:
space:
mode:
authorConnor O'Brien <connoro@google.com>2019-09-03 14:53:51 -0700
committerMaciej Żenczykowski <maze@google.com>2019-11-13 21:58:27 -0800
commit85087ae73703bb7285c6792e775da1cc6cefada6 (patch)
treeb0963bf8cd84e6438ed1a45a5c410740b381ba56 /progs
parent88eef6ad5554b24525be0fee5ce651c703f09f09 (diff)
downloadbpf-85087ae73703bb7285c6792e775da1cc6cefada6.tar.gz
bpf: move time in state struct definitions into a single shared header
Key and value formats for time in state related BPF maps currently have to be kept in sync between the BPF prog and libtimeinstate. Add a new bpf_timeinstate.h header file in a directory that already gets added to the include path for BPF progs, and add this file to a cc_library_headers module so it can be used from libtimeinstate as well. Test: build libtimeinstate and time_in_state.o Bug: 138317993 Change-Id: Ic56b2b64746f2211f3c802e074339750f26303c0 Merged-In: Ic56b2b64746f2211f3c802e074339750f26303c0 Signed-off-by: Connor O'Brien <connoro@google.com> (cherry picked from commit badb20f528bbddb3a8806371a7f1169e3c4a0d89)
Diffstat (limited to 'progs')
-rw-r--r--progs/Android.bp20
-rw-r--r--progs/include/bpf_timeinstate.h45
2 files changed, 65 insertions, 0 deletions
diff --git a/progs/Android.bp b/progs/Android.bp
new file mode 100644
index 0000000..37feafd
--- /dev/null
+++ b/progs/Android.bp
@@ -0,0 +1,20 @@
+//
+// Copyright (C) 2019 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+cc_library_headers {
+ name: "bpf_prog_headers",
+ export_include_dirs: ["include"],
+}
diff --git a/progs/include/bpf_timeinstate.h b/progs/include/bpf_timeinstate.h
new file mode 100644
index 0000000..6cbc4e1
--- /dev/null
+++ b/progs/include/bpf_timeinstate.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <inttypes.h>
+
+#define BPF_FS_PATH "/sys/fs/bpf/"
+
+// Number of frequencies for which a UID's times can be tracked in a single map entry. If some CPUs
+// have more than 32 freqs available, a single UID is tracked using 2 or more entries.
+#define FREQS_PER_ENTRY 32
+// Number of distinct CPU counts for which a UID's concurrent time stats can be tracked in a single
+// map entry. On systems with more than 8 CPUs, a single UID is tracked using 2 or more entries.
+#define CPUS_PER_ENTRY 8
+
+typedef struct {
+ uint32_t uid;
+ uint32_t bucket;
+} time_key_t;
+
+typedef struct {
+ uint64_t ar[FREQS_PER_ENTRY];
+} tis_val_t;
+
+typedef struct {
+ uint64_t active[CPUS_PER_ENTRY];
+ uint64_t policy[CPUS_PER_ENTRY];
+} concurrent_val_t;
+
+typedef struct {
+ uint32_t policy;
+ uint32_t freq;
+} freq_idx_key_t;