33
33
#include "procstat.skel.h"
34
34
#include "sysstat.skel.h"
35
35
#include "fraginfo.skel.h"
36
+ #include "numafraginfo.skel.h"
36
37
#include "memleak.skel.h"
37
38
#include "vmasnap.skel.h"
38
39
#include "drsnoop.skel.h"
@@ -264,6 +265,7 @@ static struct env
264
265
bool sysstat ; // 是否启用系统内存状态报告
265
266
bool memleak ; // 是否启用内核态/用户态内存泄漏检测
266
267
bool fraginfo ; // 是否启用内存碎片信息
268
+ bool numafraginfo ;
267
269
bool vmasnap ; // 是否启用虚拟内存区域信息
268
270
bool drsnoop ;
269
271
bool kernel_trace ; // 是否启用内核态跟踪
@@ -283,6 +285,7 @@ static struct env
283
285
.sysstat = false, // 默认关闭系统内存状态报告
284
286
.memleak = false, // 默认关闭内存泄漏检测
285
287
.fraginfo = false, // 默认关闭内存碎片信息
288
+ .numafraginfo = false,
286
289
.vmasnap = false, // 默认关闭虚拟内存区域信息
287
290
.drsnoop = false,
288
291
.kernel_trace = true, // 默认启用内核态跟踪
@@ -338,6 +341,9 @@ static const struct argp_option opts[] = {
338
341
339
342
{0 , 0 , 0 , 0 , "oomkiller:" , 15 }, // 新增的 oomkiller 选项
340
343
{"oomkiller" , 'o' , 0 , 0 , "print oomkiller (内存不足时被杀死的进程信息)" },
344
+ {0 , 0 , 0 , 0 , "numafraginfo:" , 16 },
345
+ {"numafraginfo" , 'N' , 0 , 0 , "print numafraginfo" },
346
+
341
347
342
348
{NULL , 'h' , NULL , OPTION_HIDDEN , "show the full help" },
343
349
{0 },
@@ -400,6 +406,9 @@ static error_t parse_arg(int key, char *arg, struct argp_state *state)
400
406
case 'd' :
401
407
env .duration = atoi (arg );
402
408
break ;
409
+ case 'N' :
410
+ env .numafraginfo = true;
411
+ break ;
403
412
default :
404
413
return ARGP_ERR_UNKNOWN ;
405
414
}
@@ -436,6 +445,7 @@ static int process_procstat(struct procstat_bpf *skel_procstat);
436
445
static int process_sysstat (struct sysstat_bpf * skel_sysstat );
437
446
static int process_memleak (struct memleak_bpf * skel_memleak , struct env );
438
447
static int process_fraginfo (struct fraginfo_bpf * skel_fraginfo );
448
+ static int process_numafraginfo (struct numafraginfo_bpf * skel_numafraginfo );
439
449
static int process_vmasnap (struct vmasnap_bpf * skel_vmasnap );
440
450
static int process_drsnoop (struct drsnoop_bpf * skel_drsnoop );
441
451
static int process_oomkiller (struct oomkiller_bpf * skel_oomkiller ); // 新增的oomkiller处理函数原型
@@ -456,6 +466,7 @@ int main(int argc, char **argv)
456
466
struct sysstat_bpf * skel_sysstat ;
457
467
struct memleak_bpf * skel_memleak ;
458
468
struct fraginfo_bpf * skel_fraginfo ;
469
+ struct numafraginfo_bpf * skel_numafraginfo ;
459
470
struct vmasnap_bpf * skel_vmasnap ;
460
471
struct oomkiller_bpf * skel_oomkiller ;
461
472
struct drsnoop_bpf * skel_drsnoop ;
@@ -485,6 +496,9 @@ int main(int argc, char **argv)
485
496
{
486
497
PROCESS_SKEL (skel_fraginfo , fraginfo );
487
498
}
499
+ else if (env .numafraginfo ){
500
+ PROCESS_SKEL (skel_numafraginfo , numafraginfo );
501
+ }
488
502
else if (env .vmasnap )
489
503
{
490
504
PROCESS_SKEL (skel_vmasnap , vmasnap );
@@ -1491,6 +1505,35 @@ static int process_fraginfo(struct fraginfo_bpf *skel_fraginfo)
1491
1505
fraginfo_bpf__destroy (skel_fraginfo );
1492
1506
return - err ;
1493
1507
}
1508
+ // =========================================numafraginfo=================================================
1509
+ static int process_numafraginfo (struct numafraginfo_bpf * skel_numafraginfo )
1510
+ {
1511
+
1512
+ int err = numafraginfo_bpf__load (skel_numafraginfo );
1513
+ if (err )
1514
+ {
1515
+ fprintf (stderr , "Failed to load and verify BPF skeleton\n" );
1516
+ goto numafraginfo_cleanup ;
1517
+ }
1518
+
1519
+ err = numafraginfo_bpf__attach (skel_numafraginfo );
1520
+ if (err )
1521
+ {
1522
+ fprintf (stderr , "Failed to attach BPF skeleton\n" );
1523
+ goto numafraginfo_cleanup ;
1524
+ }
1525
+ while (1 )
1526
+ {
1527
+ sleep (env .interval );
1528
+ print_nodes (bpf_map__fd (skel_numafraginfo -> maps .nodes ));
1529
+ printf ("\n" );
1530
+ break ;
1531
+ }
1532
+
1533
+ numafraginfo_cleanup :
1534
+ numafraginfo_bpf__destroy (skel_numafraginfo );
1535
+ return - err ;
1536
+ }
1494
1537
1495
1538
// ================================================== vmasnap ====================================================================
1496
1539
static void print_find_event_data (int map_fd )
0 commit comments