我想查看 Ubuntu 16.04 (在 amd64 kvm-qemu 中) 中的 ZSMALLOC 内部信息。因此我尝试通过在 .config 文件中添加 CONFIG_ZSMALLOC_STAT=y 来重新编译 ubuntu 内核。
以下是我尝试过的:
$ mkdir linux.ubuntu-16.04
$ cd linux.ubuntu-16.04
apt-get source linux-image-$(uname -r)
$ make -j8
$ make install
但是,我找不到 ZSMALLOC 调试信息。我无法在目录内找到名为 zsmalloc 的目录。/sys/kernel/debug
我该怎么做才能看到 zsmalloc 调试信息?
Result of command :
#grep -irn CONFIG_ZSMALLOC_STAT *
[12:57:13] mac@mac-qemu:~/linux.ubuntu-16.04/linux-hwe-4.8.0 $ grep -irn CONFIG_ZSMALLOC_STAT *
arch/s390/configs/default_defconfig:73:CONFIG_ZSMALLOC_STAT=y
arch/s390/configs/gcov_defconfig:69:CONFIG_ZSMALLOC_STAT=y
arch/s390/configs/performance_defconfig:69:CONFIG_ZSMALLOC_STAT=y
arch/s390/defconfig:60:CONFIG_ZSMALLOC_STAT=y
debian/build/build-generic/.config:578:CONFIG_ZSMALLOC_STAT=y
debian/build/build-generic/.config.old:9395:CONFIG_ZSMALLOC_STAT=y
debian/tmp/boot/config-4.8.17:578:CONFIG_ZSMALLOC_STAT=y
debian/linux-image-4.8.0-54-hello-generic/boot/config-4.8.0-54-hello-generic:578:CONFIG_ZSMALLOC_STAT=y
debian/hdrtmp/usr/src/linux-headers-4.8.17/.config:578:CONFIG_ZSMALLOC_STAT=y
debian/linux-headers-4.8.0-54-hello-generic/usr/src/linux-headers-4.8.0-54-hello-generic/.config:578:CONFIG_ZSMALLOC_STAT=y
debian/linux-headers-4.8.0-54-hello-generic/usr/src/linux-headers-4.8.0-54-hello-generic/.config.old:578:CONFIG_ZSMALLOC_STAT=y
debian.hwe/config/annotations:9494:CONFIG_ZSMALLOC_STAT policy<{'amd64': 'y', 'arm64': 'n', 'armhf': 'n', 'i386': 'y', 'powerpc': 'n', 'ppc64el': 'n', 's390x': 'n'}>
debian.hwe/config/config.common.ubuntu:9396:CONFIG_ZSMALLOC_STAT=y
debian.master/config/annotations:9494:CONFIG_ZSMALLOC_STAT policy<{'amd64': 'y', 'arm64': 'n', 'armhf': 'n', 'i386': 'y', 'powerpc': 'n', 'ppc64el': 'n', 's390x': 'n'}>
debian.master/config/config.common.ubuntu:9396:CONFIG_ZSMALLOC_STAT=y
debian.master/info/OVERRIDES:4:CONFIG_ZSMALLOC_STAT=y
Documentation/vm/zsmalloc.txt:36:With CONFIG_ZSMALLOC_STAT, we could see zsmalloc internal information via
include/generated/autoconf.h:1142:#define CONFIG_ZSMALLOC_STAT 1
include/config/auto.conf:1140:CONFIG_ZSMALLOC_STAT=y
mm/zsmalloc.c:163:#ifdef CONFIG_ZSMALLOC_STAT
mm/zsmalloc.c:262:#ifdef CONFIG_ZSMALLOC_STAT
mm/zsmalloc.c:579:#ifdef CONFIG_ZSMALLOC_STAT
mm/zsmalloc.c:701:#else /* CONFIG_ZSMALLOC_STAT */
答案1
您在错误的文件中编辑了配置,并以错误的方式构建了内核。Ubuntu(实际上是 Debian)更改配置和构建的方式如下:
配置应该设置在debian.master/config/config.common.ubuntu
它在那里,但被注释掉了
# CONFIG_ZSMALLOC_STAT is not set
将其更改为
CONFIG_ZSMALLOC_STAT=y
然后运行
fakeroot debian/rules clean
fakeroot debian/rules binary-generic binary-headers
编译。
除了最后一个命令之外,您还可以使用
fakeroot debian/rules DEB_BUILD_OPTIONS=parallel=8 binary-headers binary-generic
如果你想拥有 8 个并行进程(-j8 的类似物)。
另一种(可能更传统的方法)是运行
fakeroot debian/rules clean
fakeroot debian/rules editconfigs
然后选择要编辑的配置,然后转到
“处理器类型和功能 -> 压缩页面的内存分配器”并在那里启用它。