xref: /aosp_15_r20/system/bpf/progs/include/bpf_timeinstate.h (revision 55039e042b8390f50b0bdd70c11a2419f6d8fd50)
1*55039e04SAndroid Build Coastguard Worker /*
2*55039e04SAndroid Build Coastguard Worker  * Copyright (C) 2019 The Android Open Source Project
3*55039e04SAndroid Build Coastguard Worker  *
4*55039e04SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*55039e04SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*55039e04SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*55039e04SAndroid Build Coastguard Worker  *
8*55039e04SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*55039e04SAndroid Build Coastguard Worker  *
10*55039e04SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*55039e04SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*55039e04SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*55039e04SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*55039e04SAndroid Build Coastguard Worker  * limitations under the License.
15*55039e04SAndroid Build Coastguard Worker  */
16*55039e04SAndroid Build Coastguard Worker 
17*55039e04SAndroid Build Coastguard Worker #include <inttypes.h>
18*55039e04SAndroid Build Coastguard Worker #include <sys/types.h>
19*55039e04SAndroid Build Coastguard Worker 
20*55039e04SAndroid Build Coastguard Worker #define BPF_FS_PATH "/sys/fs/bpf/"
21*55039e04SAndroid Build Coastguard Worker 
22*55039e04SAndroid Build Coastguard Worker // Number of frequencies tracked in the array with total time. If some CPUs have
23*55039e04SAndroid Build Coastguard Worker // more than 64 freqs
24*55039e04SAndroid Build Coastguard Worker // // available, the overflow is stored in the last entry.
25*55039e04SAndroid Build Coastguard Worker #define MAX_FREQS_FOR_TOTAL 64
26*55039e04SAndroid Build Coastguard Worker // Number of frequencies for which a UID's times can be tracked in a single map entry. If some CPUs
27*55039e04SAndroid Build Coastguard Worker // have more than 32 freqs available, a single UID is tracked using 2 or more entries.
28*55039e04SAndroid Build Coastguard Worker #define FREQS_PER_ENTRY 32
29*55039e04SAndroid Build Coastguard Worker // Number of distinct CPU counts for which a UID's concurrent time stats can be tracked in a single
30*55039e04SAndroid Build Coastguard Worker // map entry. On systems with more than 8 CPUs, a single UID is tracked using 2 or more entries.
31*55039e04SAndroid Build Coastguard Worker #define CPUS_PER_ENTRY 8
32*55039e04SAndroid Build Coastguard Worker 
33*55039e04SAndroid Build Coastguard Worker typedef struct {
34*55039e04SAndroid Build Coastguard Worker     uint32_t uid;
35*55039e04SAndroid Build Coastguard Worker     uint32_t bucket;
36*55039e04SAndroid Build Coastguard Worker } time_key_t;
37*55039e04SAndroid Build Coastguard Worker 
38*55039e04SAndroid Build Coastguard Worker typedef struct {
39*55039e04SAndroid Build Coastguard Worker     uint64_t ar[FREQS_PER_ENTRY];
40*55039e04SAndroid Build Coastguard Worker } tis_val_t;
41*55039e04SAndroid Build Coastguard Worker 
42*55039e04SAndroid Build Coastguard Worker typedef struct {
43*55039e04SAndroid Build Coastguard Worker     uint64_t active[CPUS_PER_ENTRY];
44*55039e04SAndroid Build Coastguard Worker     uint64_t policy[CPUS_PER_ENTRY];
45*55039e04SAndroid Build Coastguard Worker } concurrent_val_t;
46*55039e04SAndroid Build Coastguard Worker 
47*55039e04SAndroid Build Coastguard Worker typedef struct {
48*55039e04SAndroid Build Coastguard Worker     uint32_t policy;
49*55039e04SAndroid Build Coastguard Worker     uint32_t freq;
50*55039e04SAndroid Build Coastguard Worker } freq_idx_key_t;
51*55039e04SAndroid Build Coastguard Worker 
52*55039e04SAndroid Build Coastguard Worker // Maximum number of processes whose thread CPU time-in-state can be tracked simultaneously.
53*55039e04SAndroid Build Coastguard Worker #define MAX_TRACKED_PIDS 8
54*55039e04SAndroid Build Coastguard Worker 
55*55039e04SAndroid Build Coastguard Worker // Indicates that the pid_tracked_map item is unused and further items in the array are also
56*55039e04SAndroid Build Coastguard Worker // unused
57*55039e04SAndroid Build Coastguard Worker #define TRACKED_PID_STATE_UNUSED 0
58*55039e04SAndroid Build Coastguard Worker // Indicates that the pid_tracked_map item contains a PID that is currently tracked
59*55039e04SAndroid Build Coastguard Worker #define TRACKED_PID_STATE_ACTIVE 1
60*55039e04SAndroid Build Coastguard Worker // Indicates that the pid_tracked_map item is vacant, but further items in the array may
61*55039e04SAndroid Build Coastguard Worker // contain tracked PIDs
62*55039e04SAndroid Build Coastguard Worker #define TRACKED_PID_STATE_EXITED 2
63*55039e04SAndroid Build Coastguard Worker 
64*55039e04SAndroid Build Coastguard Worker typedef struct {
65*55039e04SAndroid Build Coastguard Worker     pid_t pid;
66*55039e04SAndroid Build Coastguard Worker     // TRACKED_PID_STATE_UNUSED, TRACKED_PID_STATE_ACTIVE or TRACKED_PID_STATE_EXITED
67*55039e04SAndroid Build Coastguard Worker     uint8_t state;
68*55039e04SAndroid Build Coastguard Worker } tracked_pid_t;
69*55039e04SAndroid Build Coastguard Worker 
70*55039e04SAndroid Build Coastguard Worker typedef struct {
71*55039e04SAndroid Build Coastguard Worker     pid_t tgid;
72*55039e04SAndroid Build Coastguard Worker     uint16_t aggregation_key;
73*55039e04SAndroid Build Coastguard Worker     uint16_t bucket;
74*55039e04SAndroid Build Coastguard Worker } aggregated_task_tis_key_t;
75