Skip to content

Commit 61c0b7c

Browse files
authored
Merge pull request #13 from ZeduloTech/main
api: add DPF_MSG_DDR_CONFIG for DDR management
2 parents a5282bd + 9b7594f commit 61c0b7c

File tree

12 files changed

+738
-85
lines changed

12 files changed

+738
-85
lines changed

doc/api.docx

746 Bytes
Binary file not shown.

include/pmu_ddr.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#ifndef __PMU_DDR_H
22
#define __PMU_DDR_H
33

4-
#include <stdio.h>
5-
#include <stdint.h>
64

75
#define DDR_NONE (-1)
86
#define DDR_CLIENT (1)
@@ -30,15 +28,18 @@
3028
#define MAX_NUM_DDR_CONTROLLERS (16)
3129

3230

33-
31+
//structs for ddr
3432
struct ddr_s {
3533
uint64_t rd_last_update[MAX_NUM_DDR_CONTROLLERS];
3634
uint64_t wr_last_update[MAX_NUM_DDR_CONTROLLERS];
3735
char *mmap[MAX_NUM_DDR_CONTROLLERS]; //ddr ch 0, 1, ...
3836
int mem_file; //file desc
37+
uint64_t bar_address;
38+
int ddr_interface_type;
39+
int num_ddr_controllers;
3940
};
4041

41-
int pmu_ddr_init(struct ddr_s *ddr);
42+
int pmu_ddr_init(struct ddr_s *ddr, int kernel_mode);
4243
uint64_t pmu_ddr(struct ddr_s *ddr, int type);
4344

4445

include/user_api.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#define __USER_API_H
33

44
#include <stdint.h>
5-
#define PROC_DEVICE "/proc/dpf_monitor"
5+
#define PROC_DEVICE "/proc/dynamicPrefetch"
66

77
int kernel_mode_init(void);
88
int kernel_core_range(uint32_t start, uint32_t end);
@@ -15,6 +15,6 @@ int kernel_msr_read(uint32_t core_id, uint64_t *msr_values);
1515
int kernel_pmu_read(uint32_t core_id, uint64_t *pmu_values);
1616
int kernel_log_msr_values(uint32_t core_id);
1717
int kernel_log_pmu_values(uint32_t core_id);
18-
19-
18+
int kernel_set_ddr_config(struct ddr_s *ddr);
19+
int kernel_log_ddr_bw();
2020
#endif /* __USER_API_H */

kernelmod/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
obj-m += dpf.o
2-
dpf-objs := kernel_dpf.o kernel_common.o kernel_primitive.o
2+
dpf-objs := kernel_dpf.o kernel_common.o kernel_primitive.o kernel_pmu_ddr.o
33

44
PWD := $(CURDIR)
55

kernelmod/kernel_common.h

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,95 +52,138 @@ enum pmu_metrics {
5252

5353
// Enum for message types between user space and kernel module
5454
enum dpf_msg_type {
55-
DPF_MSG_INIT = 0, // API version negotiation
56-
DPF_MSG_CORE_RANGE = 1, // Core range configuration
57-
DPF_MSG_DDRBW_SET = 2, // DDR bandwidth setting
58-
DPF_MSG_CORE_WEIGHT = 3,// Core weight assignment
59-
DPF_MSG_TUNING = 4, // Tuning control
60-
DPF_MSG_MSR_READ = 5, // Read MSR values
61-
DPF_MSG_PMU_READ = 6 // Read PMU values
62-
};
63-
64-
// Message structures
55+
DPF_MSG_INIT = 0, // API version negotiation
56+
DPF_MSG_CORE_RANGE = 1, // Core range configuration
57+
DPF_MSG_DDRBW_SET = 2, // DDR bandwidth setting
58+
DPF_MSG_CORE_WEIGHT = 3, // Core weight assignment
59+
DPF_MSG_TUNING = 4, // Tuning control
60+
DPF_MSG_MSR_READ = 5, // Read MSR values
61+
DPF_MSG_PMU_READ = 6, // Read PMU values
62+
DPF_MSG_DDR_CONFIG = 7, // DDR configuration
63+
DPF_MSG_DDR_BW_READ = 8 //DDR BW READ
64+
};
65+
66+
// Common message header
6567
struct dpf_msg_header {
6668
__u32 type; // Message type (from dpf_msg_type)
6769
__u32 payload_size; // Size of payload following the header
6870
};
6971

72+
// Request structure for API version
7073
struct dpf_req_init {
7174
struct dpf_msg_header header;
7275
};
7376

77+
// Response structure for API version
7478
struct dpf_resp_init {
7579
struct dpf_msg_header header;
7680
__u32 version; // Returned API version
7781
};
7882

83+
// Request structure for core range
7984
struct dpf_core_range {
8085
struct dpf_msg_header header;
8186
__u32 core_start; // First core in range
8287
__u32 core_end; // Last core in range
8388
};
8489

90+
// Response structure for core range
8591
struct dpf_resp_core_range {
8692
struct dpf_msg_header header;
8793
__u32 core_start; // Confirmed first core
8894
__u32 core_end; // Confirmed last core
8995
__u32 thread_count; // Number of threads (cores) in range
9096
};
9197

98+
// Request structure for core weights
9299
struct dpf_core_weight {
93100
struct dpf_msg_header header;
94101
__u32 count; // Number of weights
95102
__u32 weights[]; // Flexible array of core weights
96103
};
97104

105+
// Response structure for core weights
98106
struct dpf_resp_core_weight {
99107
struct dpf_msg_header header;
100108
__u32 count; // Number of confirmed weights
101109
__u32 confirmed_weights[]; // Flexible array of confirmed weights
102110
};
103111

112+
// Request structure for tuning
104113
struct dpf_req_tuning {
105114
struct dpf_msg_header header;
106115
__u32 enable; // Enable tuning (non-zero) or disable (0)
107116
};
108117

118+
// Response structure for tuning
109119
struct dpf_resp_tuning {
110120
struct dpf_msg_header header;
111121
__u32 status; // Tuning status (e.g., enabled/disabled)
112122
};
113123

124+
// Request structure for DDR bandwidth setting
114125
struct dpf_ddrbw_set {
115126
struct dpf_msg_header header;
116127
__u32 set_value; // DDR bandwidth value to set (MB/s)
117128
};
118129

130+
// Response structure for DDR bandwidth setting
119131
struct dpf_resp_ddrbw_set {
120132
struct dpf_msg_header header;
121133
__u32 confirmed_value; // Confirmed DDR bandwidth value
122134
};
123135

136+
// Request structure for MSR read
124137
struct dpf_msr_read {
125138
struct dpf_msg_header header;
126139
__u32 core_id; // Core ID to read MSRs from
127140
};
128141

142+
// Response structure for MSR read
129143
struct dpf_resp_msr_read {
130144
struct dpf_msg_header header;
131145
__u64 msr_values[NR_OF_MSR]; // Array of MSR values
132146
};
133147

148+
// Request structure for PMU read
134149
struct dpf_pmu_read {
135150
struct dpf_msg_header header;
136151
__u32 core_id; // Core ID to read PMU from
137152
};
138153

154+
// Response structure for PMU read
139155
struct dpf_resp_pmu_read {
140156
struct dpf_msg_header header;
141157
__u64 pmu_values[PMU_COUNTERS]; // Array of PMU counter values
142158
};
143159

160+
// Request structure for DDR configuration
161+
struct dpf_ddr_config {
162+
struct dpf_msg_header header;
163+
__u64 bar_address; // BAR address for DDR config space
164+
__u32 cpu_type; // CPU type (e.g., DDR_CLIENT, DDR_GRR_SRF)
165+
__u32 num_controllers; // Number of DDR controllers
166+
};
167+
168+
// Response structure for DDR configuration
169+
struct dpf_resp_ddr_config {
170+
struct dpf_msg_header header;
171+
__u64 confirmed_bar; // Confirmed BAR address
172+
__u32 confirmed_type; // Confirmed CPU type
173+
};
174+
175+
// Request structure for reading DDR bandwidth
176+
struct dpf_ddr_bw_read {
177+
struct dpf_msg_header header;
178+
};
179+
180+
// Response structure for reading DDR bandwidth
181+
struct dpf_resp_ddr_bw_read {
182+
struct dpf_msg_header header;
183+
uint64_t read_bw;
184+
uint64_t write_bw;
185+
};
186+
144187
// Core state structure
145188
struct core_state_s {
146189
uint64_t pmu_result[PMU_COUNTERS]; // Delta since last PMU read (mapped to pmu_metrics)
@@ -160,6 +203,7 @@ int msr_load(int core_id);
160203
int msr_update(int core_id);
161204
int pmu_update(int core_id);
162205

206+
// Functions for reading and writing MSRs
163207
int msr_set_l2xq(int core_id, int value);
164208
int msr_get_l2xq(int core_id);
165209
int msr_set_l3xq(int core_id, int value);

0 commit comments

Comments
 (0)