Skip to content

Commit d78a22e

Browse files
committed
update cxlmemsim.json
1 parent 2048772 commit d78a22e

File tree

4 files changed

+329
-371
lines changed

4 files changed

+329
-371
lines changed

src/bpftimeruntime.cpp

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <unistd.h>
2424
#include <utility>
2525
#include <vector>
26+
#include <thread>
2627
#include "bpftimeruntime.h"
2728

2829
BpfTimeRuntime::BpfTimeRuntime(pid_t tid, std::string program_location)
@@ -35,31 +36,42 @@ BpfTimeRuntime::BpfTimeRuntime(pid_t tid, std::string program_location)
3536
}
3637

3738
BpfTimeRuntime::~BpfTimeRuntime() { bpftime_remove_global_shm(); }
38-
3939
int BpfTimeRuntime::read(CXLController *controller, BPFTimeRuntimeElem *elem) {
4040
mem_stats stats;
4141
proc_info proc_info1;
4242
proc_info thread_info1;
43+
4344
for (int i = 6; i < 11; i++) {
44-
int key = 0;
45-
int key1 = 0;
46-
bpftime_map_get_next_key(i, &key1, &key); // process map
47-
auto item2 = bpftime_map_lookup_elem(i, &key); // allocs map
48-
SPDLOG_DEBUG("Process map key: {} {} {}", key1, key, tid);
49-
if (i == 6 && item2 != nullptr) {
50-
stats = *((mem_stats *)item2);
51-
controller->set_stats(stats);
52-
elem->total++;
53-
}
54-
if (i == 9 && item2 != nullptr) {
55-
proc_info1 = *((proc_info *)item2);
56-
controller->set_process_info(proc_info1);
57-
elem->total++;
58-
}
59-
if (i == 10 && item2 != nullptr) {
60-
thread_info1 = *((proc_info *)item2);
61-
controller->set_thread_info(thread_info1);
62-
elem->total++;
45+
uint64_t key = 0; // 改为8字节
46+
uint64_t key1 = 0; // 改为8字节
47+
void *item2 = (void *)1;
48+
while(item2){
49+
int ret = bpftime_map_get_next_key(i, &key1, &key); // 获取key
50+
if (ret != 0) {
51+
SPDLOG_DEBUG("Failed to get next key for map {}", i);
52+
break;
53+
}
54+
55+
item2 = (void*)bpftime_map_lookup_elem(i, &key);
56+
SPDLOG_DEBUG("Process map key: {} {} thread_id:{}", key1, key,
57+
std::this_thread::get_id()); // 使用std::this_thread获取当前线程ID
58+
59+
if (i == 10 && item2 != nullptr) {
60+
stats = *((mem_stats *)item2);
61+
controller->set_stats(stats);
62+
elem->total++;
63+
}
64+
if (i == 6 && item2 != nullptr) {
65+
proc_info1 = *((proc_info *)item2);
66+
controller->set_process_info(proc_info1);
67+
elem->total++;
68+
}
69+
if (i == 8 && item2 != nullptr) {
70+
thread_info1 = *((proc_info *)item2);
71+
controller->set_thread_info(thread_info1);
72+
elem->total++;
73+
}
74+
key1 = key; // 更新key1为当前key
6375
}
6476
}
6577
return 0;

src/cxlmemsim.bpf.c

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ int uprobe_omp_parallel(struct pt_regs *ctx) {
5757
void *data = (void *)PT_REGS_PARM2(ctx); // 用户数据指针
5858
unsigned num_threads = (unsigned)PT_REGS_PARM3(ctx); // 线程数量
5959

60-
bpf_printk("OMP parallel region start: pid=%u, threads=%u\n",
61-
pid, num_threads);
62-
6360
// 更新进程信息中的线程计数
6461
struct proc_info *proc_info = bpf_map_lookup_elem(&process_map, &pid);
6562
if (proc_info) {
@@ -70,26 +67,12 @@ int uprobe_omp_parallel(struct pt_regs *ctx) {
7067
return 0;
7168
}
7269

73-
// 钩住OpenMP并行区域结束函数
74-
SEC("uretprobe//usr/lib/x86_64-linux-gnu/libgomp.so.1:GOMP_parallel")
75-
int uretprobe_omp_parallel(struct pt_regs *ctx) {
76-
u64 pid_tgid = bpf_get_current_pid_tgid();
77-
u32 pid = pid_tgid >> 32;
78-
79-
bpf_printk("OMP parallel region end: pid=%u\n", pid);
80-
81-
return 0;
82-
}
83-
8470
// 钩住GOMP_single_start函数 - 用于single构造
8571
SEC("uprobe//usr/lib/x86_64-linux-gnu/libgomp.so.1:GOMP_single_start")
8672
int uprobe_omp_single_start(struct pt_regs *ctx) {
8773
u64 pid_tgid = bpf_get_current_pid_tgid();
8874
u32 pid = pid_tgid >> 32;
8975
u32 tid = (u32)pid_tgid;
90-
91-
bpf_printk("OMP single construct start: pid=%u, tid=%u\n", pid, tid);
92-
9376
// 返回值表示该线程是否执行single区域
9477
return 0;
9578
}
@@ -102,8 +85,6 @@ int uretprobe_omp_single_start(struct pt_regs *ctx) {
10285
u32 tid = (u32)pid_tgid;
10386
bool is_selected = (bool)PT_REGS_RC(ctx);
10487

105-
bpf_printk("OMP single construct: pid=%u, tid=%u, selected=%d\n",
106-
pid, tid, is_selected);
10788

10889
return 0;
10990
}
@@ -115,7 +96,6 @@ int uprobe_omp_critical_start(struct pt_regs *ctx) {
11596
u32 pid = pid_tgid >> 32;
11697
u32 tid = (u32)pid_tgid;
11798

118-
bpf_printk("OMP critical section start: pid=%u, tid=%u\n", pid, tid);
11999

120100
// 记录线程进入临界区
121101
u32 locked = 1;
@@ -136,7 +116,6 @@ int uprobe_omp_critical_end(struct pt_regs *ctx) {
136116
u32 pid = pid_tgid >> 32;
137117
u32 tid = (u32)pid_tgid;
138118

139-
bpf_printk("OMP critical section end: pid=%u, tid=%u\n", pid, tid);
140119

141120
// 记录线程离开临界区
142121
u32 locked = 0;
@@ -158,7 +137,6 @@ int uprobe_omp_barrier(struct pt_regs *ctx) {
158137
u32 pid = pid_tgid >> 32;
159138
u32 tid = (u32)pid_tgid;
160139

161-
bpf_printk("OMP barrier reached: pid=%u, tid=%u\n", pid, tid);
162140

163141
return 0;
164142
}
@@ -171,8 +149,6 @@ int uprobe_omp_set_lock(struct pt_regs *ctx) {
171149
u32 tid = (u32)pid_tgid;
172150
void *lock = (void *)PT_REGS_PARM1(ctx);
173151

174-
bpf_printk("OMP set lock: pid=%u, tid=%u, lock=%p\n",
175-
pid, tid, lock);
176152

177153
// 记录线程获取锁
178154
u32 locked = 1;
@@ -189,8 +165,6 @@ int uprobe_omp_unset_lock(struct pt_regs *ctx) {
189165
u32 tid = (u32)pid_tgid;
190166
void *lock = (void *)PT_REGS_PARM1(ctx);
191167

192-
bpf_printk("OMP unset lock: pid=%u, tid=%u, lock=%p\n",
193-
pid, tid, lock);
194168

195169
// 记录线程释放锁
196170
u32 locked = 0;
@@ -210,7 +184,6 @@ int uprobe_cxx_thread_start(struct pt_regs *ctx) {
210184
void *thread_state_ptr = (void *)PT_REGS_PARM1(ctx); // unique_ptr参数
211185
void *thread_func_ptr = (void *)PT_REGS_PARM2(ctx); // 函数指针参数
212186

213-
bpf_printk("C++ std::thread start detected in process %u (tid %u)\n", pid, tid);
214187

215188
// 记录线程创建事件到临时映射,供返回探针使用
216189
struct {
@@ -246,8 +219,6 @@ int uretprobe_cxx_thread_start(struct pt_regs *ctx) {
246219
if (proc_info) {
247220
proc_info->thread_count++;
248221
bpf_map_update_elem(&process_map, &pid, proc_info, BPF_ANY);
249-
bpf_printk("Incremented thread count for process %u to %u\n",
250-
pid, proc_info->thread_count);
251222
}
252223

253224
// 清理临时信息
@@ -644,7 +615,6 @@ int uretprobe_fork(struct pt_regs *ctx) {
644615
struct mem_stats new_stats = {};
645616
bpf_map_update_elem(&stats_map, &child_pid, &new_stats, BPF_ANY);
646617

647-
bpf_printk("fork: parent=%u created child=%u\n", parent_pid, child_pid);
648618
}
649619

650620
// 清理临时状态
@@ -716,7 +686,6 @@ int uretprobe_clone(struct pt_regs *ctx) {
716686
bpf_map_update_elem(&process_map, &parent_pid, parent_info, BPF_ANY);
717687
}
718688

719-
bpf_printk("clone created thread: pid=%u, tid=%u\n", parent_pid, child_id);
720689
} else {
721690
// 这是一个进程,更新进程映射
722691
struct proc_info proc_info = clone_data->info;
@@ -730,7 +699,6 @@ int uretprobe_clone(struct pt_regs *ctx) {
730699
struct mem_stats new_stats = {};
731700
bpf_map_update_elem(&stats_map, &child_id, &new_stats, BPF_ANY);
732701

733-
bpf_printk("clone created process: parent=%u, child=%u\n", parent_pid, child_id);
734702
}
735703
}
736704

@@ -801,7 +769,6 @@ int uprobe_exit(struct pt_regs *ctx) {
801769
u32 tid = (u32)pid_tgid;
802770
u32 pid = pid_tgid >> 32;
803771

804-
bpf_printk("exit: tid=%u, pid=%u\n", tid, pid);
805772

806773
// 查找并删除线程信息
807774
struct proc_info *thread_info = bpf_map_lookup_elem(&thread_map, &tid);
@@ -832,7 +799,6 @@ int uprobe_exit_group(struct pt_regs *ctx) {
832799
u32 tid = (u32)pid_tgid;
833800
u32 pid = pid_tgid >> 32;
834801

835-
bpf_printk("exit_group: pid=%u\n", pid);
836802

837803
// 获取退出状态码
838804
int exit_code = (int)PT_REGS_PARM1(ctx);
@@ -841,8 +807,6 @@ int uprobe_exit_group(struct pt_regs *ctx) {
841807
struct proc_info *proc_info = bpf_map_lookup_elem(&process_map, &pid);
842808
if (proc_info) {
843809
// 记录进程退出信息
844-
bpf_printk("Process %u exiting with code %d, had %d threads\n",
845-
pid, exit_code, proc_info->thread_count);
846810

847811
// 删除进程信息
848812
bpf_map_delete_elem(&process_map, &pid);

0 commit comments

Comments
 (0)