Skip to content Skip to main navigation Skip to footer

Linux:戴文的Linux内核专题:07 配置内核 (3)

OK,我们还继续配置内核。还有更多功能等待着去配置。

Linux:戴文的Linux内核专题:07 配置内核 (3)
Linux:戴文的Linux内核专题:07 配置内核 (3)

下一个问题(Enable ELF core dumps (ELF_CORE))询问的是内核是否可以生成内核转储文件。这会使内核变大4KB。所以我选择了”no”。

注意:内核转储文件(内存或者系统的转储)是程序崩溃前已记录的状态。内核转储是用来调试问题的。这个转储文件的格式是ELF(Executable and Linkable Format )。

下面可以启用PC扬声器(Enable PC-Speaker support (PCSPKR_PLATFORM))。大多数计算机用户拥有并使用扬声器,所以这个启用它。

虽然下面的特性会增加内核的大小(Enable full-sized data structures for core (BASE_FULL))(启用完全大小的内核数据结构),但性能也随之增加。所以我选择”yes”。

为了使内核可以运行基于glibc的程序,必须启用FUTEX(Enable futex support (FUTEX))。这个特性启用了快速用户空间互斥锁(Fast Userspace muTEXes)。

注意:glibc(GNU C Library)是由GNU实现的标准C库。

注意:FUTEX (fast userspace mutex)是用来防止两个线程访问同一个不能被多个线程使用的共享资源。

下一个问题(Enable eventpoll support (EPOLL))可以通过回答”no”来禁用epoll系统调用。然而,为了含有epoll系统调用,我选择了”yes”。epoll是一种I/O事件通知系统。

为了收到来自文件描述符的信号,我们启用signalfd系统调用(Enable signalfd() system call (SIGNALFD)。

如果启用这个特性(Enable timerfd() system call (TIMERFD)),它允许程序使用定时器事件获取文件描述符。

我们现在的配置必须启用eventfd系统调用(Enable eventfd() system call (EVENTFD))。它默认启用访问共享内存文件系统(Use full shmem filesystem (SHMEM)。共享内存文件系统是一种虚拟内存文件系统。

下一个问题是”Enable AIO support (AIO)”。这个特性启用了线程化程序使用的POSIX异步I/O。

注意:异步I/O用来处理输入/输出,它允许线程在传输完成前就完成处理。

如果你正在给一个嵌入式系统配置一个内核,那么问题“Embedded system (EMBEDDED)”可以选择”yes”。否则就像我一样选择”no”。

注意:嵌入式系统是运行在一个更大的电子系统的实时计算机。

现在,我们可以配置内核性能事件和计时器了。配置工具没有给开发者选择,直接启用了事件和计数器(Kernel performance events and counters (PERF_EVENTS))(内核性能事件和计数器)。这是一个重要特性。

接下来,我们可以禁用另外一个调试特性(ebug: use vmalloc to back perf mmap() buffers (DEBUG_PERF_USE_VMALLOC))。

如果启用了VM事件计数器,那么事件计数就会显示在/proc/vmstat(Enable VM event counters for /proc/vmstat (VM_EVENT_COUNTERS))。如果禁用了事件计数就不会显示,/proc/vmstat只会显示内存页计数。

为了更好地支持PCI芯片,(Enable PCI quirk workarounds (PCI_QUIRKS))回答yes。这会启用对PCI芯片的怪异行为和bug的临时解决方案。

下面一个调试特性可以像我一样禁用掉(Enable SLUB debugging support (SLUB_DEBUG))。这个特性会耗费很多空间并且会禁用用于调试内核的SLB sysfs。如果这个特性被禁用,那么/sys/slab就不会存在并且系统上也不再支持缓冲验证。

堆随机化是一个让利用堆漏洞更加困难的特性(Disable heap randomization (COMPAT_BRK))。然而我们不应该去启用它,因为任何基于libc5的软件都无法工作在这个系统上!只有我们有特别的理由这么做或者如果你不会使用基于libc5的软件时才去启用它。我禁用了这个特性。当编译一个通用的内核时,开发这会希望禁用这个特性。

接下来必须选择一个SLAB分配器。SLAB分配器是一个没有碎片且有效率地将内核对象放置在内存中的内存管理系统。默认选择是”2″。

Choose SLAB allocator

1. SLAB (SLAB)

> 2. SLUB (Unqueued Allocator) (SLUB)

3. SLOB (Simple Allocator) (SLOB)

choice[1-3?]: 2

为了支持扩展性能支持,(Profiling support (PROFILING))回答”yes”。

下一个问题让开发者选择是否启用OProfile系统。它可以禁用、启用或者添加为一个模块在需要时载入。我选择禁用这个特性。

Kprobes允许用户捕捉几乎任意的内核地址去启动一个回调函数。这是一个可以像我一样禁用的调试工具(Kprobes (KPROBES))。

这个优化特性可以启用(Optimize very unlikely/likely branches (JUMP_LABEL))(优化非常近似/不近似的分支)。这使分支预判更加简单并可以减小开销。

配置工具启用了一个实验性特性”透明用户空间探针”(Transparent user-space probes (EXPERIMENTAL) (UPROBES))。不过不要担心,系统可以很好工作,并不是所有的实验性特性是不稳定或者坏的。

接下来,我们会被询问基于gcov的内核分析(Enable gcov-based kernel profiling (GCOV_KERNEL))。这可以被禁用。

来源:https://linux.cn/article-2223-1.html

0 Comments

There are no comments yet

Leave a comment

Your email address will not be published.