为什么 lsmod 命令显示许多大小为 16384 的模块

use*_*291 1 kernel drivers

sudo lsmod在我的 Ubuntu 16.04 LTS 上运行命令,我得到一个输出,其中的一部分如下所示。

使用的模块大小
simple_lkm 16384 0
UFS 73728 0
xt_CHECKSUM 16384 1
iptable_mangle 16384 1
ipt_MASQUERADE 16384 3
nf_nat_masquerade_ipv4 16384 1 ipt_MASQUERADE
iptable_nat 16384 1
nf_nat_ipv4 16384 1 iptable_nat
nf_nat 24576 2 nf_nat_ipv4,nf_nat_masquerade_ipv4
nf_conntrack_ipv4 16384 2
nf_defrag_ipv4 16384 1 nf_conntrack_ipv4
xt_conntrack 16384 1
nf_conntrack 98304 5 nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
ipt_REJECT 16384 2
nf_reject_ipv4 16384 1 ipt_REJECT
xt_tcpudp 16384 6
桥 114688 0
stp 16384 1 桥
llc 16384 2 stp,bridge
ebtable_filter 16384 0
ebtables 24576 1 ebtable_filter
ip6table_filter 16384 0
ip6_tables 20480 1 ip6table_filter
iptable_filter 16384 1
ip_tables 20480 3 iptable_filter,iptable_mangle,iptable_nat
x_tables 24576 11 ip6table_filter,xt_CHECKSUM,ip_tables,xt_tcpudp,ipt_MASQUERADE,xt_conntrack,iptable_filter,ebtables,ipt_REJECT,iptable_mangle,ip6_tables
drbg 28672 1
ansi_cprng 16384 0
ctr 16384 2
ccm 20480 2
binfmt_misc 20480 1
gpio_ich 16384 0
戴尔WMI 16384 0
sparse_keymap 16384 1 dell_wmi
Dell_rbtn 16384 0
戴尔笔记本电脑 24576 0
dcdbas 16384 1 戴尔笔记本电脑
Dell_smm_hwmon 16384 0
英伟达 10375168 52
核心温度 16384 0
kvm_intel 167936 0
kvm 483328 1 kvm_intel
snd_hda_codec_hdmi 49152 1
snd_hda_codec_idt 53248 1
irqbypass 16384 1 kvm
snd_hda_codec_generic 69632 1 snd_hda_codec_idt
snd_hda_intel 36864 3
snd_hda_codec 118784 4 snd_hda_codec_hdmi,snd_hda_codec_idt,snd_hda_codec_generic,snd_hda_intel
snd_hda_core 61440 5 snd_hda_codec_hdmi,snd_hda_codec_idt,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel
snd_hwdep 16384 1 snd_hda_codec
输入 LED 16384 0
...

现在,我很好奇许多模块的大小是否为16384.

Rav*_*ina 5

这些不是模块的大小,要获得这些模块的实际大小,您可以运行以下内容:

lsmod | grep 16384 | cut -f1 -d ' ' | xargs modinfo | grep filename |\
 grep -o '/.*' | xargs stat -c "%s - %n"
Run Code Online (Sandbox Code Playgroud)

哪些输出(以字节为单位):

...
19086 - '/lib/modules/4.4.0-78-generic/kernel/sound/core/seq/snd-seq-midi.ko'
21470 - '/lib/modules/4.4.0-78-generic/kernel/sound/core/snd-hwdep.ko'
15798 - '/lib/modules/4.4.0-78-generic/kernel/sound/core/seq/snd-seq-dev
...
Run Code Online (Sandbox Code Playgroud)

“16384”是该模块使用的内存大小(以字节为单位),等于“16KiB”。据我所知,这只是一个默认数字,也是可以使用的最小值,如果仔细观察,您会发现没有大小小于 16384 的模块。

我想这个最小值与PTHREAD_STACK_MIN运行有关:

getconf PTHREAD_STACK_MIN
Run Code Online (Sandbox Code Playgroud)

你会得到:

16384
Run Code Online (Sandbox Code Playgroud)

这里

堆栈大小属性确定将为使用线程属性对象 attr 创建的线程分配的最小大小(以字节为单位)。

阅读更多