首页 新闻 会员 周边

如何给自己添加的sysctl参数设置初始值

0
[待解决问题]

我想添加一个sysctl参数,然后在内核中根据这个参数进行不同的操作,但是有一个疑问,这个参数的初始值是什么时候设置的?

我参考了net.core.bpf_jit_limit = 264241152参数,我发现这个参数的值为 264241152,这个参数我没有手动改过他,所以我去源代码中搜索了264241152这个数字,希望能借助它找到哪段代码是设置初始值,但是我发现根本搜不到。

所以我的思路断了,

因此,求助各位大佬,sysctl参数的默认值是在哪里设置呀?还是说不在源代码里?那请问在哪里呀?

wendy_ann的主页 wendy_ann | 初学一级 | 园豆:74
提问于:2024-02-27 22:29
< >
分享
所有回答(3)
0

sysctl 的配置文件是 /etc/sysctl.conf,参考园子里的博文 /etc/sysctl.conf配置文件

dudu | 园豆:30943 (高人七级) | 2024-02-28 08:07

大佬能说的再详细一点吗?我在文章没有找到哪一块可以设置初始值。还有个疑惑是,当我安装完内核的时候,我也没有设置那些参数的值,但是他就是有值,那是在哪里设置的呢?

支持(0) 反对(0) wendy_ann | 园豆:74 (初学一级) | 2024-02-28 10:28

@wendy_ann: /etc/sysctl.conf 中没有就是默认值

支持(0) 反对(0) dudu | 园豆:30943 (高人七级) | 2024-02-28 12:07
0

vim /etc/sysctl.conf
追加你的参数,就好比你列举的net.core.bpf_jit_limit = 264241152
:wq保存退出
sysctl -p刷新生效

北方姆Q | 园豆:1118 (小虾三级) | 2024-02-28 09:12

请问您是说添加新的参数是不需要改源代码的吗?我是想要添加一个变量,然后内核中根据这个变量进行相应的操作

支持(0) 反对(0) wendy_ann | 园豆:74 (初学一级) | 2024-02-28 10:14

如果我直接在.conf文件里面添加这个参数,内核是不是也不知道啊?

支持(0) 反对(0) wendy_ann | 园豆:74 (初学一级) | 2024-02-28 10:20

@wendy_ann: 添加一个什么意思,这个变量是系统默认没有的类似a.b.c=123这样?那八成不行的

支持(0) 反对(0) 北方姆Q | 园豆:1118 (小虾三级) | 2024-02-28 15:42

@北方姆Q: 对,添加一个新的sysctl变量,所以我才会问源码在哪里设置初始值

支持(0) 反对(0) wendy_ann | 园豆:74 (初学一级) | 2024-02-29 13:54

@wendy_ann: 那应该设置不了,emmmm,水平有限,回答不了了

支持(0) 反对(0) 北方姆Q | 园豆:1118 (小虾三级) | 2024-02-29 14:24
0

sysctl参数的默认值通常是在内核源代码中指定的,但不是以直接的数字形式设置的。在Linux内核中,大多数sysctl参数的默认值都是在各个子系统的初始化代码中设置的,而不是以明确的数字形式。这意味着你可能不会在源代码中找到像 net.core.bpf_jit_limit = 264241152 这样的硬编码数字。

相反,你会看到类似下面的代码片段,这里设置了参数的默认值:

c
Copy code
static int __init default_bpf_jit_limit(void)
{
return 264241152;
}
这个函数会在内核初始化过程中被调用,并返回默认的参数值。然后,在对应的地方将这个函数与对应的sysctl参数关联起来。

例如,在 net/core/sysctl_net_core.c 文件中,你可能会看到类似这样的代码:

c
Copy code
{
.procname = "bpf_jit_limit",
.data = &init_net.core.bpf_jit_limit,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &bpf_jit_limit_min,
.extra2 = &bpf_jit_limit_max
},
这段代码将 bpf_jit_limit 这个sysctl参数与对应的数据变量关联起来,并指定了一个处理函数 (proc_dointvec_minmax) 来处理用户对这个参数的读写操作。在内核初始化时,会调用 default_bpf_jit_limit 函数来获取参数的默认值,并将其赋给 init_net.core.bpf_jit_limit 这个变量。

所以,如果你想找到某个sysctl参数的默认值是如何设置的,你需要找到相应的初始化代码,查看参数与默认值之间的关联。

Technologyforgood | 园豆:5686 (大侠五级) | 2024-02-28 17:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册