LINUX内核参数优化

LINUX内核参数优化
LINUX内核参数优化

linux内核参数优化

Sysctl命令及linux内核参数调整

一、Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现。

命令格式:

sysctl[-n][-e]-w variable=value

sysctl[-n][-e]-p(default/etc/sysctl.conf)

sysctl[-n][-e]–a

常用参数的意义:

-w临时改变某个指定参数的值,如

#sysctl-w net.ipv4.ip_forward=1

-a显示所有的系统参数

-p从指定的文件加载系统参数,默认从/etc/sysctl.conf文件中加载,如:#echo1>/proc/sys/net/ipv4/ip_forward

#sysctl-w net.ipv4.ip_forward=1

以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了#service network restart

命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctl.conf 文件,将net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1

二、linux内核参数调整:linux内核参数调整有两种方式

方法一:修改/proc下内核参数文件内容,不能使用编辑器来修改内核参数文件,理由是由于内核随时可能更改这些文件中的任意一个,另外,这些内核参数文件都是虚拟文件,实际中不存在,因此不能使用编辑器进行编辑,而是使用echo 命令,然后从命令行将输出重定向至/proc下所选定的文件中。如:将timeout_timewait参数设置为30秒:

#echo30>/proc/sys/net/ipv4/tcp_fin_timeout

参数修改后立即生效,但是重启系统后,该参数又恢复成默认值。因此,想永久更改内核参数,需要修改/etc/sysctl.conf文件

方法二.修改/etc/sysctl.conf文件。检查sysctl.conf文件,如果已经包含需要修改的参数,则修改该参数的值,如果没有需要修改的参数,在sysctl.conf文件中添加参数。如:

net.ipv4.tcp_fin_timeout=30

保存退出后,可以重启机器使参数生效,如果想使参数马上生效,也可以执行如下命令:

#sysctl-p

三、sysctl.conf文件中参数设置及说明

proc/sys/net/core/wmem_max

最大socket写buffer,可参考的优化值:873200

/proc/sys/net/core/rmem_max

最大socket读buffer,可参考的优化值:873200

/proc/sys/net/ipv4/tcp_wmem

TCP写buffer,可参考的优化值:8192436600873200

/proc/sys/net/ipv4/tcp_rmem

TCP读buffer,可参考的优化值:32768436600873200

/proc/sys/net/ipv4/tcp_mem

同样有3个值,意思是:

net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力.

net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.

net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket.

上述内存单位是页,而不是字节.可参考的优化值是:78643210485761572864

/proc/sys/net/core/netdev_max_backlog

进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000

/proc/sys/net/core/somaxconn

listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.可调整到256.

/proc/sys/net/core/optmem_max

socket buffer的最大初始化值,默认10K

/proc/sys/net/ipv4/tcp_max_syn_backlog

进入SYN包的最大请求队列.默认1024.对重负载服务器,可调整到2048

/proc/sys/net/ipv4/tcp_retries2

TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,尽早释放内核资源.

/proc/sys/net/ipv4/tcp_keepalive_time

/proc/sys/net/ipv4/tcp_keepalive_intvl

/proc/sys/net/ipv4/tcp_keepalive_probes

这3个参数与TCP KeepAlive有关.默认值是:

tcp_keepalive_time=7200seconds(2hours)

tcp_keepalive_probes=9

tcp_keepalive_intvl=75seconds

意思是如果某个TCP连接在idle2个小时后,内核才发起probe.如果probe9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大.可调整到:

/proc/sys/net/ipv4/tcp_keepalive_time1800

/proc/sys/net/ipv4/tcp_keepalive_intvl30

/proc/sys/net/ipv4/tcp_keepalive_probes3

/proc/sys/net/ipv4/ip_local_port_range

指定端口范围的一个配置,默认是3276861000,已够大.

net.ipv4.tcp_syncookies=1

表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse=1

表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle=1

表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout=30

表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

net.ipv4.tcp_keepalive_time=1200

表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。

net.ipv4.ip_local_port_range=102465000

表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024

到65000。

net.ipv4.tcp_max_syn_backlog=8192

表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。

net.ipv4.tcp_max_tw_buckets=5000

表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT 套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

Linux上的NAT与iptables

谈起Linux上的NAT,大多数人会跟你提到iptables。原因是因为iptables是目前在linux上实现NAT的一个非常好的接口。它通过和内核级直接操作网络包,效率和稳定性都非常高。这里简单列举一些NAT相关的iptables实例命令,可能对于大多数实现有多帮助。

这里说明一下,为了节省篇幅,这里把准备工作的命令略去了,仅仅列出核心步骤命令,所以如果你单单执行这些没有实现功能的话,很可能由于准备工作没

有做好。如果你对整个命令细节感兴趣的话,可以直接访问我的《如何让你的Linux网关更强大》系列文章,其中对于各个脚本有详细的说明和描述。

#案例1:实现网关的MASQUERADE

#具体功能:内网网卡是eth1,外网eth0,使得内网指定本服务做网关可以访问外网

EXTERNAL="eth0"

INTERNAL="eth1"

#这一步开启ip转发支持,这是NAT实现的前提

echo1>/proc/sys/net/ipv4/ip_forward

iptables-t nat-A POSTROUTING-o$EXTERNAL-j MASQUERADE

#案例2:实现网关的简单端口映射

#具体功能:实现外网通过访问网关的外部ip:80,可以直接达到访问私有网络内的一台主机192.168.1.10:80效果

LOCAL_EX_IP=11.22.33.44#设定网关的外网卡ip,对于多ip情况,参考《如何让你的Linux网关更强大》系列文章

LOCAL_IN_IP=192.168.1.1#设定网关的内网卡ip

INTERNAL="eth1"#设定内网卡

#这一步开启ip转发支持,这是NAT实现的前提

echo1>/proc/sys/net/ipv4/ip_forward

#加载需要的ip模块,下面两个是ftp相关的模块,如果有其他特殊需求,也需要加进来

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

#这一步实现目标地址指向网关外部ip:80的访问都吧目标地址改成

192.168.1.10:80

iptables-t nat-A PREROUTING-d$LOCAL_EX_IP-p tcp--dport80-j DNAT --to192.168.1.10

#这一步实现把目标地址指向192.168.1.10:80的数据包的源地址改成网关自己的本地ip,这里是192.168.1.1

iptables-t nat-A POSTROUTING-d192.168.1.10-p tcp--dport80-j SNAT --to$LOCAL_IN_IP

#在FORWARD链上添加到192.168.1.10:80的允许,否则不能实现转发

iptables-A FORWARD-o$INTERNAL-d192.168.1.10-p tcp--dport80-j ACCEPT

#通过上面重要的三句话之后,实现的效果是,通过网关的外网ip:80访问,全部转发到内网的192.168.1.10:80端口,实现典型的端口映射

#特别注意,所有被转发过的数据都是源地址是网关内网ip的数据包,所以192.168.1.10上看到的所有访问都好像是网关发过来的一样,而看不到外部ip #一个重要的思想:数据包根据“从哪里来,回哪里去”的策略来走,所以不必担心回头数据的问题

#现在还有一个问题,网关自己访问自己的外网ip:80,是不会被NAT到

192.168.1.10的,这不是一个严重的问题,但让人很不爽,解决的方法如下:iptables-t nat-A OUTPUT-d$LOCAL_EX_IP-p tcp--dport80-j DNAT--to 192.168.1.10

获取系统中的NAT信息和诊断错误

了解/proc目录的意义

在Linux系统中,/proc是一个特殊的目录,proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它包含当前系统的一些参数(variables)和状态(status)情况。它以文件系统的方式为访问系统内核数据的操作提供接口

通过/proc可以了解到系统当前的一些重要信息,包括磁盘使用情况,内存使用状况,硬件信息,网络使用情况等等,很多系统监控工具(如HotSaNIC)都通过/proc目录获取系统数据。

另一方面通过直接操作/proc中的参数可以实现系统内核参数的调节,比如是否允许ip转发,syn-cookie是否打开,tcp超时时间等。

获得参数的方式:

第一种:cat/proc/xxx/xxx,如cat/proc/sys/net/ipv4/conf/all/rp_filter 第二种:sysctl xxx.xxx.xxx,如sysctl net.ipv4.conf.all.rp_filter

改变参数的方式:

第一种:echo value>/proc/xxx/xxx,如echo1>

/proc/sys/net/ipv4/conf/all/rp_filter

第二种:sysctl[-w]variable=value,如sysctl[-w]

net.ipv4.conf.all.rp_filter=1

以上设定系统参数的方式只对当前系统有效,重起系统就没了,想要保存下来,需要写入/etc/sysctl.conf文件中

通过执行man5proc可以获得一些关于proc目录的介绍

查看系统中的NAT情况

和NAT相关的系统变量

/proc/slabinfo:内核缓存使用情况统计信息(Kernel slab allocator statistics)

/proc/sys/net/ipv4/ip_conntrack_max:系统支持的最大ipv4连接数,默认65536(事实上这也是理论最大值)

/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established已建立的tcp连接的超时时间,默认432000,也就是5天

和NAT相关的状态值

/proc/net/ip_conntrack:当前的前被跟踪的连接状况,nat翻译表就在这里体现(对于一个网关为主要功能的Linux主机,里面大部分信息是NAT翻译表)/proc/sys/net/ipv4/ip_local_port_range:本地开放端口范围,这个范围同样会间接限制NAT表规模

#1.查看当前系统支持的最大连接数

cat/proc/sys/net/ipv4/ip_conntrack_max

#值:默认65536,同时这个值和你的内存大小有关,如果内存128M,这个值最大8192,1G以上内存这个值都是默认65536

#影响:这个值决定了你作为NAT网关的工作能力上限,所有局域网内通过这台网关对外的连接都将占用一个连接,如果这个值太低,将会影响吞吐量

#2.查看tcp连接超时时间

cat

/proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

#值:默认432000(秒),也就是5天

#影响:这个值过大将导致一些可能已经不用的连接常驻于内存中,占用大量链接资源,从而可能导致NAT ip_conntrack:table full的问题

#建议:对于NAT负载相对本机的NAT表大小很紧张的时候,可能需要考虑缩小这个值,以尽早清除连接,保证有可用的连接资源;如果不紧张,不必修改

#3.查看NAT表使用情况(判断NAT表资源是否紧张)

#执行下面的命令可以查看你的网关中NAT表情况

cat/proc/net/ip_conntrack

#4.查看本地开放端口的范围

cat/proc/sys/net/ipv4/ip_local_port_range

#返回两个值,最小值和最大值

#下面的命令帮你明确一下NAT表的规模

wc-l/proc/net/ip_conntrack

#或者

grep ip_conntrack/proc/slabinfo|grep-v expect|awk'{print$1',' $2;}'

#下面的命令帮你明确可用的NAT表项,如果这个值比较大,那就说明NAT表资源不紧张

grep ip_conntrack/proc/slabinfo|grep-v expect|awk'{print$1',' $3;}'

#下面的命令帮你统计NAT表中占用端口最多的几个ip,很有可能这些家伙再做一些bt的事情,嗯bt的事情:-)

cat/proc/net/ip_conntrack|cut-d''-f10|cut-d'='-f2|sort |uniq-c|sort-nr|head-n10

#上面这个命令有点瑕疵cut-d''-f10会因为命令输出有些行缺项而造成统计偏差,下面给出一个正确的写法:

cat/proc/net/ip_conntrack|perl-pe s/^\(.*?\)src/src/g|cut-d'' -f1|cut-d'='-f2|sort|uniq-c|sort-nr|head-n10

Linux内核崩溃原因分析及错误跟踪技术

Linux内核崩溃原因分析及错误跟踪技术 随着嵌入式Linux系统的广泛应用,对系统的可靠性提出了更高的要求,尤其是涉及到生命财产等重要领域,要求系统达到安全完整性等级3级以上[1],故障率(每小时出现危险故障的可能性)为10-7以下,相当于系统的平均故障间隔时间(MTBF)至少要达到1141年以上,因此提高系统可靠性已成为一项艰巨的任务。对某公司在工业领域14 878个控制器系统的应用调查表明,从2004年初到2007年9月底,随着硬软件的不断改进,根据错误报告统计的故障率已降低到2004年的五分之一以下,但查找错误的时间却增加到原来的3倍以上。 这种解决问题所需时间呈上升的趋势固然有软件问题,但缺乏必要的手段以辅助解决问题才是主要的原因。通过对故障的统计跟踪发现,难以解决的软件错误和从发现到解决耗时较长的软件错误都集中在操作系统的核心部分,这其中又有很大比例集中在驱动程序部分[2]。因此,错误跟踪技术被看成是提高系统安全完整性等级的一个重要措施[1],大多数现代操作系统均为发展提供了操作系统内核“崩溃转储”机制,即在软件系统宕机时,将内存内容保存到磁盘[3],或者通过网络发送到故障服务器[3],或者直接启动内核调试器[4]等,以供事后分析改进。 基于Linux操作系统内核的崩溃转储机制近年来有以下几种: (1) LKCD(Linux Kernel Crash Dump)机制[3]; (2) KDUMP(Linux Kernel Dump)机制[4]; (3) KDB机制[5]; (4) KGDB机制[6]。 综合上述几种机制可以发现,这四种机制之间有以下三个共同点: (1) 适用于为运算资源丰富、存储空间充足的应用场合; (2) 发生系统崩溃后恢复时间无严格要求; (3) 主要针对较通用的硬件平台,如X86平台。 在嵌入式应用场合想要直接使用上列机制中的某一种,却遇到以下三个难点无法解决: (1) 存储空间不足 嵌入式系统一般采用Flash作为存储器,而Flash容量有限,且可能远远小于嵌入式系统中的内存容量。因此将全部内存内容保存到Flash不可行。

linux 内核参数修改

linux 内核参数修改 配置 Linux 内核参数(2种方法),修改后不用重启动更新: /sbin/sysctl -p 第一种:打开/etc/sysctl.conf 复制如下内容 kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=262144 net.core.wmem_default=262144 net.core.rmem_max=262144 net.core.wmem_max=262144 第二种:打开终端 cat >> /etc/sysctl.conf< kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000 net.core.rmem_default=262144 net.core.wmem_default=262144 net.core.rmem_max=262144 net.core.wmem_max=262144 EOF 这里,对每个参数值做个简要的解释和说明。 (1)shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。(2)shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。 (3)shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。(共享内存段的数量,以页为主,每个页是4K) (4)sem:该参数表示设置的信号量。一般大于maxproc的一点就行了。 (5)file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。 修改好内核以后,执行下面的命令使新的配置生效。 [root @linux1 /root]# /sbin/sysctl -p 以 root 用户身份运行以下命令来验证您的设置: /sbin/sysctl -a | grep shm /sbin/sysctl -a | grep sem /sbin/sysctl -a | grep file-max /sbin/sysctl -a | grep ip_local_port_range 例如: # /sbin/sysctl -a | grep shm kernel.shmmni = 4096 kernel.shmall = 2097152 kernel.shmmax = 2147483648

关于Linux 内核中五个主要子系统的介绍

关于Linux 内核中五个主要子系统的介绍 发布时间:2008.01.02 06:23来源:赛迪网作者:sixth 1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。 2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。 3.虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。 5.进程间通讯(IPC) 支持进程间各种通信机制。处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。

Linux内核结构详解教程

Linux内核结构详解教程 ─────Linux内核教程 linux内核就像人的心脏,灵魂,指挥中心。 内核是一个操作系统的核心,它负责管理系统的进程,内存,设备驱动程序,文件和网络系统,决定着系统的性能和稳定性。内核以独占的方式执行最底层任务,保证系统正常运行。协调多个并发进程,管理进程使用的内存,使它们相互之间不产生冲突,满足进程访问磁盘的请求等等. 严格说Linux并不能称做一个完整的操作系统.我们安装时通常所说的Linux,是有很多集合组成的.应称为GNU/Linux. 一个Linux内核很少1.2M左右,一张软盘就能放下. 内容基础,语言简短简洁 红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章及教程基本能满足不同水平的朋友学习。 红联Linux门户: https://www.360docs.net/doc/737978101.html, 红联Linux论坛: https://www.360docs.net/doc/737978101.html,/bbs 红联Linux 论坛大全,所有致力点都体现在这 https://www.360docs.net/doc/737978101.html,/bbs/rf/linux/07.htm

目录 Linux内核结构详解 Linux内核主要五个子系统详解 各个子系统之间的依赖关系 系统数据结构 Linux的具体结构 Linux内核源代码 Linux 内核源代码的结构 从何处开始阅读源代码 海量Linux技术文章

Linux内核结构详解 发布时间:2006-11-16 19:05:29 Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。

Linux内核主要五个子系统详解 发布时间:2006-11-16 19:05:54 1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。 2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。 3.虚拟文件系统(VirtualFileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。 5.进程间通讯(IPC) 支持进程间各种通信机制。 处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。

Linux之TCPIP内核参数优化

Linux之TCPIP内核参数优化 /proc/sys/net目录 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),例如下面这些重要的参数: 参数(路径+文件) 描述 默认值 优化值 /proc/sys/net/core/rmem_default 默认的TCP数据接收窗口大小(字节)。 229376 256960 /proc/sys/net/core/rmem_max 最大的TCP数据接收窗口(字节)。 131071 513920 /proc/sys/net/core/wmem_default 默认的TCP数据发送窗口大小(字节)。

229376 256960 /proc/sys/net/core/wmem_max 最大的TCP数据发送窗口(字节)。 131071 513920 /proc/sys/net/core/netdev_max_backlog 在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。 1000 2000 /proc/sys/net/core/somaxconn 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。 128 2048 /proc/sys/net/core/optmem_max 表示每个套接字所允许的最大缓冲区的大小。

20480 81920 /proc/sys/net/ipv4/tcp_mem 确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的BDP 可以增大这些值(注意,其单位是内存页而不是字节)。 94011 125351 188022 131072 262144 524288 /proc/sys/net/ipv4/tcp_rmem 为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数;第二个值是默认值(该值会被rmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是接收缓冲区空间的最大字节数(该值会被rmem_max覆盖)。 4096 87380 4011232 8760 256960 4088000 /proc/sys/net/ipv4/tcp_wmem 为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数;第二个值是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)。 4096 16384 4011232

LINUX内核源文件介绍以及头文件介绍

LINUX 内核源文件介绍以及头文件介绍 LINUX 内核源文件介绍以及头文件介绍.txt两人之间的感情就像织毛衣,建立的时候一针一线,小心而漫长,拆除的时候只要轻轻一拉。。。。*******************LINUX 内核(0.11)源文件介绍****************** 1、内核源文件放置目录: | |————boot 系统引导汇编程序目录 | |————fs 文件系统目录 | |————include 头文件目录 | |————init 内核初始化程序目录 | |————kernel 内存进程调度、信号处理、系统调用等程序的目录 | |————lib 内核库函数目录 | |————mm 内存管理程序目录 | |————tools 生成内核Image文件的工具程序目录 | |————Makefile文件 | 2、引导启动程序目录boot 包含3个汇编语言文件,是内核源文件中最先被编译的程序。 功能:当计算机家电时引导内核启动,将内核代码加载到内存中,并完成系统初始化工作。 boot | |————bootsect.s 磁盘引导块程序,编译后会驻留在磁盘的第一个扇区中| |————setup.s 读取机器的硬件配置参数,并把内核模式system移动到适当的内存位置处 |

|————head.s 会被编译连接在system模块的最前部分,主要进行硬件设备的探测配置和内存管理页面的配置工作 | 3、文件系统目录fs 包含17个C语言程序 fs | |——buffer.c 管理高速缓冲区 | |——file_table.c 在0.11仅定义了一个文件句柄(描述符)结构数组 | |——ioctl.c 将引用kernel/chr_dev/tty.c中的函数,实现字符设备的IO 控制功能 | |——exec.c 主要包含一个执行程序函数do_execve() | |——fcntl.c 实现文件I/O控制的系统调用函数 | |——read_write.c 实现文件读/写和定位的三个系统调用函数 | |——stat.c 实现了两个获取文件状态的系统调用函数 | |——open.c 主要包含实现修改文件属性和创建与关闭文件的系统调用函数 | |——char_dev.c 主要包含字符设备读写函数rw_char() | |——pipe.c 包含管道读写函数和创建管道的系统调用函数 | |——file_dev.c 包含基于i节点和描述符结构的文件读写函数。 | |——namei.c 主要包括文件系统中目录名和文件名的操作函数和系统调用函数 | |——block_dev.c 包含块数据读和写函数 | |——inode.c 包含针对文件系统i节点操作的函数 | |——truncate.c 用于在删除文件时释放文件所占用的设备数据空间 | |——bitmap.c 用于处理文件系统中i节点和逻辑数据块的位图 |

(完整版)linux内核技术

一、教学目的 SMP、多核系统、高性能浮点处理器和新型总线等创新技术,带动操作系统不断发展。本课程使硕士生了解linux的基本原理和结构特征,提高应用现代操作系统的水平、能开发特定的内核功能、设备驱动程序和复杂应用软件的能力。 二、教学内容与要求 1掌握处理器在进程地址空间上的三种运行位置,了解内核编程不能使用C库函数和FPU,以及可能产生内存故障、核心栈溢出和四种内核竞争情形的原因。(2学时)2熟悉进程描述符的组织,进程上下文和进程状态转换,和fork,exec,wait,exit,clone,linux线程和内核线程的实现原理和应用。了解COW和避免出现孤儿进程技术。 (4小时) 3介绍支持SMP的O(1)调度,用户和内核抢占和进程上下文切换,了解优先级复算,睡眠和唤醒机制,SMP的负载均衡。(4小时) 4掌握在x86体系结构上系统调用的具体实现原理,接口参数传递,用户地址空间和核心地址空间之间的数据传输,和增加新的系统功能的方法。(2小时)5熟悉在x86体系结构上Linux中断和异常的处理原理,中断注册、共享、控制,和中断上下文的意义,中断和设备驱动程序的关系,以及设备驱动程序结构和用户接口。 (4小时) 6中断处理程序被分解为top half和bottom half的原因,介绍linux的softirq,tasklet,ksoftirqd和work queue,分析进程与top half,bottom half的竞争情形和同步。(4小时)7掌握内核同步原理和方法:原子操作,自旋锁,(读—写)信号量,完成变量,bkl,seqlock和延迟内核抢占。了解指令“路障”。(4小时) 8介绍系统时钟和硬件定时器,单处理器和多处理器上的linux计时体系结构,定时的时间插补原理,单处理器和多处理器上的时钟中断处理,动态定时器的数据结构和算法原理,定时器竞争情形,延迟函数。Time,gettimeofday,adjtimex,setitimer,alarm 的实现原理和应用。(4小时) 9熟悉进程地址空间的区和页,分配和释放物理页,物理地址与逻辑地址、虚地址之间的映射,slub分配原理和方法,高端物理内存的映射。(4小时) 10介绍VFS原理,超级块,inode结构和方法,dentry结构和方法,file结构和方法,以及进程打开文件表,linux中的文件系统。(2小时) 11讲解块设备缓冲,bio结构,I/O请求队列,和有最终期限的块I/O调度算法。(2小时) 12熟悉进程地址空间的分区,mm_struct结构,vm_area_struct结构和操作,,进程的页表文件映射接口mmap原理和方法。(2小时) 13熟悉页cache和radix_tree,缓冲区cache,和pdflush内核线程原理。(2小时) 三、教学方式 教学方式:课堂讲授 考试方式:堂上考试、考查都采用笔试。

Linux kernel内核升级全过程,教你一次成功

序言 由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。没想到这一弄就花了两天时间( 反复装系统,辛苦啊~~),总算把Linux系统从2.4.20-8内核成功升级到了2.6.18内核。 网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多 文章在转载过程中命令行都有错误。刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。 现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统 ,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享 ~~! 一、准备工作 首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。 启动Linux系统,并用根用户登录,进入终端模式下。 1、查看Linux内核版本 # uname -a 如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是 2.4.x,那恭喜你,闯关通过,赶快进行下一步。 2、下载2.6内核源码 下载地址:https://www.360docs.net/doc/737978101.html,/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 3、下载内核升级工具 (1)下载module-init-tools-3.2.tar.bz2 https://www.360docs.net/doc/737978101.html,/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2 (2)下载mkinitrd-4.1.18-2.i386.rpm https://www.360docs.net/doc/737978101.html,/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm (3)下载lvm2-2.00.25-1.01.i386.rpm https://www.360docs.net/doc/737978101.html,/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm (4)下载device-mapper-1.00.19-2.i386.rpm https://www.360docs.net/doc/737978101.html,/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm (2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请到https://www.360docs.net/doc/737978101.html,/guestbook留下你的邮箱,我给你发过去)

Linux设置内核参数的方法

Linux设置内核参数的方法 1内核参数的查看方法 使用“sysctl -a”命令可以查看所有正在使用的内核参数。内核参数比较多(一般多达500项),按照前缀主要分为以下几大类:net.ipv4、net.ipv6、net.core、vm、fs、dev.parport、dev.cdrom 、dev.raid、kernel等等。相同的linux,安装的组件和使用的方式不一样,正在使用的内核参数是不一样的。 所有的内核参数的说明文档是放到/usr/src/linux/Documentation/sysctl中的,如果想知道对内核参数的说明,可以到该目录下查看相应的说明文档。 2内核参数的的设置方法 由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。也可以通过文件的方式进行设置。下面就介绍这两种修改方法。 2.1命令设置的方式 可以用两种方法实现。 1、使用“sysctl -w 参数名=值”的方式 假设我们把net.ipv4.ip_forward的值修改为1,使用命令“sysctl -w net.ipv4.ip_forward=1”。 2、修改内核参数对应的proc文件 内核参数位于/proc/sys/之下,参数名称是以文件所在的路径,并将“/”以“.”来取代。举例来说,/proc/sys/net/ip_forward的参数名称为net.ipv4.ip_forward。 同样把net.ipv4.ip_forward的值修改为1,使用命令“echo “1”> /proc/sys/net/ipv4/ip_forward”。 注意,这里proc文件跟普通的文件不一样。一般一个文件用echo写入内容之后,会变成一个文本文件,但echo修改proc文件之后还是个空文件。 2.2文件设置的方式 更改的内核参数默认保存在/etc/sysctl.conf文件中。修改的时候可以直接用vi编辑sysctl.conf文件,增加要修改的内核参数内容,修改的格式为:参数名=值。例如,把net.ipv4.ip_forward的值修改为1,在sysctl.conf中增加下面这行内容:net.ipv4.ip_forward=1 文件修改好后,进行保存。然后使用“sysctl -p 配置文件名”来使配置生效,如果配置文件是默认的,可以不用输配置文件名,即使用“sysctl -p”。 通过文件设置的方式修改的内核参数是在系统重启后将失效(我之前认为修改后的内核参数放在文件中,系统启动的时候会读这个文件,重启后设置应该不会失效。但经过验证,一般会失效,但如果把将默认的boot.sysctl服务打开,所以系统启动时就会执行这个文件的设置)。把我们修改参数的命令写入启动执行脚本文件里/etc/rc.local,这样系统重启后配置就不会失效。 文件方式的好处是内核参数设置的值可以用文件保留下来,调用“sysctl -p”可以使文

Linux内核目录文件简介

Linux V0.11目录文件简介 ●Makefile文件:该文件是编译辅助工具软件make的参数配置文件。 ●boot目录:功能是当计算机加电时引导内核启动,将内核代码加载到内存中,并做一些进入入32位保护运行方式前的系统初始化工作。 ①Bootsect.s:磁盘引导块程序,驻留磁盘第一个扇区。0x7C00 ②Setup.s:读取机器的硬件配置参数,并把内核模块system移动到适当的内存位置处。 ③Head.s:被编译连接在system模块的最前部分,主要进行硬件设备的探测设置和内存管理页面的初始设置工作。 ●fs目录:文件系统实现程序的目录。 1、file_table.c文件中,目前仅定义了一个文件句柄(描述符)结构数组。 2、ioctl.c文件将引用kernel/chr_dev/tty.c中的函数,实现字符设备的io控制功能。 3、exec.c程序主要包含一个执行程序函数do_execve(),它是所有exec()函数簇中的主要函数。 4、fcntl.c程序用于实现文件i/o控制的系统调用函数。 5、read_write.c程序用于实现文件读/写和定位三个系统调用函数。 6、stat.c程序中实现了两个获取文件状态的系统调用函数。 7、open.c程序主要包含实现修改文件属性和创建与关闭文件的系统调用函数。 8、char_dev.c主要包含字符设备读写函数rw_char()。 9、pipe.c程序中包含管道读写函数和创建管道的系统调用。 10、file_dev.c程序中包含基于i节点和描述符结构的文件读写函数。 11、namei.c程序主要包括文件系统中目录名和文件名的操作函数和系统调用函数。 12、block_dev.c程序包含块数据读和写函数。 13、inode.c程序中包含针对文件系统i节点操作的函数。 14、truncate.c程序用于在删除文件时释放文件所占用的设备数据空间。 15、bitmap.c程序用于处理文件系统中i节点和逻辑数据块的位图。 16、super.c程序中包含对文件系统超级块的处理函数。 17、buffer.c程序主要用于对内存高速缓冲区进行处理。 ·虚框中的ll_rw_block是块设备的底层读函数,它并不在fs目录中,而是 kernel/blk_dev/ll_rw_block.c中的块设备读写驱动函数。放在这里只是让我们清楚的看到,文件系统对于块设备中数据的读写,都需要通过高速缓冲区与块设备的驱动程序 (ll_rw_block())来操作来进行,文件系统程序集本身并不直接与块设备的驱动程序打交道。

linux内核是什么意思

千锋教育https://www.360docs.net/doc/737978101.html, 精品课程 全程面授 千锋教育-中国IT 职业教育领先品牌 linux 培训学院哪家好 Linux 是常常用来形容整个基于Linux 内核,并且使用工程各种工具和数据库的操作系统。 很受欢迎,使用非常广泛。到了云时代,Linux 炙手可热,掌握。 知识和技能,能找到非常有前景的工作。 既然要学习,最重要的是找到一家好的培训机构。师资,费用,教学质量,这些都要考虑。 2017年5月26日上午,“千锋Linux 云计算运维及开发课程2017版”新品发布会在千锋互联科技有限公司总部北京隆重举行 届时,千锋教育总部的各位领导、千锋教育分校区的校长及网络咨询部、网络运营部代表等各界人士一起出席了“千锋Linux 云计算运维及开发课程2017版”新品发布会。 千锋Linux 云计算课程总监(中国第29位红帽认证架构师,以下简称:杨老师)向各位出席此次发布会的代表详细介绍了“千锋Linux 云计算运维及开发课程2017版”的课程设置体系内容及本年度首期开班招生计划要求。 职业教育领先品牌 千锋教育 linux 培训学院哪家好 ?千锋Linux 云计算培训课程,全方位培养运维工程师 Linux 与微软的“战争”持续已久,谁也不能抢占各自的用户。不过,全球200万名Linux 工程师终于等到了这一天,是时候对微软说“不”了,因为“云计算”时代即将来临,以及廉价的、超小型笔记本电脑正在快速普及。Linux 工程师等待已久了的“云计算”时代。 日前,百资信息科技公司创办人及执行人林政道和香港Linux 商会会长简锦源在广州信息产业周上指出,由于手机、超小型笔记本等移动互联网终端的出现,这种移动终端设备采用Linux 平台作为操作系统已经成为IT 业界的一种发展趋势。因为中国是全球的PC 制造基地和最大的消费市场,其已成为全球推动Linux 发展的最重要的力量之一。 在云计算的初级阶段,我们一定要把握先机,好好学习云计算的相关知识。为此,千锋推出Linux 云计算培训。千锋Linux 云计算培训课程实行免费试学两周,不花一分钱,满意后再报名的政策,全心全意为学员提供服务。讲师方面,千锋Linux 讲师均是拥有多年经验的老师,并特聘一线名企作为技术顾问;课程体系方面,千锋Linux 课程体系是最贴合企业需求的面授课程,并有名企技术顾问定期进行调整;学员福利方面,千锋Linux 为首期报名学员减免1000元学费,并赠送5个月阿里云ECS 云主机。2017年7月17日,千锋Linux 云计算培训等你来战

Linux内核简介

1.Linux系统分为三层: (1)靠近硬件的底层是内核,即Linux操作系统常驻内存部分。 (2)中间层是内核之外的shell层,即操作系统的系统程序部分。 (3)最高层是应用层,即用户程序部分。 2.Linux的进程调度算法采用多级队列轮转法。 3.Linux两种管理内存的策略: (1)交换 (2)请求分页 4.Linux支持三种类型的硬件设备: (1)字符设备 (2)块设备 (3)网络设备 5.Linux 进程状态: (1)运行态 (2)可中断等待态 (3)不可中断等待态 (4)停止态 (5)僵死态 6.Linux进程的执行模式: (1)用户模式 (2)内核模式 7.如果在用户程序执行过程中出现系统调用或者发生中断事件,就要运行操作系统程序, 进程模式变成内核模式。在内核模式下运行的进程可以执行机器的特权指令,此时该进程的运行不受用户的干预,即使是root用户也不能干预内核模式下进程的运行。 8.Linux进程按功能和运行的程序分为: (1)系统进程 (2)用户进程 9.用户进程既可以在用户模式下运行,也可以在内核模式下运行。 10.Linux每个进程都有一个名为task-struct的数据结构,相当于进程控制块。 11.task-struct包含的信息: (1)进程状态

(2)调度信息 (3)标识符 (4)内部进程通信 (5)链接信息 (6)时间和计时器 (7)文件系统 (8)虚拟内存 (9)处理器信息 12.Linux每个进程都有一个系统堆栈,保存中断现场信息和进程进入内核模式后执行子程 序嵌套调用的返回现场信息。 13.系统空间堆栈大小是静态确定的,用户空间堆栈可以在运行时动态扩展。 14.系统刚刚启动时,系统运行在内核方式,内核在引导并完成基本的初始化操作以后,就 有了系统的第一个进程。除此之外,所有的其他进程和内核线程都由这个原始进程或其子孙进程创建。 15.除初始化进程外,其他进程都是用系统调用fork()和clone()创建的。调用fork()和clone() 的进程是父进程,被生成的进程是子进程。 16.后台程序按批处理方式调度运行。 17.超级块包含文件系统的大小和形式的基本信息。文件系统管理员可以利用这些信息来使 用和维护文件系统。每个块组都是一个超级块。 18.每个数据块组都有一个描述它的数据结构,即块组描述结构。 19.每个文件都有唯一一个索引节点。 20.索引节点两种形式: (1)盘索引节点 (2)内存索引节点 21.用户程序通过有关文件系统操作的系统调用界面进入系统空间,然后经由VFS才可使用 Linux系统中具体的文件系统。 22.VFS和ext2文件系统一样也使用超级块和索引节点来描述和管理系统中的文件。每个安 装的文件系统都有一个VFS超级块。 23.Linux系统进程启动时,自动打开三个文件:标准输入、标准输出和标准错误输出,文 件描述符分别是0,1,2. 24.信号处理机构包括: (1)信号的分类、产生和传送 (2)对各种信号预先规定的处理方式 (3)信号的检测和处理 25.进程接到信号后,在一定时机做相应处理,可采取四种处理方式: (1)忽略信号 (2)阻塞信号 (3)由进程处理该信号

linux常见技术面试题目

一.填空题: 1. 在Linux系统中,以文件方式访问设备。 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统。 3. Linux文件系统中每个文件用 i节点来标识。 4. 全部磁盘块由四个部分组成,分别为引导块、专用块、 i节点表块和数据存储块。 5. 链接分为:硬链接和符号链接。 6. 超级块包含了i节点表和空闲块表等重要的文件系统信息。 7. 某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为: 644 ,该文件属性是目录。 8. 前台起动的进程使用 Ctrl+c 终止。 9. 静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置。 10. 网络管理的重要任务是:控制和监控。 11. 安装Linux系统对硬盘分区时,必须有两种分区类型:文件系统分区和交换分区。 13. 编写的Shell程序运行前必须赋予该脚本文件执行权限。 14. 系统管理的任务之一是能够在分布式环境中实现对程序和数据的安全保护、备份、恢复和更新。 15. 系统交换分区是作为系统虚拟存储器的一块区域。 16. 内核分为进程管理系统、内存管理系统、 I/O管理系统和文件管理系统等四个子系统。 17. 内核配置是系统管理员在改变系统配置硬件时要进行的重要操作。 18. 在安装Linux系统中,使用netconfig程序对网络进行配置,该安装程序会一步步提示用户输入主机名、域名、域名服务器、IP地址、网关地址和子网掩码等必要信息。 19. 唯一标识每一个用户的是用户 ID 和用户名。 20 . RIP 协议是最为普遍的一种内部协议,一般称为动态路由选择协议。 21. 在Linux系统中所有内容都被表示为文件,组织文件的各种方法称为文件系统。 22. DHCP可以实现动态 IP 地址分配。 23. 系统网络管理员的管理对象是服务器、用户和服务器的进程以及系统的各种资源。 24. 网络管理通常由监测、传输和管理三部分组成,其中管理部分是整个网络管理的中心。 25. 当想删除本系统用不上的设备驱动程序时必须编译内核,当内核不支持系统上的设备驱动程序时,必须对内核升级。 26 Ping命令可以测试网络中本机系统是否能到达一台远程主机,所以常常用于测试网络的连通性。 27. vi编辑器具有两种工作模式:命令模式和输入模式。 28. 可以用ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段,

史上最全linux内核配置详解

对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序的支持。只有<>才能选择M 1. General setup(通用选项) [*]Prompt for development and/or incomplete code/drivers,设置界面中显示还在开发或者还没有完成的代码与驱动,最好选上,许多设备都需要它才能配置。 [ ]Cross-compiler tool prefix,交叉编译工具前缀,如果你要使用交叉编译工具的话输入相关前缀。默认不使用。嵌入式linux更不需要。 [ ]Local version - append to kernel release,自定义版本,也就是uname -r可以看到的版本,可以自行修改,没多大意义。 [ ]Automatically append version information to the version string,自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。由于在编译的命令make-kpkg 中我们会加入- –append-to-version 选项来生成自定义版本,所以这里选N。 Kernel compression mode (LZMA),选择压缩方式。 [ ]Support for paging of anonymous memory (swap),交换分区支持,也就是虚拟内存支持,嵌入式不需要。 [*]System V IPC,为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。 [*]POSIX Message Queues,这是POSIX的消息队列,它同样是一种IPC(进程间通讯)。建议你最好将它选上。 [*]BSD Process Accounting,允许进程访问内核,将账户信息写入文件中,主要包括进程的创建时间/创建者/内存占用等信息。可以选上,无所谓。 [*]BSD Process Accounting version 3 file format,选用的话统计信息将会以新的格式(V3)写入,注意这个格式和以前的v0/v1/v2 格式不兼容,选不选无所谓。 [ ]Export task/process statistics through netlink (EXPERIMENTAL),通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。和BSD类似,数据将在进程结束时送入用户空间。如果不清楚,选N(实验阶段功能,下同)。 [ ]Auditing support,审计功能,某些内核模块需要它(SELINUX),如果不知道,不用选。 [ ]RCU Subsystem,一个高性能的锁机制RCU 子系统,不懂不了解,按默认就行。 [ ]Kernel .config support,将.config配置信息保存在内核中,选上它及它的子项使得其它用户能从/proc/ config.gz中得到内核的配置,选上,重新配置内核时可以利用已有配置Enable access to .config through /proc/config.gz,上一项的子项,可以通过/proc/ config.gz访问.config配置,上一个选的话,建议选上。 (16)Kernel log buffer size (16 => 64KB, 17 => 128KB) ,内核日志缓存的大小,使用默认值即可。12 => 4 KB,13 => 8 KB,14 => 16 KB单处理器,15 => 32 KB多处理器,16 => 64 KB,17 => 128 KB。 [ ]Control Group support(有子项),使用默认即可,不清楚可以不选。 Example debug cgroup subsystem,cgroup子系统调试例子 Namespace cgroup subsystem,cgroup子系统命名空间 Device controller for cgroups,cgroups设备控制器

Linux内核中的Kconfig用法与说明

Linux内核中的Kconfig文件 本节不对内核的Kconfig文件进行深入展开,更多Kconfig语法和说明请阅读 。 内核源码树每个目录下都还包含一个Kconfig文件,用于描述所在目录源代码相关的内核配置菜单,各个目录的Kconfig文件构成了一个分布式的内核配置数据库。通过make menuconfig(make xconfig或者make gconfig)命令配置内核的时候,从Kconfig文件读取菜单,配置完毕保存到文件名为.config的内核配置文件中,供Makefile文件在编译内核时使用。 1.1.1 Kconfig基本语法 如程序清单0.1所示代码摘自文件,是一个比较典型的Kconfig 文件片段,包含了Kconfig的基本语法。 程序清单0.1drivers/char/Kconfig片段 menu "Character devices" source "drivers/tty/Kconfig" config DEVKMEM bool "/dev/kmem virtual device support" default y help Say Y here if you want to support the /dev/kmem device. The /dev/kmem device is rarely used, but can be used for certain kind of kernel debugging operations. When in doubt, say "N". …… endmenu 1.子菜单 通过menu和endmenu来定义一个子菜单,程序清单0.1所示代码定义了一个“Character devices”子菜单,子菜单在界面中用“--->”表示,如图0.1所示。 图0.1menu定义的子菜单 子菜单的菜单项则由config来定义,随后的“bool”、“default”、“help”等都是该菜单 项的属性:

相关文档
最新文档