Linux-2.6.31内核优化指南

合集下载

Linux-2.6.31 内核移植

Linux-2.6.31 内核移植

Linux-2.6.31内核移植实现功能:一>支持小页/大页NandFlash—64M/256M二>支持yaffs2文件系统三>支持320*240LCD四>支持DM9000网卡五>支持UDA1341声卡六>支持RTC七>完善了触摸屏驱动八>支持常用USB设备九>支持常用USB摄像头十>支持CMOS摄像头驱动移植十一>LCD背光移植手册:linux2.6.31移植V1.5.pdf补丁文件:linux-2.6.31_TX2440A.rar编译:#make distclean#cp TX2440A_config_256M_W35.config#make zImage编译完后,会在arch/arm/boot下生成zImage内核镜像文件[其它说明:linux-2.6.31_TX2440A20110106已经添加了3.5寸、4.3寸、7寸屏的驱动内核源码的根目录下有3个配置文件:TX2440A_config_256M_W35—>3.5寸屏的配置文件TX2440A_config_256M_W43—>4.3寸屏的配置文件TX2440A_config_256M_Q70—>7.0寸屏的配置文件编译内核之前,只需要LOAD相应的配置文件就可以生成对应该屏的内核。

图形化配置:#make menuconfig<—进入图形化配置界面在配置菜单中选择这一项:"Load an Alternate Configuration File",输入2440的默认配置文件:TX2440A_config_256M_W35,然后选择OK。

配置完后,回到主菜单,选择这一项"Save anAlternate Configuration File",输入要保存的配置文件名称:.config(默认)或自己取名:TX2440A_config,退出,编译内核]内核移植步骤:一、准备移植二、支持NandFlash启动时输出:S3C24XX NAND Driver,(c)2004Simtec Electronics0x000000000000-0x000000100000:"boot"0x000000120000-0x000000520000:"kernel"0x000000520000-0x000010000000:"yaffs2"三、支持yaffs2文件系统启动时(成功挂载文件系统)输出:yaffs:dev is32505858name is"mtdblock2"yaffs:passed flags""yaffs:Attempting MTD mount on31.2,"mtdblock2"yaffs:auto selecting yaffs2yaffs_read_super:isCheckpointed0VFS:Mounted root(yaffs filesystem)on device31:2.Freeing init memory:196K四、LCD驱动的移植启动时输出:Console:switching to colour frame buffer device40x30fb0:s3c2410fb frame buffer devic e五、DM9000驱动的移植启动时输出:dm9000Ethernet Driver,V1.31Now use the default MAC address:08:90:90:90:90:90eth0:dm9000e at c881c000,c8820004IRQ62MAC:08:90:90:90:90:90系统启动后,可能会出现这个错误:ifconfig:SIOCSIFFLAGS:Cannot assign requested address原因是MAC地址没有设置或没有设置对,在文件系统的启动脚本中加上:ifconfig eth0downifconfig eth0hw ether XX:XX:XX:XX:XX:XX<—MAC地址,随便设ifconfig eth0up一般问题可以解决,如果还提示有错,再改一下MAC地址。

Red Hat Enterprise Linux 6 效能微調指南说明书

Red Hat Enterprise Linux 6 效能微調指南说明书

Red Hat Enterprise Linux 6效能微調指南優化 Red Hat Enterprise Linux 6 的子系統處理能力版 4.0Last Updated: 2017-10-12Red Hat Enterprise Linux 6 效能微調指南優化 Red Hat Enterprise Linux 6 的子系統處理能力版 4.0Red Hat 主題專員編輯者Don DomingoLaura Bailey. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 內容目錄章 1. 總覽1.1. 讀者1.2. 水平擴充能力1.2.1. 平行運算1.3. 分散式系統1.3.1. 通訊1.3.2. 儲存環境1.3.3. 聚集網路章2. RED HAT ENTERPRISE LINUX 6 效能提升2.1. 支援 64 位元2.2. 票證盤旋鎖2.3. 動態清單結構2.4. 無計時 KERNEL 2.5. 控制群組2.6. 改進儲存與檔案系統章 3. 監控和分析系統效能3.1. PROC 檔案系統3.2. GNOME 與 KDE 系統監控程式3.3. 內建的命令列監控工具3.4. TUNED 與 KTUNE3.5. 應用程式設定檔工具3.5.1. SystemTap3.5.2. OProfile3.5.3. Valgrind3.5.4. Perf3.6. RED HAT ENTERPRISE MRG 章4. CPU 拓樸執行續插斷4.1. CPU 拓樸4.1.1. CPU 與 NUMA 拓樸4.1.2. 微調 CPU 效能4.1.2.1. 使用 taskset 設定 CPU 關聯4.1.2.2. 使用 numactl 控制 NUMA 政策4.1.3. numastat 4.1.4. NUMA 關聯管理 daemon (numad )4.1.4.1. numad 的好處4.1.4.2. 操作模式4.1.4.2.1. 使用 numad 作為服務4.1.4.2.2. 以執行檔方式執行 numad 4.2. CPU 排程4.2.1. 即時排程政策4.2.2. 正常的排程政策4.2.3. 選擇政策4.3. 微調插斷與 IRQ4.4. RHEL 6 中,NUMA 的加強功能4.4.1. 優化空機系統與可擴充能力4.4.1.1. 感知拓樸的加強功能445556781010101111111215151516171818181919202121212121212224242627272828282929303030313232內容目錄1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1.2. 多處理器同步的加強功能4.4.2. 優化虛擬功能章5. 記憶體5.1. 巨型轉譯後備緩衝區5.2. 巨型分頁與通透式巨型分頁5.3. 使用 VALGRIND 側寫記憶體使用量5.3.1. 使用 memcheck 側寫記憶體使用量5.3.2. 以 Cachegrind 側寫快取使用量5.3.3. 使用 Massif 側寫堆積與堆疊空間5.4. 微調處理能力5.5. 微調虛擬記憶體章6. 輸入/輸出6.1. 功能6.2. 分析6.3. 工具6.4. 配置6.4.1. 完全公平佇列(CFQ )6.4.2. 期限 I/O 排程器6.4.3. Noop 章7. 檔案系統7.1. 檔案系統微調考量7.1.1. 格式化選項7.1.2. 掛載選項7.1.3. 檔案系統維護7.1.4. 應用程式考量7.2. 檔案系統效能的設定檔7.3. 檔案系統7.3.1. ext4 檔案系統7.3.2. XFS 檔案系統7.3.2.1. XFS 的基本微調7.3.2.2. XFS 進階微調7.4. 叢集7.4.1. 全域檔案系統 2章 8. 網路8.1. 網路效能提升8.1.1. 接收封包操控(Receive Packet Steering ,RPS )8.1.2. 接收流量操控(Receive Flow Steering ,RFS )8.1.3. TCP 精簡串流的 getsockopt 支援8.1.4. 支援通透式代理8.2. 優化網路設定8.2.1. Socket 接收緩衝區大小8.3. 封包接收總覽8.3.1. CPU/快取關聯8.4. 解決常見的佇列/FRAME 遺失問題8.4.1. NIC 硬體緩衝區8.4.2. socket 佇列8.5. MULTICAST 考量附錄 A. 修訂記錄323234343435353637384043434344474849505252525253545454555556565858606060606061616263636364646566效能微調指南2內容目錄3效能微調指南章 1. 總覽《效能微調指南》乃配置與優化 Red Hat Enterprise Linux(Red Hat 企業版 Linux,以下簡稱「RHEL」)的全方位參考文件。

linux系统内核参数优化-linux快速入门教程

linux系统内核参数优化-linux快速入门教程

linux系统内核参数优化-linux快速⼊门教程内核的 shmall 和 shmmax 参数SHMMAX= 配置了最⼤的内存segment的⼤⼩ ------>这个设置的⽐SGA_MAX_SIZE⼤⽐较好。

SHMMIN= 最⼩的内存segment的⼤⼩SHMMNI= 整个系统的内存segment的总个数SHMSEG= 每个进程可以使⽤的内存segment的最⼤个数配置信号灯( semphore )的参数:SEMMSL= 每个semphore set⾥⾯的semphore数量 -----> 这个设置⼤于你的process的个数吧,否则你不得不分多个semphore set,好像有process+n之说,我忘了n是⼏了。

SEMMNI= 整个系统的semphore set总数SEMMNS=整个系统的semphore总数shmall 是全部允许使⽤的共享内存⼤⼩,shmmax 是单个段允许使⽤的⼤⼩。

这两个可以设置为内存的 90%。

例如 16G 内存,16*1024*1024*1024*90% = 15461882265,shmall 的⼤⼩为 15461882265/4k(getconf PAGESIZE可得到) = 3774873。

修改 /etc/sysctl.confkernel.shmmax=15461882265kernel.shmall=3774873kernel.msgmax=65535kernel.msgmnb=65535执⾏ sudo sysctl -p可以使⽤ ipcs -l 看结果。

ipcs -u 可以看到实际使⽤的情况========================================================================linux 内存管理⼀、前⾔本⽂档针对OOP8⽣产环境,具体优化策略需要根据实际情况进⾏调整;本⽂档将在以下⼏个⽅⾯来阐述如何针对RedHat Enterprise Linux 进⾏性能优化。

RedHat5 内核升级指南

RedHat5 内核升级指南

RedHat5.3 升级内核到2.6.33 版本错误:insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists编译2.6.31内核后重启出现insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists解决方法:1,解压initrd文件[root@bogon ~]# cp /boot/initrd-2.6.30.4.img /tmp[root@bogon ~]# cd /tmp/[root@bogon tmp]# lsinitrd-2.6.30.4.img[root@bogon tmp]# mkdir newinitrd[root@bogon tmp]# cd newinitrd/[root@bogon newinitrd]# zcat ../initrd-2.6.30.4.img |cpio -i11537 blocks释放之后看到如下内容[root@bogon newinitrd]# lsbin dev etc init lib proc sbin sys sysroot2,ok,下边就是编辑init,删掉其中重复的四行中的两行echo "Loading dm-region-hash.ko module"insmod /lib/dm-region-hash.koecho "Loading dm-region-hash.ko module"insmod /lib/dm-region-hash.ko3,重新打包initrd[root@bogon newinitrd]# find .|cpio -c -o > ../initrd11538 blocks[root@bogon newinitrd]# cd ..[root@bogon tmp]# gzip -9 < initrd > initrd.img[root@bogon tmp]# lsinitrd-2.6.30.4.img initrd initrd.img newinitrd好了,initrd.img就是重新打包的initrd了,然后把initrd.img拷贝到/boot,更改grub.conf里边的initrd-2.6.30.4.img为initrd.img就可以了,这样“insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists”就不会有了其实将init文件的第二行“setquiet”去掉,你就知道initrd文件到底在做什么了本文来自CSDN博客,转载请标明出处:/jinxl560/archive/2009/09/17/4563716.aspx。

如何优化 Linux 内核参数

如何优化 Linux 内核参数

如何优化 Linux 内核参数随着计算机技术的不断发展,更多的人开始使用 Linux 操作系统。

作为一个开源的操作系统, Linux 在保障安全性、稳定性和可靠性方面表现出色。

除此之外, Linux 操作系统也非常灵活,用户可以根据自己的需求和喜好对其进行定制和优化。

其中,内核参数的优化尤为重要,因为它能直接影响到系统的性能和稳定性。

那么,如何优化 Linux 内核参数呢?一、理解内核参数的含义和作用内核参数是一组指定操作系统内部参数的开关,通过改变这些参数可以改善系统的性能和稳定性。

内核参数有许多种,它们控制着各种功能的行为和特性,如网络协议、文件系统、内存管理、I/O 等方面。

对于不同的应用场景,其内核参数的优化方向也不同。

比如,对于高负载的 web 服务器,应优化网络协议参数和内存管理参数;而对于 I/O 密集型应用,应优化磁盘和文件系统相关参数。

二、查看和修改内核参数在 Linux 操作系统中,用户可以通过 /proc 系统文件夹和 sysctl命令查看和修改内核参数。

具体方法如下:1. 查看内核参数:使用 cat /proc/sys/[文件夹路径]/[参数名] 命令即可。

其中, [文件夹路径] 和 [参数名] 根据所需参数而不同。

举例来说,如果要查看 TCP 连接超时时间,可以使用 cat/proc/sys/net/ipv4/tcp_keepalive_time 命令。

输出结果为系统当前的TCP 连接超时时间。

类似地,如果要查看系统的文件描述符限制,可以使用 cat /proc/sys/fs/file-max 命令。

2. 修改内核参数:使用 sysctl -w [参数名]=[新值] 命令即可。

其中, [参数名] 和 [新值] 由用户自行指定。

举例来说,如果要将 TCP 连接超时时间改为 180 秒,可以使用sysctl -w net.ipv4.tcp_keepalive_time=180 命令。

Linux2.6下内核调试技术的改进与研究

Linux2.6下内核调试技术的改进与研究
合 . 法 轻易 的将 内核 代码 放 在 调试 程 序 中执 行 和 无 跟 踪 。 因而在 编 写 驱动 程 序之 前 . 们 首 先编 译 并 我
安 装 自己的新 内核 . 是 为 了在 内核 代 码 中加 入 以 这
收 稿 日期: 0 5 0 — 9 20— 80 基 金 项 目: 安 部 金 盾 工 程 资 助 项 目 (1 A 2W0 3 公 JG B 3 1 )
Ab ta t Ac o dn h iu d l c a im n e ied e ’ lme t. hsp p ra ay e e k re e sr c : cr igt te Ln xmo ue me h ns a dd vc dv rsee ns ti a e lBst e l - o n h n d b gp be i ed vc r e ’ e eo me tpo e s n d rsac e e k r e e u c n lg o gd , a - u r lm n t e ied v rsd v lp n rc s,a ee rh st en l b gt h oo yt mu lyme o h i h d e h n w i ,rp ssa mp o e ou o b u mo alc t nma a e n d ac s ntek r e. hl p o oe i rv dslt n a o t e n i me w l ai , n g me ta ce si e 1 o o n h n Ke r s Ln x26 De u e h oo y K o d ywo d : iu ., b g tc n lg , ig
YANG o Ma ,DAIZib n - i
( stt o lc o i T cn lg,h L fr ai n ier g nvri , hnzo 5 0 4C ia I tue f et nc eh o y teP AI om t nE g ei i sy Z e ghu4 0 0 hn ) ni E r o n o n nU e t

linux-2[1].6.31-探秘Linux SysRq魔法键

linux-2[1].6.31-探秘Linux SysRq魔法键
echo 8 > /proc/sysrq-trigger
记住,在触发 sysrq 命令后将日志级别返回到正常状态
有问题的时候向谁咨询 ~~~~~~~~~~~~~~~~~~~
我会尽快解答关于注册系统的问题。 - Crutcher
5
致谢 ~~~
Mydraal <vulpyne@> 编写 Adam Sulmicki <adam@> 进行了更新 Jeremy M. Dolan <jmd@> 2001/01/28 10:15:59 进行了更新 Crutcher Dunnavant <crutcher+kernel@> 添加了新的信息
创建 sysrq_key_op 后,调用内核函数 register_sysrq_key(int key, struct sysrq_key_op *op_p),该函数会将'op_p'所指的操作注册到表中键值'key'处,如果表中的对应位置为空的 话。模块卸载时,必须调用 unregister_sysrq_key(int key, struct sysrq_key_op *op_p),该函数 会移除键值'key'中的'op_p'指向的操作结构,如果操作结构注册在对应项中的话。这是为了 防止对应项在你注册后被覆盖。
t'E'rm 和 k'I'll 用于一些进程脱离你的控制而你无法将它们杀死,而它们会生成其它进 程的场合。
"'J'ust thaw it"用于因为 FIFREEZE ioctl 冻结一个(可能是 root)文件系统而导致系统 没有反应的场合。
有时候使用 SysRq 后似乎卡住了,这时该怎么做 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Linux系统优化配置及安全设置

Linux系统优化配置及安全设置

Linux系统优化配置及安全设置系统参数配置:修改/etc/profile文件,加入:ulimit -u 10240ulimit -n 4096ulimit -d unlimitedulimit -m unlimitedulimit -s unlimitedulimit -t unlimitedulimit -v unlimited修改/etc/rc.d/rc.local,加入:echo ‘131072′ > /proc/sys/fs/file-maxecho ‘131072′ > /proc/sys/fs/inode-max(1G内存值修改成:65535 2G内存值修改成:131072 4G内存值修改成:262144)修改/etc/sysctl.conf文件,加入:net.core.rmem_default = 16777216net.core.rmem_max = 16777216net.core.wmem_default = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_timestamps = 0net.ipv4.tcp_sack =1net.ipv4.tcp_window_scaling = 1dev_max_backlog=3000#Modify i-node#sys.fs.file-max= 65535#sys.fs.inode-max= 65535#Set System Memory#vm.bdflush="30 500 0 0 500 3000 60 20 0"#vm.kswapd="1024 32 64"#Disable HackAttack!net.ipv4.conf.eth0.accept_source_route=0net.ipv4.conf.lo.accept_source_route=0net.ipv4.conf.default.accept_source_route=0net.ipv4.conf.all.accept_source_route=0net.ipv4.conf.lo.accept_redirects=0net.ipv4.conf.all.accept_redirects=0net.ipv4.conf.eth0.accept_redirects=0net.ipv4.conf.default.accept_redirects=0net.ipv4.conf.lo.secure_redirects=0net.ipv4.conf.all.secure_redirects=0net.ipv4.conf.eth0.secure_redirects=0net.ipv4.conf.default.secure_redirects=0net.ipv4.conf.eth0.send_redirects=0net.ipv4.conf.lo.send_redirects=0net.ipv4.conf.default.send_redirects=0net.ipv4.conf.all.send_redirects=0net.ipv4.tcp_syncookies=1net.ipv4.icmp_echo_ignore_broadcasts=1net.ipv4.icmp_ignore_bogus_error_responses=1#Web Serversnet.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_fin_timeout=30net.ipv4.tcp_keepalive_time=1800net.ipv4.tcp_keepalive_probes = 30net.ipv4.tcp_keepalive_intvl = 3net.ipv4.core.wmem_max=16777216net.ipv4.core.rmem_max=16777216net.ipv4.tcp_rmem="4096 87380 8388608"net.ipv4.tcp.wmem="4096 87380 8388608"net.ipv4.tcp_max_syn_backlog=8192net.ipv4.tcp_retries2 = 5net.ipv4.ip_local_port_range = 1024 65000net.ipv4.tcp_mem = 78643200 104857600 157286400net.ipv4.tcp_max_tw_buckets = 50000修改/etc/security/limits.conf* soft nofile 265535* hard nofile 265535防火墙安全:iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT也有人写作iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT--limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改防止各种端口扫描iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPTPing洪水攻击(Ping of Death)iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT。

定制linux内核(linux2.6.32)教学提纲

定制linux内核(linux2.6.32)教学提纲

定制l i n u x内核(l i n u x2.6.32)定制 Linux 内核(linux-2.6.32)Linux 内核看似佷庞大,其实初学者以及致力于应用开发的用户,不必学习之初就一头钻进浩如烟海的内核代码中问剑;但熟练配置内核的一些常用选项,并编译出来下载到开发板中运行试用,是你迈向 Linux 系统顶峰的必行之路。

一、平台:操作系统: ubuntu-9.04交叉编译器:arm-linux-gcc-4.4.3.tar.gz配置内核:linux-2.6.32.2-mini2440-20100921.tar.gz二、使用缺省配置文件配置和编译内核:执行以下命令来使用缺省配置文件 config_t35# cp config_mini2440_t35 .config然后执行“make menuconfig”出现配置内核界面:2.1 配置 CPU 平台选项在主菜单里面,选择 System Type,按回车进入可以看到系统大部分使用了标注了 S3C2410 的选项,这是因为 S3C2410 和S3C2440的很多寄存器地址等地址和设置是完全相同的。

如果您要选择板级选项,使用上下方向控制键一直找到 S3C2440 机器平台选项,可以进入 S3C2400 Machines 子菜单可以看到里面有很多常见的使用 S3C2440 的目标板平台选项,在此选“FriendlyARM Mini2440 development board”,如图它们分别对应于 arch/arm/mach-s3c2440/mach-* 开头的文件 , 在此对应于mach-mini2440.c。

另外,在这个文件中,还会用到一个机器码 MACH_TYPE,该机器码的定义文件为 arch/arm/tools/mach-types,我们开发板的机器码为 1999,它还对应于 vivi 源代码中 include/platform/smdk2440.h 文件的 MACH_TYPE2.2 配置各个尺寸的 LCD 驱动以及背光控制支持在主菜单里面,选择 Device Drivers,按回车进入,并找到如图选项,按回车进入:找到如图选项,再按回车进入出现类似如图界面,并找到如图选项,选中如图 Backlight(背光控制)再选中 LCD select , 按回车进入 , 如图 , 可以看到我们加载的默认配置config_mini2440_t35 在此选择统宝3.5” LCD(3.5 inch 240x320 Toppoly LCD),你还可以根据需要改为其他型号的 LCD选择完毕,一直按照下方的提示返回到 Device Drivers 配置菜单。

Linux内核参数优化

Linux内核参数优化

Linux内核参数优化1.调整内核启动参数:在引导过程中,可以使用GRUB或LILO等引导加载器来设置内核启动参数。

通过修改/etc/default/grub文件(对于使用GRUB的情况),或修改/etc/lilo.conf文件(对于使用LILO的情况),可以设置内核启动参数。

常见的内核启动参数包括init=/bin/bash(在系统启动时使用bash作为init进程)和max_loop=256(增加文件系统挂载的最大数量)。

2.调整内存管理参数:修改/etc/sysctl.conf文件,可以调整与内存管理相关的内核参数。

例如,可以增加vm.swappiness=10来减少交换空间的使用,提高系统性能。

3.调整文件系统参数:修改/etc/fstab文件,可以设置文件系统的挂载选项。

使用noatime选项可以减少磁盘I/O操作,提高系统性能。

4.调整网络参数:修改/etc/sysctl.conf文件,可以调整与网络相关的内核参数。

例如,可以增加net.ipv4.tcp_tw_reuse=1和net.ipv4.tcp_fin_timeout=30来优化TCP连接。

5.启用硬件加速:根据硬件配置,启用硬件加速可以显著提高系统性能。

例如,对于使用Intel或AMD处理器的系统,可以启用CPU硬件虚拟化支持。

6.关闭不必要的内核模块和服务:禁用不需要的内核模块和服务可以减少系统的资源占用,提高性能。

使用工具如lsmod和systemctl可以查看已加载的内核模块和服务状态。

7.更新内核版本:保持内核版本最新是提高系统性能和安全性的重要步骤。

使用包管理器如apt、yum或dnf可以更新内核和其他系统组件。

8.配置SELinux和AppArmor:SELinux和AppArmor是Linux的强制访问控制机制,可以提供更高的系统安全性。

根据需要配置SELinux或AppArmor的策略,并调整相关的内核参数。

Linux2.6.31内核优化选项

Linux2.6.31内核优化选项

Linux 2.6.31内核优化指南作者:Ken WuEmail: ken.wug@转载本文档请注明原文链接/docs/linux-kernel-2-6-31-optimization.htm!介绍本文档是一篇关于Linux Kernel 2.6.31的最简优化指南。

作者旨在编译一份性能最佳且适合普通Application/Server开发用的内核。

(非生产环境)本文提及的内核调优,主要是通过选择最佳编译选项,删除无用驱动,减少内核尺寸,关闭部分安全特性等方式来进行的。

优化后的效果,主要体现在OS启动时间,启动后的内存占用以及应用程序运行性能。

由于作者水平有限,如果描述错误,还请不吝指教。

运行环境作者是在虚拟机中编译的内核,如果你与作者的运行环境不同,则本文档中的部分描述可能会与你的实际情况有一定出入。

不过,相信大部分用户在看到选项释义时,能做出适合自己的选择。

说明下列选项中,通过 "// " 注释的行,代表金国步写的内核选项简介中未提及的选项释义。

通过红色 "<===" 注释的行,代表内核默认开启,本文档推荐关闭的选项,释义部分会给出关闭的理由。

参考资料金国步写的内核选项简介Linux Kernel DatabaseLinuxsir BBS优化前后性能对比General setup --->[ ] Prompt for development and/or incomplete code/drivers <=== 显示尚在开发中或尚未完成的代码和驱动. 我不是内核或驱动开发人员。

() Local version - append to kernel release[ ] Automatically append version information to the version stringKernel compression mode (Bzip2) ---> <=== 对比默认的Gzip,Bzip2拥有更高的压缩比[*] Support for paging of anonymous memory (swap)[*] System V IPC[*] BSD Process Accounting[ ] BSD Process Accounting version 3 file format[ ] Export task/process statistics through netlink (EXPERIMENTAL) <=== 体验类选项一律关[ ] Auditing support <=== 给SELinux提供支持。

Linux2.6内核实时性分析与改进方案

Linux2.6内核实时性分析与改进方案

A src :h a e a a zs e| i h r t s c o iu . enl n rp ss li p vm n e — bta tT ep pr n l e a t caa e t s f n x 6kre a dpooe lm r e et t y r 一me c ri L i 2 a o m h
方案. 改进的 Lnx i 具有 高精确度 时钟 系统和 多种 实时调度算法动态模 块. u 实验表明, 改进后 的
l u26内核在 实时性 方 面有 较 大提 高. i x. n
关键 词 : 实时 ; iu ;R E F Ln x M; D
中图分 类号 : P 1. T 36 2
文献标 识码 : A
维普资讯
第 l 3卷
第1 期
20 0 8年 2月
哈 尔 滨 理 工 大 学 学 报 J OURNAL HARB N V.S I I UNI C .& T C E H.
Vo 3 No 1 L1 .
F b, 0 8 e. 2 0
Ln x . iu 2 6内核 实 时 性 分 析 与 改 进 方 案
( oeeo auecnr eh o g C m nct nE g er g H ri nvri cec n eh o g. abn104 C ia C l g f sr-ot l cnl y& o muiao ni ei , abnU i syo S i ea dTc nl y ,H ri 50 0. hn ) l Me oT o i n n e tf n o
临 的重要 问题 .
时性进行了分析 , 针对其粗时钟粒度和分时调度策 略 的 不 足 提 出 改 进 .实 验 数 据 表 明 , 进 后 的 改 Lnx . iu2 6内核在实 时性 方面 有 了较 大提高 .

内核引导失败的常见问题解决办法

内核引导失败的常见问题解决办法

内核引导常见问题Kernel - Common Problems Booting Linux作者:卢浩时间:2012.3.9转载请注明出处嵌入式爱好者开发群:122879839不少用户在尝试引导内核的时候,遇到了一些意外,内核的引导在某一点突然中断,并且不能进行下去,有时候是有个软件的bug导致的,而有时候可能是由于内核的错误的配置导致的,这篇文章是为开发者提供一些帮助来诊断为什么不能正常引导内核并且找出其中可能的原因。

问题1:内核只引导到"Starting Kernel...",然后串口终端就没有输出了,举个例子:## Booting kernel from Legacy Image at 80300000 ...Image Name: Linux-2.6.31Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 1750680 Bytes = 1.7 MBLoad Address: 80008000Entry Point: 80008000Verifying Checksum ... OKLoading Kernel Image ... OKOKStarting kernel ...到这里,串口终端就没有再输出任何信息了.以上的串口输出信息是uboot的引导过程,至于这个starting kernel其实是uboot阶段输出最后的一句信息,这时候正准备进入内核引导。

这个错误一般由于错误的配置debug串口导致的,你可以检验下你内核配置的时候,你所配置的串口输出端口是多少。

打个比方,你用的是TI的omap3的beagle-board板子,其中UART3被用来输入调试信息,那么你打开linux-2.6.37(打个比方是这个版本的内核)下的.config文件,你会看到以下信息:# CONFIG_OMAP_LL_DEBUG_UART1 is not set# CONFIG_OMAP_LL_DEBUG_UART2 is not setCONFIG_OMAP_LL_DEBUG_UART3=y你会看到串口3是被设置为调试的串口。

如何通过调整内核参数优化系统性能

如何通过调整内核参数优化系统性能

如何通过调整内核参数优化系统性能没错,你没有看错,本文将探讨如何通过调整系统内核参数来优化系统性能。

在讲解如何进行内核参数调整之前,我们先来了解一下什么是内核和内核参数。

一、内核和内核参数内核是操作系统最核心的部分,它是操作系统与硬件之间的接口,负责管理系统资源、管理进程、建立文件系统等。

每个操作系统都有自己的内核,如Windows有NT内核,Linux有Linux内核等。

而内核参数则是内核提供的一些设置选项,这些设置选项可以决定系统运行的方式和特性。

内核参数通常保存在系统的/sys文件系统中,在/sys的不同目录下,保存了不同的内核参数的值。

二、内核参数调整的目的调整内核参数的目的是为了优化系统的性能。

系统性能可以理解为系统整体的响应速度和负载能力。

如果系统响应速度慢或者负载能力较低,那么对于用户来说就会产生不好的用户体验和效率低下的工作效率。

通过调整内核参数可以提升系统性能,使得系统响应更迅速、负载更高。

三、内核参数调整的技术点现在我们已经明确了内核和内核参数的概念,接下来我们来探讨一下如何通过调整内核参数来优化系统性能。

1. 确定需要调整的内核参数在进行调整之前,首先我们要确定需要调整的内核参数。

系统管理员可以通过系统日志或者监控工具来确定系统的瓶颈在哪里,然后依据瓶颈所对应的内核参数来调整。

通常需要调整的内核参数包括网络优化参数、内存使用参数、CPU调度参数等。

2. 修改内核参数的值一旦确认需要调整的内核参数,我们就需要修改其对应的参数值。

在Linux系统中,管理员可以使用sysctl命令来修改内核参数的值。

sysctl命令的格式为:sysctl [-n] [-e] [-q] [-w] [-p filename] [-a] [-A] [name[=value]]其中,-n表示只获取参数值,-e表示忽略错误,-q表示不输出修改值的结果,-w表示修改参数的值,-p表示从文件中读取参数值,-a表示输出所有的内核参数,-A表示输出所有的内核参数和描述。

Linux-2.6内核编译配置选项简介

Linux-2.6内核编译配置选项简介

Linux-2.6内核编译配置选项简介code maturity level options代码成熟度选项prompt for development and/or incomplete code/drivers显示尚在开发中或尚未完成的代码与驱动.除非你是测试人员或者开发者,否则请勿选择general setup常规设置local version - append to kernel release在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命令看到automatically append version information to the version string自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持support for paging of anonymous memory (swap)使用交换分区或者交换文件来做为虚拟内存system v ipcsystem v进程间通信(ipc)支持,许多程序需要这个功能.必选,除非你知道自己在做什么ipc namespacesipc命名空间支持,不确定可以不选posix message queuesposix消息队列,这是posix ipc中的一部分bsd process accounting将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/内存占用等信息bsd process accounting version 3 file format使用新的第三版文件格式,可以包含每个进程的pid和其父进程的pid,但是不兼容老版本的文件格式export task/process statistics through netlink通过netlink接口向用户空间导出任务/进程的统计信息,与bsd process accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的enable per-task delay accounting在统计信息中包含进程等候系统资源(cpu,io同步,内存交换等)所花费的时间uts namespacesuts名字空间支持,不确定可以不选auditing support审计支持,某些内核模块(例如selinux)需要它,只有同时选择其子项才能对系统调用进行审计enable system-call auditing support支持对系统调用的审计kernel .config support把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息enable access to .config through /proc/config.gz允许通过/proc/config.gz访问内核的配置信息cpuset support只有含有大量cpu(大于16个)的smp系统或numa(非一致内存访问)系统才需要它kernel->user space relay support (formerly relayfs)在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口initramfs source file(s)initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白optimize for size (look out for broken compilers!)编译时优化内核尺寸(使用"-os"而不是"-o2"参数编译),有时会产生错误的二进制代码enable extended accounting over taskstats收集额外的进程统计信息并通过taskstats接口发送到用户空间configure standard kernel features (for small systems)配置标准的内核特性(为小型系统)enable 16-bit uid system calls允许对uid系统调用进行过时的16-bit包装sysctl syscall support不需要重启就能修改内核的某些参数和变量,如果你也选择了支持/proc,将能从/proc/sys 存取可以影响内核行为的参数或变量load all symbols for debugging/kksymoops装载所有的调试符号表信息,仅供调试时选择include all symbols in kallsyms在kallsyms中包含内核知道的所有符号,内核将会增大300kdo an extra kallsyms pass除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项support for hot-pluggable devices支持热插拔设备,如usb与pc卡等,udev也需要它enable support for printk允许内核向终端打印字符信息,在需要诊断内核为什么不能运行时选择bug() support显示故障和失败条件(bug和warn),禁用它将可能导致隐含的错误被忽略enable elf core dumps内存转储支持,可以帮助调试elf格式的程序enable full-sized data structures for core在内核中使用全尺寸的数据结构.禁用它将使得某些内核的数据结构减小以节约内存,但是将会降低性能enable futex support快速用户空间互斥体可以使线程串行化以避免竞态条件,也提高了响应速度.禁用它将导致内核不能正确的运行基于glibc的程序enable eventpoll support支持事件轮循的系统调用use full shmem filesystem完全使用shmem来代替ramfs.shmem是基于共享内存的文件系统(可能用到swap),在启用tmpfs后可以挂载为tmpfs供用户空间使用,它比简单的ramfs先进许多use full slab allocator使用slab完全取代slob进行内存分配,slab是一种优秀的内存分配管理器,推荐使用enable vm event counters for /proc/vmstat允许在/proc/vmstat中包含虚拟内存事件记数器loadable module support可加载模块支持enable loadable module support打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安装在/lib/modules/中module unloading允许卸载已经加载的模块forced module unloading允许强制卸载正在使用中的模块(比较危险)module versioning support允许使用其他内核版本的模块(可能会出问题)source checksum for all modules为所有的模块校验源码,如果你不是自己编写内核模块就不需要它automatic kernel module loading让内核通过运行modprobe来自动加载所需要的模块,比如可以自动解决模块的依赖关系block layer块设备层enable the block layer块设备支持,使用硬盘/usb/scsi设备者必选support for large block devices仅在使用大于2tb的块设备时需要support for tracing block io actions块队列io跟踪支持,它允许用户查看在一个块设备队列上发生的所有事件,可以通过blktrace程序获得磁盘当前的详细统计数据support for large single files仅在可能使用大于2tb的文件时需要io schedulersio调度器anticipatory i/o scheduler假设一个块设备只有一个物理查找磁头(例如一个单独的sata硬盘),将多个随机的小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.适用于大多数环境,特别是写入较多的环境(比如文件服务器)deadline i/o scheduler使用轮询的调度器,简洁小巧,提供了最小的读取延迟和尚佳的吞吐量,特别适合于读取较多的环境(比如数据库)cfq i/o scheduler使用qos策略为所有任务分配等量的带宽,避免进程被饿死并实现了较低的延迟,可以认为是上述两种调度器的折中.适用于有大量进程的多用户系统default i/o scheduler默认io调度器processor type and features中央处理器(cpu)类型及特性symmetric multi-processing support对称多处理器支持,如果你有多个cpu或者使用的是多核cpu就选上.此时"enhanced real time clock support"选项必须开启,"advanced power management"选项必须关闭subarchitecture type处理器的子架构,大多数人都应当选择"pc-compatible"processor family处理器系列,请按照你实际使用的cpu选择generic x86 support通用x86支持,如果你的cpu能够在上述"processor family"中找到就别选hpet timer supporthpet是替代8254芯片的新一代定时器,i686及以上级别的主板都支持,可以安全的选上maximum number of cpus支持的最大cpu数,每增加一个内核将增加8k体积smt (hyperthreading) scheduler support支持intel的超线程(ht)技术multi-core scheduler support针对多核cpu进行调度策略优化preemption model内核抢占模式no forced preemption (server)适合服务器环境的禁止内核抢占voluntary kernel preemption (desktop)适合普通桌面环境的自愿内核抢占preemptible kernel (low-latency desktop)适合运行实时程序的主动内核抢占preempt the big kernel lock可以抢占大内核锁,应用于实时要求高的场合,不适合服务器环境machine check exception让cpu检测到系统故障时通知内核,以便内核采取相应的措施(如过热关机等)check for non-fatal errors on amd athlon/duron / intel pentium 4每5秒检测一次这些cpu的非致命错误并纠正它们,同时记入日志check for p4 thermal throttling interrupt当p4的cpu过热时显示一条警告消息enable vm86 support虚拟x86支持,在dosemu下运行16-bit程序或xfree86通过bios初始化某些显卡的时候才需要toshiba laptop supporttoshiba笔记本模块支持dell laptop supportdell笔记本模块支持enable x86 board specific fixups for reboot修正某些旧x86主板的重起bug,这种主板基本绝种了/dev/cpu/microcode - intel ia32 cpu microcode support使用不随linux内核发行的ia32微代码,你必需有ia32微代码二进制文件,仅对intel的cpu 有效/dev/cpu/*/msr - model-specific register support在多cpu系统中让特权cpu访问x86的msr寄存器/dev/cpu/*/cpuid - cpu information support能从/dev/cpu/x/cpuid获得cpu的唯一标识符(cpuid)firmware drivers固件驱动程序bios enhanced disk drive calls determine boot disk有些bios支持从某块特定的硬盘启动(如果bios不支持则可能无法启动),目前大多数bios 还不支持bios update support for dell systems via sysfs仅适用于dell机器dell systems management base driver仅适用于dell机器high memory support最高内存支持,总内存小于等于1g的选"off",大于4g的选"64g"memory split如果你不是绝对清楚自己在做什么,不要改动这个选项memory model一般选"flat memory",其他选项涉及内存热插拔64 bit memory and io resources使用64位的内存和io资源allocate 3rd-level pagetables from highmem在内存很多(大于4g)的机器上将用户空间的页表放到高位内存区,以节约宝贵的低端内存math emulation数学协处理器仿真,486dx以上的cpu就不要选它了mtrr (memory type range register) support打开它可以提升pci/agp总线上的显卡2倍以上的速度,并且可以修正某些bios错误boot from efi supportefi是一种可代替传统bios的技术(目前的grub/lilo尚不能识别它),但是现在远未普及enable kernel irq balancing让内核将irq中断平均分配给多个cpu以进行负载均衡,但是要配合irqbanlance守护进程才行use register arguments使用"-mregparm=3"参数编译内核,将前3个参数以寄存器方式进行参数调用,可以生成更紧凑和高效的代码enable seccomp to safely compute untrusted bytecode只有嵌入式系统可以不选timer frequency内核时钟频率,桌面推荐"1000 hz",服务器推荐"100 hz"或"250 hz"kexec system call提供kexec系统调用,可以不必重启而切换到另一个内核kernel crash dumps被kexec启动后产生内核崩溃转储physical address where the kernel is loaded内核加载的物理地址,除非你知道自己在做什么,否则不要修改.在提供kexec系统调用的情况下可能要修改它support for hot-pluggable cpus对热插拔cpu提供支持compat vdso support如果glibc版本大于等于2.3.3就不选,否则就选上power management options电源管理选项power management support电源管理有apm和acpi两种标准且不能同时使用.即使关闭该选项,x86上运行的linux也会在空闲时发出hlt指令将cpu进入睡眠状态legacy power management api传统的电源管理api,比如软关机和系统休眠等接口power management debug support仅供调试使用driver model /sys/devices/.../power/state files内核帮助文档反对使用该选项,即将被废除acpi (advanced configuration and power interface) support必须运行acpid守护程序acpi才能起作用.acpi是为了取代apm而设计的,因此应该尽量使用acpi而不是apmac adapter如果你的系统可以在ac和电池之间转换就可以选battery通过/proc/acpi/battery向用户提供电池状态信息,用电池的笔记本可以选button守护程序捕获power,sleep,lid按钮事件,并根据/proc/acpi/event做相应的动作,软件控制的poweroff需要它video仅对集成在主板上的显卡提供acpi2.0支持,且不是所有集成显卡都支持generic hotkey统一的热键驱动,建议不选fan允许通过用户层的程序来对系统风扇进行控制(开,关,查询状态),支持它的硬件并不多dock支持由acpi控制的集线器(docking stations)processor让acpi处理空闲状态,并使用acpi c2和c3处理器状态在空闲时节省电能,同时它还被cpufreq的"performance-state drivers"选项所依赖thermal zone系统温度过高时可以利用acpi thermal zone及时调整工作状态以避免你的cpu被烧毁asus/medion laptop extrasasus笔记本专用,以提供额外按钮的支持,用户可以通过/proc/acpi/asus来打开或者关闭lcd的背光/调整亮度/定制led的闪烁指示等功能ibm thinkpad laptop extrasibm thinkpad专用toshiba laptop extrastoshiba笔记本专用disable acpi for systems before jan 1st this year输入四位数的年份,在该年的1月1日前不使用acpi的功能("0"表示一直使用)debug statements详细的acpi调试信息,不搞开发就别选power management timer support这个timer在所有acpi兼容的平台上都可用,且不会受pm功能的影响,建议总是启用它.如果你在kernel log中看到了'many lost ticks'那就必须启用它acpi0004,pnp0a05 and pnp0a06 container driver支持内存和cpu的热插拔smart battery system支持依赖于i2c的"智能电池".这种电池非常老旧且罕见,还与当前的acpi标准兼容性差apm (advanced power management) bios supportapm在smp机器上必须关闭,一般来说当前的笔记本都支持acpi,所以应尽量关闭该该选项ignore user suspend只有nec versa m系列的笔记本才需要选择这一项enable pm at boot time系统启动时即启用apm,选上这个选项能让系统自动的进行电源管理,但常常导致启动时死机make cpu idle calls when idle系统空闲时调用空闲指令(halt),只有老式的cpu才需要选它,且对于smp系统必须关闭enable console blanking using apm在屏幕空白时关闭lcd背光,事实上对所有的笔记本都无效rtc stores time in gmt将硬件时钟应该设为格林威治时间,否则视为本地时间.建议你使用gmt,这样你无须为时区的改变而担心allow interrupts during apm bios calls允许apm的bios调用时中断,ibm thinkpad的一些新机器需要这项.如果休眠时挂机(包括睡下去就醒不来),可以试试它use real mode apm bios call to power off此驱动为某些有bug的bios准备,如果你的系统不能正常关机或关机时崩溃,可以试试它cpu frequency scaling允许动态改变cpu主频,达到省电和降温的目的,必须同时启用下面的一种governor才行enable cpufreq debugging允许对cpufreq进行调试cpu frequency translation statistics通过sysfs文件系统输出cpu频率变换的统计信息cpu frequency translation statistics details输出详细的cpu频率变换统计信息default cpufreq governor默认的cpu频率调节器'performance' governor'性能'优先,静态的将频率设置为cpu支持的最高频率'powersave' governor'节能'优先,静态的将频率设置为cpu支持的最低频率'userspace' governor for userspace frequency scaling既允许手动调整cpu频率,也允许用户空间的程序动态的调整cpu频率(需要额外的调频软件,比如cpufreqd)'ondemand' cpufreq policy governor'立即响应',周期性的考察cpu负载并自动的动态调整cpu频率(不需要额外的调频软件),适合台式机'conservative' cpufreq governor'保守',和'ondemand'相似,但是频率的升降是渐变式的(幅度不会很大),更适合用于笔记本/pda/amd64环境acpi processor p-states driver将acpi2.0的处理器性能状态报告给cpufreq processor drivers以决定如何调整频率,该选项依赖于acpi->processor{省略的部分请按照自己实际使用的cpu选择}/proc/acpi/processor/../performance interface内核帮助文档反对使用该选项,即将被废除relaxed speedstep capability checks放松对系统的speedstep兼容性检查,仅在某些老旧的intel系统上需要打开bus options (pci, pcmcia, eisa, mca, isa)总线选项pci supportpci支持,如果使用了pci或pci express设备就必选pci access modepci访问模式,强列建议选"any"(系统将优先使用"mmconfig",然后使用"bios",最后使用"direct"检测pci设备)pci express supportpci express支持(目前主要用于显卡和千兆网卡)pci express hotplug driver如果你的主板和设备都支持pci express热插拔就可以选上use polling mechanism for hot-plug events对热插拔事件采用轮询机制,仅用于测试目的root port advanced error reporting support由pci express aer驱动程序处理发送到root port的错误信息message signaled interrupts (msi and msi-x)pci express支持两类中断:intx使用传统的irq中断,可以与现行的pci总线的驱动程序和操作系统兼容;msi则是通过inbound memory write触发和发送中断,更适合多cpu系统.可以使用"pci=nomsi"内核引导参数关闭msipci debugging将pci调试信息输出到系统日志里interrupts on hypertransport devices允许本地的hypertransport设备使用中断isa support现在基本上没有isa的设备了,如果你有就选吧mca support微通道总线,老旧的ibm的台式机和笔记本上可能会有这种总线natsemi scx200 support在使用amd geode处理器的机器上才可能有pccard (pcmcia/cardbus) supportpcmcia卡(主要用于笔记本)支持enable pccard debugging仅供调试16-bit pcmcia support一些老的pcmcia卡使用16位的cardbus32-bit cardbus support当前的pcmcia卡基本上都是32位的cardbuscardbus yenta-compatible bridge support使用pcmcia卡的基本上都需要选择这一项,子项请按照自己实际使用的pcmcia卡选择{省略的部分请按照自己实际使用的pcmcia卡选择}pci hotplug supportpci热插拔支持,如果你有这样的设备就到子项中去选吧executable file formats可执行文件格式kernel support for elf binarieself是开放平台下最常用的二进制文件格式,支持动态连接,支持不同的硬件平台.除非你知道自己在做什么,否则必选kernel support for a.out and ecoff binaries早期unix系统的可执行文件格式,目前已经被elf格式取代kernel support for misc binaries允许插入二进制的封装层到内核中,使用java,.net,python,lisp等语言编写的程序时需要它networking网络networking options网络选项network packet debugging在调试不合格的包时加上额外的附加信息,但在遇到dos攻击时你可能会被日志淹没packet socket这种socket可以让应用程序(比如tcpdump,iptables)直接与网络设备通讯,而不通过内核中的其它中介协议packet socket: mmapped io让packet socket驱动程序使用io映射机制以使连接速度更快unix domain sockets一种仅运行于本机上的效率高于tcp/ip的socket,简称unix socket.许多程序都使用它在操作系统内部进行进程间通信(ipc),比如x window和syslogtransformation user configuration interface为ipsec(可在ip层加密)之类的工具提供xfrm用户配置接口支持transformation sub policy supportxfrm子策略支持,仅供开发者使用pf_key sockets用于可信任的密钥管理程序和操作系统内核内部的密钥管理进行通信,ipsec依赖于它tcp/ip networkingtcp/ip协议当然要选ip: multicasting群组广播,似乎与网格计算有关,仅在使用mbone的时候才需要ip: advanced router高级路由,如果想做一个路由器就选吧ip: policy routing策略路由ip: equal cost multipath用于路由的基于目的地址的负载均衡ip: verbose route monitoring显示冗余的路由监控信息ip: kernel level autoconfiguration在内核启动时自动配置ip地址/路由表等,需要从网络启动的无盘工作站才需要这个东西ip: tunnelingip隧道,将一个ip报文封装在另一个ip报文内的技术ip: gre tunnels over ip基于ip的gre(通用路由封装)隧道ip: multicast routing多重传播路由ip: arp daemon support这东西尚处于试验阶段就已经被废弃了ip: tcp syncookie support抵抗syn flood攻击的好东西,要启用它必须同时启用/proc文件系统和"sysctl support",然后在系统启动并挂载了/proc之后执行"echo 1 >/proc/sys/net/ipv4/tcp_syncookies"命令ip: ah transformationipsec验证头(ah)实现了数据发送方的验证处理,可确保数据既对于未经验证的站点不可用也不能在路由过程中更改ip: esp transformationipsec封闭安全负载(esp)实现了发送方的验证处理和数据加密处理,用以确保数据不会被拦截/查看或复制ip: ipcomp transformationipcomp(ip静荷载压缩协议),用于支持ipsecip: ipsec transport modeipsec传输模式,常用于对等通信,用以提供内网安全.数据包经过了加密但ip头没有加密,因此任何标准设备或软件都可查看和使用ip头ip: ipsec tunnel modeipsec隧道模式,用于提供外网安全(包括虚拟专用网络).整个数据包(数据头和负载)都已经过加密处理且分配有新的esp头/ip头和验证尾,从而能够隐藏受保护站点的拓扑结构ip: ipsec beet modeipsec beet模式inet: socket monitoring interfacesocket监视接口,一些linux本地工具(如:包含ss的iproute2)需要使用它tcp: advanced congestion control高级拥塞控制,如果没有特殊需求(比如无线网络)就别选了,内核会自动将默认的拥塞控制设为"cubic"并将"reno"作为候补ip: virtual server configurationip虚拟服务器允许你基于多台物理机器构建一台高性能的虚拟服务器,不玩集群就别选了the ipv6 protocol你要是需要ipv6就选吧netlabel subsystem supportnetlabel子系统为诸如cipso与ripso之类能够在分组信息上添加标签的协议提供支持,如果你看不懂就别选了security marking对网络包进行安全标记,类似于nfmark,但主要是为安全目的而设计,如果你不明白的话就别选。

Linux内核调试方法总结

Linux内核调试方法总结

二 内核中的bug
内核中的bug也是多种多样的。它们的产生有无数的原因,同时表象也变化多端。从隐藏在源代码中的错误到展现在目击者面前的bug,其发作往往是一系列连锁反应的事件才可能出发的。虽然内核调试有一定的困 难,但是通过你的努力和理解,说不定你会喜欢上这样的挑战。
三 内核调试配置选项
学习编写驱动程序要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核开发者已经建立了多项用于调试的功能。但是由于这些功能会造成额外的输出,并导致能下降,因此发行版厂商通常会禁止 发行版内核中的调试功能。
5 } while (0)
6 #endif
7
8 #ifndef HAVE_ARCH_BUG_ON
9
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while(0)
10 #endif
当调用这两个宏的时候,它们会引发OOPS,导致栈的回溯和错误消息的打印。 ※ 可以把这两个调用当作断言使用,如:BUG_ON(bad_thing);
6 [*] Spinlock debugging: sleep-inside-spinlock checking
7
[*] Compile the kernel with debug info
8 Device Drivers --->
9
Generic Driver Options --->
10
[*] Driver Core verbose debug messages
6 dmesg dmesg 命令也可用于打印和控制内核环缓冲区。这个命令使用 klogctl 系统调用来读取内核环缓冲区,并将它转发到标准输出(stdout)。这个命令也可以用来清除内核环缓冲区(使用 -c 选项),设置控制台日志 级别(-n 选项),以及定义用于读取内核日志消息的缓冲区大小(-s 选项)。注意,如果没有指定缓冲区大小,那么 dmesg 会使用 klogctl 的SYSLOG_ACTION_SIZE_BUFFER 操作确定缓冲区大小。

Linux内核定制优化配置

Linux内核定制优化配置

Linux内核定制优化配置五、Linux内核裁减(1)安装module-init-tools-3.0.tar.gz: # tar -zxvf module-init-tools-3.0.tar.gz # cd module-init-tools-3.0 # ./configure --prefix=/sbin # make# make install# ./generate-modprobe.conf /etc/modprobe.conf这个脚本程序会读取原配置文件modules.conf的内容,经过格式转化后,生成新的配置文件/etc/modprobe.conf。

不知道为什么,我用module-init-tools-3.1时make出错。

如果改用3.0的就没事了。

(2)安装modutils-2.4.25-8.9.i386.rpm: # rpm -Uvih modutils-2.4.25-8.9.i386.rpm对modutils进行升级。

-U, --upgrade=+ upgrade package(s)(3)安装新内核:将新内核copy到/usr/src下,#tar xzvf linux-2.6.38.4.tar.gz -----解压缩.II. 将名为linux的符号链接删掉,这是旧版本内核的符号链接. #ln -s linux-2.6.38.4 linux ------建立linux-2.6.38.4的符号链接linux.(4)设置内核. # cd /usr/src/linux# make mrproper -----删除不必要的文件和目录. #make menuconfig 生成一个.config文件Linux 内核的裁剪与编译看上去是个挺简单的过程。

只是对配置菜单的简单选择。

但是内核配置菜单本身结构庞大,内容复杂。

具体如何选择却难住了不少人。

因此熟悉与了解该菜单的各项具体含义就显得比较重要。

Linux操作系统的优化方法详解

Linux操作系统的优化方法详解

Linux操作系统的优化方法详解Linux操作系统的优化是保护系统安全的重要措施。

下面由店铺为大家整理了Linux操作系统的优化方法详解的相关知识,希望对大家有帮助!Linux操作系统的优化方法详解Linux操作系统的优化方法1、虚拟内存优化首先查看虚拟内存的使用情况,使用命令# free查看当前系统的内存使用情况。

一般来说,linux的物理内存几乎是完全used。

这个和windows 非常大的区别,它的内存管理机制将系统内存充分利用,并非windows无论多大的内存都要去使用一些虚拟内存一样。

这点需要注意。

Linux下面虚拟内存的默认配置通过命令#cat/proc/sys/vm/freepages可以查看,显示的三个数字是当前系统的:最小内存空白页、最低内存空白页和最高内存空白。

注意,这里系统使用虚拟内存的原则是:如果空白页数目低于最高空白页设置,则使用磁盘交换空间。

当达到最低空白页设置时,使用内存交换(注:这个是我查看一些资料得来的,具体应用时还需要自己观察一下,不过这个不影响我们配置新的虚拟内存参数)。

一般来讲在配置系统分配的虚拟内存配置上,我个人认为增大最高内存空白页是一种比较好的配置方式,以1G的内存配置为例: 可将原来的配置比例修改为:204840966444通过命令# echo"204840966444" > /proc/sys/vm/freepages因为增加了最高空白页配置,那么可以使内存更有效的利用。

Linux操作系统的优化方法2、硬盘优化如果你是scsi硬盘或者是ide阵列,可以跳过这一节,这节介绍的参数调整只针对使用ide硬盘的服务器。

我们通过hdparm程序来设置IDE硬盘,使用DMA和32位传输可以大幅提升系统性能。

使用命令如下:#/sbin/hdparm -c 1 /dev/hda此命令将第一个IDE硬盘的PCI总线指定为32位,使用 -c 0参数来禁用32位传输。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux 2.6.31内核优化指南作者:Ken WuEmail: ken.wug@介绍本文档是一篇关于Linux Kernel 2.6.31的最简优化指南。

作者旨在编译一份性能最佳且适合普通Application/Server开发用的内核。

(非生产环境)本文提及的内核调优,主要是通过选择最佳编译选项,删除无用驱动,减少内核尺寸,关闭部分安全特性等方式来进行的。

优化后的效果,主要体现在OS启动时间,启动后的内存占用以及应用程序运行性能。

由于作者水平有限,如果描述错误,还请不吝指教。

运行环境虚拟机Virtualbox 3.1.4CPU Core 2 Duo P9500 2.53G双核开启vt-x, APIC磁盘虚拟10G的SATA磁盘内存分了1G物理内存网卡虚拟AMD PCNet32 100M其他USB,串口,显卡,声卡全关作者是在虚拟机中编译的内核,如果你与作者的运行环境不同,则本文档中的部分描述可能会与你的实际情况有一定出入。

不过,相信大部分用户在看到选项释义时,能做出适合自己的选择。

说明下列选项中,通过"// "注释的行,代表金国步写的内核选项简介中未提及的选项释义。

通过红色"<==="注释的行,代表内核默认开启,本文档推荐关闭的选项,释义部分会给出关闭的理由。

参考资料金国步写的内核选项简介Linux Kernel DatabaseLinuxsir BBS优化前后性能对比项目优化前优化后内核尺寸 4.1M 1.6M启动时间(含dhcp+默认init service)22s14s启动后的内存占用25M22MAPP SPEC测试成绩待测待测General setup --->[ ] Prompt for development and/or incomplete code/drivers <===显示尚在开发中或尚未完成的代码和驱动.我不是内核或驱动开发人员。

() Local version - append to kernel release[ ] Automatically append version information to the version string Kernel compression mode (Bzip2) ---> <===对比默认的Gzip,Bzip2拥有更高的压缩比[*] Support for paging of anonymous memory (swap)[*] System V IPC[*] BSD Process Accounting[ ] BSD Process Accounting version 3 file format[ ] Export task/process statistics through netlink (EXPERIMENTAL) <===体验类选项一律关[ ] Auditing support <===给SELinux提供支持。

我的使用场景主要是开发应用程序,不需要那么高的安全性,另外安全总是以牺牲性能为代价RCU Subsystem ---> // 非对称读写锁系统是一种新的kernel锁机制,适用于读多写少环境RCU Implementation (Classic RCU) ---> <===选择标准的RCU系统,tree-base是给拥有大规模CPU集群的SMP系统用的< > Kernel .config support(18) Kernel log buffer size (16 => 64KB, 17 => 128KB)[] Control Group support ---><=== cgroups支持,文档资料,cgroups主要作用是给进程分组,并可以动态调控进程组的CPU占用率。

比如A进程分到apple组,给予20%CPU占用率,E进程分easy组,给予50%CPU占用率,最高100%。

我目前没有此类应用场景,用到时会选择将其编译进去。

[] Kernel->user space relay support (formerly relayfs) <===在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口,我目前没有此类应用场景-*- Namespaces support[] UTS namespace <===我没有已安装的应用程序要用到UTS ns[] IPC namespace <===我没有已安装的应用程序要用到IPC ns[] Initial RAM filesystem and RAM disk (initramfs/initrd) support <===用于在真正内核装载前,做一些操作(俗称两阶段启动),比如加载module,mount一些非root分区,提供灾难恢复shell环境等,资料,我是期望直接从kernel image直接启动,所以没选它[*] Optimize for size[ ] Configure standard kernel features (for small systems) ---> -*- Load all symbols for debugging/ksymoops[ ] Do an extra kallsyms pass <===除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项Performance Counters --->[*] Kernel Performance Counters // CPU性能监听器,包括CPU 同一时间执行指令数,cache miss数,分支预测失败次数(Branch misprediction)。

调优其他程序时或许会用到,比如JVM[ ] Strip assembler-generated symbols during link[ ] Disable heap randomizationChoose SLAB allocator (SLUB (Unqueued Allocator)) --->[ ] Profiling support (EXPERIMENTAL) <===我不是内核开发人员,不需要profile内核[] Activate markers <===一种运行时状态分析诊断工具,类似instrumentation,资料,我用不到[ ] Kprobes <===我不是内核开发人员,不需要调试内核GCOV-based kernel profiling --->[ ] Enable gcov-based kernel profiling[*] Enable loadable module support ---> //我很少使用dynamic module loading,所以,下面的选项只留一个unloading即可(默认)--- Enable loadable module support[ ] Forced module loading[*] Module unloading[ ] Module versioning support[ ] Source checksum for all modules-*- Enable the block layer --->--- Enable the block layer[*] Support for large (2TB+) block devices and files //大硬盘支持,SATA设备如果不选,会发生kernel panic,具体原因未知[ ] Block layer SG support v4 <===支持通用scsi块设备第4版,我用的是SATA[ ] Block layer data integrity supportIO Schedulers ---> // IO调度器支持,不同程序可以会选用不同的调度策略,这里我们不要动他<*> Anticipatory I/O scheduler<*> Deadline I/O scheduler<*> CFQ I/O schedulerDefault I/O scheduler (CFQ) --->Processor type and features --->[*] Tickless System (Dynamic Ticks) // CPU节能,动态时间片意思是当CPU处于空闲时,降低内核定时器的轮询频率[*] High Resolution Timer Support //我有的时候要测试Real Time JVM,希望内核能支持这种高响应速度的内核定时器,一般用户可关闭[*] Symmetric multi-processing support[ ] Support sparse irq numbering <===如果你想支持大量CPU,又想使用较低的内核内存占用,请启用它。

我只有单块CPU[*] Enable MPS table//让多核/多CPU系统支持ACPI[ ] Support for big SMP systems with more than 8 CPUs[ ] Support for extended (non-PC) x86 platforms <===我是X86平台,不需要再支持其他平台[*] Single-depth WCHAN output //跟proc相关的最好不要关[ ] Paravirtualized guest support --->--- Paravirtualized guest support[ ] MemtestProcessor family (Core 2/newer Xeon) ---> <===这里请选择对应的CPU,我是core 2 duo[ ] Generic x86 support <===通用x86支持,如果你的CPU能够在上述"Processor family"中找到就别选了[*] HPET Timer Support(4) Maximum number of CPUs <===我的CPU是双核,算上超线程HT最多虚拟4颗逻辑CPU,所以我选4,默认是8[*] SMT (Hyperthreading) scheduler support[*] Multi-core scheduler supportPreemption Model (Voluntary Kernel Preemption (Server)) ---> <===这里我选择了Server,它最贴近我的使用场景[*] Reroute for broken boot IRQs //防止同时收到多个boot IRQ(中断)时,系统混乱[*] Machine Check Exception[ ] Use legacy machine check code (will go away)[*] Intel MCE features[ ] AMD MCE features <===我是intel CPU[ ] Support for old Pentium 5 / WinChip machine checks< > Machine check injector support< > Toshiba Laptop support< > Dell laptop support[ ] Enable X86 board specific fixups for reboot <===修正某些旧x86主板的重起bug,这种主板基本绝种了<*> /dev/cpu/microcode - microcode support[*] Intel microcode patch loading support[ ] AMD microcode patch loading support <===我是intel CPU<*> /dev/cpu/*/msr - Model-specific register support<*> /dev/cpu/*/cpuid - CPU information support< > /sys/kernel/debug/x86/cpu/* - CPU Debug supportHigh Memory Support (4GB) --->(4096) Low address space to protect from user allocation[*] Allocate 3rd-level pagetables from highmem<===在内存很多(大于4G)的机器上将用户空间的页表放到高位内存区,以节约宝贵的低端内存,我只虚拟了1G[ ] Check for low memory corruption <===低位内存脏数据检查,默认是每60秒检查一次。

相关文档
最新文档