内核引导参数精选【zz鸿飞无痕】

 http://hi.baidu.com/smilewwh/blog/item/fcdff8f93384c75a242df2e7.html

内核引导参数精选

2007年11月14日 星期三 15:55
==================
概述
==================

内核引导参数大体上可以分为两类:一类与设备无关、另一类与设备有关。内核源码树下的 Documentation/kernel-parameters.txt 文件列出了所有可用的引导参数,并指明了处理每个参数的具体文件。
注意:对于模块而言,引导参数只能用于直接编译到核心里的模块,格式是使用"模块名.参数=值"模式指定,比如: usbcore.blinkenlights=1 。动态加载的模块可以在 modprobe 命令行上指定相应的参数值,比如:modprobe usbcore blinkenlights=1 。

可以使用"modinfo -p ${modulename}"命令显示可加载模块的所有可用参数。已经加载到内核中的模块会在 /sys/module/${modulename}/parameters/ 中显示出其参数,并且某些参数的值还可以在运行时通过"echo -n ${value} > /sys/module/${modulename}/parameters/${parm}"命令修改。

与设备有关的引导参数多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导参数。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导参数,那么就到 drivers/scsi 目录下寻找到 aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导参数说明。大多数参数是通过"__setup(... , ...)"函数设置的,逗号前的部分就是引导参数的名称,后面的部分就是处理这些参数的函数名。[提示]你可以在源码树的根目录下试一试 grep -r '/b__setup *(' * 命令。

[注意]多个参数之间用空格分割,而每个参数的值中不能包含空白,参数值是一个逗号分割的列表。
正确:ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1
错误:ether = 9, 0x300, 0xd0000, 0xd4000, eth0 root = /dev/hda1
在内核运行起来之后,可以通过 cat /proc/cmdline 命令查看当初使用的引导参数以及相应的值。

所有引导参数都是大小写敏感的!


==================
内核如何处理引导参数
==================

绝大部分的内核引导参数的格式如下(每个参数的值列表中最多只能有十项):
name[=value_1][,value_2]...[,value_10]

如果"name"不能被识别并且满足"name=value"的格式,那么则被解译为一个环境变量(比如"TERM=linux"或"BOOT_IMAGE=vmlinuz.bak"),否则将被原封不动的传递给 init 程序(比如"single")。

内核可以接受的参数个数没有限制,但是整个命令行的总长度(参数/值/空格全部包含在内)却是有限制的,一般是 256-4096 之间,定义在 include/asm/setup.h 中的 COMMAND_LINE_SIZE 宏中。


==================
标记说明
==================

并不是所有的参数都是永远可用的,只有在特定的模块存在并且相应的硬件也存在的情况下才可用。
引导参数上面的方括号说明了其依赖关系,其中使用的标记解释如下:
代码:
        
        
ACPI 高级配置与电源接口
APIC 高级可编程中断控制器
HW 相应的硬件设备存在
IA-32 IA-32(i386)体系结构
X86-64 X86-64体系结构,更多参数在 Documentation/x86_64/boot-options.txt 中描述
IOSCHED 启用了多个IO调度器
LIBATA 启用了Libata驱动
LOOP 启用了Loopback设备
NET 启用了网络支持
PCI PCI总线支持
PNP 即插即用支持
PS2 PS/2支持
SCSI 许多SCSI设备的参数在 Documentation/scsi/ 中描述
SMP 对称多处理器
USB USB支持
USBHID USB人机界面设备
VT 虚拟终端(Virtual terminal)

此外,下面的标记的含义与在逻辑上与上面的有所不同:

BUGS= 用于在特定的体系结构上解决某些CPU的bug
KNL 是一个内核启动参数
BOOT 是一个引导程序参数
标记为"BOOT"的参数实际上由引导程序使用,对内核本身没有直接的意义。没有特别的需求,请不要修改此类参数的语法,更多信息请阅读<Documentation/i386/boot.txt>文档。


========================
控制台
========================
这些参数控制着控制台或内核日志,在何处显示内核调试信息和错误信息。

[KNL]
console=tty<N>
设置输出控制台使用第N号虚拟控制台。

[IA-32,X86-64]
earlyprintk=vga
在传统的控制台初始化之前,在VGA上显示内核日志信息。如果不使用此参数那么这些信息你可用永远没机会看见。

loglevel={0|1|2|3|4|5|6|7}
所有小于该数字的内核信息都将在控制台上显示出来。这个级别可以使用 klogd 程序或者修改 /proc/sys/kernel/printk 文件进行调整。取值范围是"0"(不显示任何信息)到"7"(显示所有级别的信息)。建议至少设为"4"。[提示]级别"7"要求编译时加入了调试支持。

[KNL]
initcall_debug
跟踪所有内核初始化过程中调用的函数。有助于诊断内核在启动过程中死在了那个函数上面。


========================
中断
========================
这些参数影响内核与处理中断的硬件之间的接口。常见的中断控制器有两种:传统的8259A和新式的APIC,前者也被称为"PIC"。8259A只适合单 CPU的场合,而APIC则能够把中断传递给系统中的每个CPU,从而充分挖掘SMP体系结构的并行性。所以8259A已经被淘汰了。
APIC系统由3部分组成:APIC总线、IO-APIC、本地APIC。
每个CPU中集成了一个本地APIC,负责传递中断信号到处理器。而IO-APIC是系统芯片组中一部分,负责收集来自I/O设备的中断信号并发送到本地APIC。APIC总线则是连接IO-APIC和各个本地APIC的桥梁。

[APIC,i386]
apic={quiet|verbose|debug}
在初始化 APIC 和 IO-APIC 组件的时候,显示调试信息的详细程度。默认是"quiet"。

[SMP,APIC]
noapic
强制内核禁止使用IO-APIC(输入输出高级可编程输入控制器)

[IA-32,APIC]
lapic
强制内核启用 local APIC ,即使 BIOS 已经禁用了。
nolapic
强制内核禁用 local APIC ,即使 BIOS 已经启用了。

[IA-32,SMP,KNL]
noirqbalance
禁止使用内核中的中断平衡逻辑

[HW]
irqfixup
用于修复基本的中断问题:当一个中断没有被处理时搜索所有可用的中断处理器。用于解决某些firmware缺陷。
irqpoll
用于修复更进一步的中断问题:当一个中断没有被处理时搜索所有可用的中断处理器,并且对每个时钟中断都进行搜索。用于解决某些严重的firmware缺陷。

[IA-32]
noirqdebug
默认情况下,内核将探测并且禁止未处理的中断源,以免引起内核其他部分的响应问题,这个选项禁止该功能。


========================
内存
========================

[KNL,BOOT]
highmem=nn[KMG]
强制指定highmem区域的大小,甚至在默认没有highmem的机器上也能工作。这个选项还可以用来在大内存的机器上强制减少highmem区域的大 小。内核使用低于896M的"直接映射物理内存"很方便,但使用大于896M的部分(highmem)却比较麻烦,所以系统在给用户进程分配内存时会优先 使用highmem。对于小于等于 1G 内存的用户来说,则无需关心这个问题。

[HW,IA-32]
hugepages=<NUM>
指定 HugeTLB 页的最大数量,仅在内核启用了CONFIG_HUGETLBFS之后才有效。大多数现代计算机体系结构提供对多页面大小的支持,比如IA-32结构支持 4K和4M(PAE模式为2M)两种页面。因此Linux将物理内存划分成许多固定大小的页面(默认大小为 4k),每个页对应一个page结构,这些结构组成一个mem_map[]数组。TLB(Translation Lookaside Buffer)是虚拟地址到物理地址的翻译缓冲区,这种缓冲区在处理器上是很宝贵的,操作系统总是尝试将有限的TLB资源发挥到极致。特别是能够轻松获得 若干G内存的时候(>4G),这种优化就显得尤为关键。而 HugeTLB 特性则允许将某些页的尺寸增大到 4MB 。用户可以使用mmap系统调用或者标准的SYSv共享内存调用(shmget,shmat)来使用hugepage。可以使用 grep Huge /proc/meminfo 命令查看是否开启了 hugepage 支持。

[KNL]
ihash_entries=<NUM>
内核会在内存中缓存一定数量的inode结构来加速文件访问,每个inode对应一个文件(不同于文件系统中的inode概念),包含文件访问权限/属主 /组/大小/生成时间/访问时间/最后修改时间等信息。这些inode保存在一个哈希表中。这个值用于指定这个哈希表的最大项数。比如 1G 内存推荐为 16384 ,4G 及以上内存推荐 131072 ,但你可以根据自己硬盘上可能被访问的文件数量对默认值进行调整(注意需要考虑哈希值的碰撞)。

[KNL,BOOT]
max_addr=nn[KMG]
内核将忽略在该物理地址以上的内存

[KNL,BOOT]
mem=nn[KMG]
强制指定内核使用多少数量的内存。缺乏远见设计的传统BIOS只能报告最大64MB内存。新的e820规范则突破了这个限制,使得BIOS可以正确报告大 于64MB的内存。如果你在老旧的机器上使用大内存就需要指定这个参数(最保险的做法是在实际内存的总数上减掉1MB)。但有时候e820报告的数量并不 准确,此时就需要使用下面的memmap参数精确指定内存映射(此时就不要使用"mem="了)。

[KNL,IA-32,X86_64]
memmap=exactmap
指定将要使用随后的"memmap=nn@ss"等参数进行精确的E820内存映射。比如对于一个4G内存的机器可能是:"memmap=exactmap memmap=640K@0 memmap=4095M@1M"。

[KNL]
memmap=nn[KMG]@ss[KMG]
强制内核只使用从ss开始的nn长度的特定内存区域。可以多次使用以指定多个区域。

[IA-32,X86-64]
noexec={on|off}
允许(on,默认)或禁止(off)内核将部分内存映射为"不可执行"区域。

[KNL,BUGS]
reserve=nn[KMG]
强制内核忽略(预留)一定量的IO内存区域

[KNL,BOOT]
vmalloc=nn[KMG]
强制指定vmalloc区域的大小。可用于增加vmalloc区域的最小尺寸(x86默认128MB),也可以用于减少vmalloc的大小,增加更多的空间用于直接映射内核RAM。

norandmaps
默认内核随机化程序启动的地址,该选项禁用该功能。该选项等价于"echo 0 > /proc/sys/kernel/randomize_va_space"命令。


========================
CPU
========================

[BUGS=IA-32]
cachesize=<NUM>
强制指定 CPU L2 cache 的大小,单位是字节。

[KNL,BUGS=IA-32]
nmi_watchdog={0|1|2|3}
设置非屏蔽中断(NMI)watchdog的特性。"0"表示禁用NMI watchdog;"1"表示使用APIC;"2"表示使用local APIC;"3"表示NMI watchdog有缺陷,因此被禁用。

[IA-32]
mce
nomce
启用/禁用Machine Check Exception功能。

[SMP]
maxcpus=<NUM>
明确指定一个SMP内核能够使用的最大CPU数量。最好使用"maxcpus=0"而不是"maxcpus=1"来禁用SMP功能。


========================
Ramdisk
========================

[BOOT]
initrd=<filename>
指定initial ramdisk的位置

[RAM]
noinitrd
禁止使用任何initial RAM disk

[RAM]
ramdisk_blocksize=<NUM>
指定ramdisk的块尺寸,默认是"1024"。

[RAM]
ramdisk_size=<NUM>
RAM disks的大小(kB),默认为4096(4MB)。


========================
根文件系统
========================

[KNL]
root=
告诉核心启动时以那个设备作为根文件系统使用,默认为编译内核时使用的设备(比如 /dev/sda1 )

[KNL]
rootdelay=<NUM>
挂载文件系统前延迟多少秒,当根文件系统在USB或FireWire设备上时常用。

[KNL]
rootflags=
设置根文件系统的挂载选项,比如"noatime,ro"。各种不同的文件系统所能使用的选项各不相同(比如 Documentation/filesystems/xfs.txt),也可以参考 mount 程序的选项。

[KNL]
rootfstype=
根文件系统的类型,比如"xfs"。


========================
init
========================

[KNL]
init=<full_path>
指定内核启动后运行的第一个程序的绝对路径。默认为"/sbin/init"。

[KNL]
rdinit=<full_path>
从ramdisk中运行的第一个程序的绝对路径,默认为"/init"。指定的文件必须是在ramdisk而不是在根文件系统中进行。

[KNL]
S
以单用户模式运行init,默认是多用户模式。


========================
ACPI
========================

[HW,ACPI,X86-64,i386]
acpi={force|off|ht|strict|noirq}
ACPI的总开关。force表示强制启用;off表示强制禁用;noirq表示不要将ACPI用于IRQ路由;ht表示只运行足够的ACPI来支持超线程;strict表示降低对不严格遵循ACPI规格的平台的兼容性。


acpi_sleep={s3_bios,s3_mode}
ACPI休眠选项。在从S3状态(挂起到内存)恢复的时候,硬件需要被正确的初始化。这对大多数硬件都不成问题,除了显卡之外,因为显卡是由BIOS初始 化的,内核无法获取必要的恢复信息(仅存在于BIOS中,内核无法读取)。这个选项允许内核以两种方式尝试使用ACPI子系统来恢复显卡的状态。

[HW,ACPI]
acpi_sci={level|edge|high|low}
ACPI系统控制终端触发器模式(System Control Interrupt trigger mode)。

[HW,ACPI]
acpi_irq_balance
使ACPI对中断请求进行平衡,在APIC模式下为默认值
acpi_irq_nobalance
ACPI不对中断请求进行平衡(默认),PIC模式下为默认值
acpi_irq_pci=<irq>,<irq>...
如果启用了irq_balance则将列出的中断号标记为已经被PCI子系统使用,可用于屏蔽某些中断。

[HW,ACPI]
acpi_os_name=
告诉ACPI BIOS操作系统的名称。常常用来哄骗某些老旧的BIOS以为运行的是Windows系统。比如"Microsoft 2001"表示WinXP,"Microsoft Windows"表示Win98。

[HW,ACPI]
acpi_serialize
强制串行化ACPI机器语言(ACPI Machine Language)方法,操作系统使用这种语言与BIOS打交道。

[HW,ACPI]
acpi_use_timer_override
对于某些有毛病的 Nvidia NF5 主板需要使用此选项才能正常使用,不过此时 HPET 将失效。

[IA-32,X86-64]
acpi_pm_good
跳过pmtimer的bug检测,强制内核假设这台机器的pmtimer没有毛病。用于解决某些有缺陷的BIOS。

[KNL,ACPI]
memmap=nn[KMG]#ss[KMG]
将从ss开始的nn长度的内存区域标记为ACPI数据。
memmap=nn[KMG]$ss[KMG]
将从ss开始的nn长度的内存区域标记为"保留"。

[ACPI]
pnpacpi=off
禁用ACPI的即插即用功能,而使用PNPBIOS来代替。

[HW,ACPI]
processor.max_cstate={0|1|2|3|4|5|6|7|8|9}
无视ACPI表报告的值,强制制定CPU的最大C-state值。这里的数字必须是一个有效的C-state值,比如Yonah处理器支持"0-4"五个 级别:C0为正常状态,其他则为不同的省电模式(数字越大表示CPU休眠的程度越深/越省电)。"9"表示超越所有的DMI黑名单限制。你的CPU的 95%的时间应该处于最深度的idle状态。
processor.nocst
不使用_CST方法来侦测C-state值,而是使用传统的FADT方法。


========================
SCSI
========================
这里只列出了SCSI子系统的通用参数。其他特定于某一种SCSI驱动的参数并未列出,请在 Documentation 目录下的 kernel-parameters.txt 文件中和 scsi 目录下寻找它们。

[SCSI]
max_luns=
限制SCSI的最大逻辑单元号(LUN,logical unit number)。取值范围在1到2^32-1之间。
max_report_luns=
限制系统能够接受的最大逻辑单元号(LUN)。取值范围在1到16384之间。


========================
PCI
========================

[PCI]
pci=option[,option...]
off [IA-32]不检测PCI总线,也就是关闭所有PCI设备。
bios [IA-32]强制使用PCI BIOS而不是直接访问硬件,这表示内核完全信任BIOS(大多数情况下它并不可信)。仅在你的机器有一个不标准的PCI host bridge的时候才用。
nobios[IA-32]强制直接访问硬件而不使用PCI BIOS,2.6.13之后这是默认值。如果你确定在内核引导时的崩溃是由BIOS所致就可以使用它。
conf1 [IA-32]强制硬件设备使用PCI Configuration Mechanism 1访问PCI Memory以与内核中的驱动程序进行通信。
conf2 [IA-32]强制硬件设备使用PCI Configuration Mechanism 2访问PCI Memory以与内核中的驱动程序进行通信。
nommconf [IA-32,X86_64]禁止为 PCI Configuration 使用 MMCONFIG 表。
nomsi [MSI]如果启用了PCI_MSI内核配置选项,那么可以使用这个参数在系统范围内禁用MSI中断。
nosort [IA-32]不在检测阶段根据PCI BIOS给出的顺序对PCI设备进行排序。进行这样的排序是为了以与早期内核兼容的方式获取设备序号。
biosirq [IA-32]使用PCI BIOS调用来获取中断路由表。这些调用在不少机器上都有缺陷,会导致系统在使用过程中挂起。但是在某些机器上却是唯一获取中断路由表的手段。如果内核无 法分配IRQ或者发现了第二个PCI总线,就可以尝试使用这个选项解决问题。
rom [IA-32]为扩展ROM分配地址空间。使用此选项要小心,因为某些设备在ROM与其它资源之间共享地址解码器。
pirqaddr=0xAAAAA [IA-32]指定物理地址位于F0000h-100000h范围之外的PIRQ表(通常由BIOS产生)的物理地址。
lastbus=N [IA-32]扫描所有总线,直到第N个总线。如果内核找不到第二条总线的时候,你就需要使用这个选项明确告诉它。
assign-busses [IA-32]总是使用你自己指定的PCI总线号(而不是firmware提供的)。
usepirqmask [IA-32]优先使用可能存在于BIOS $PIR表中的IRQ掩码。某些有缺陷的BIOS需要这个选项,特别是在HP Pavilion N5400和Omnibook XE3笔记本上。如果启用了ACPI IRQ路由的话,将不会考虑这个选项的设置。
noacpi [IA-32]不为IRQ路由或者PCI扫描使用ACPI。
routeirq 为所有PCI设备执行IRQ路由。这个通常在pci_enable_device()中执行,所有这是一个解决不调用此函数的bug驱动程序的临时解决方法。
bfsort 按照宽度优先的顺序对PCI设备进行排序。进行这样的排序是为了以与2.4内核兼容的方式获取设备序号。
nobfsort 不按照宽度优先的顺序对PCI设备进行排序。
cbiosize=nn[KMG] 从CardBus bridge 的 IO 窗口接受的固定长度的总线空间(bus space),默认值是256字节。
cbmemsize=nn[KMG] 从CardBus bridge 的 memory 窗口接受的固定长度的总线空间(bus space),默认值是64MB。


========================
网络
========================

[NET]
netdev= <irq>,<io>,<mem_start>,<mem_end>,<name>
网络设备参数。具体细节取决于不同的驱动程序,请参考各自的驱动程序文档。该选项通常不用于PCI/USB等即插即用网卡。

[KNL,NET]
rhash_entries=
设置内核路由缓冲区哈希表的大小,仅供内核网络专家使用。

[NET]
shapers=
设置内核允许使用的最大网络Shaper(限制网络速率的虚拟网络设备)。

[KNL,NET]
thash_entries=
设置内核允许使用的TCP链接哈希表的大小。


========================
硬件
========================

[USB]
nousb
禁用USB子系统。


========================
定时器
========================

[i386,x86-64]
enable_timer_pin_1
disable_timer_pin_1
启用/禁用APIC定时器的PIN1,可以用于解决某些有bug的芯片组(特别是ATI芯片组)。内核将尽可能自动探测正确的值。

[IA32/X86_64]
enable_8254_timer
disable_8254_timer
启用/禁用 在通过IO-APIC对IRQ0(时钟中断)进行路由之外,还通过8254进行路由。内核将尽可能通过检测来选择正确的值。

[IA-32,HPET]
hpet=disable
禁用HPET,转而使用PIT。

[GENERIC_TIME,IA-32,X86-64,ACPI]
clocksource={hpet|pit|tsc|acpi_pm}
强制指定clocksource来取代默认值。


========================
其他杂项
========================

[VT]
default_utf8={0|1}
在系统范围内为将所有tty默认设置为UTF-8模式。"1"表示UTF-8模式,默认值为"0"。

[IOSCHED]
elevator={"anticipatory"|"cfq"|"deadline"|"noop"}
指定默认IO调度器

[LOOP]
max_loop=<1-256>
最大允许挂载的loopback设备数。

[KNL]
panic=<seconds>
在内核发生panic之后reboot之前等候的秒数。默认值"0"表示不重启而停顿在那里。

另 :

ACPI和APIC有什麼關係?

轉貼來源︰http://mlsx.xplore.cn/read.php/239.htm

很多人問道了什麼ACPI,什麼是APIC,他們有沒有關係?名字這麼相近。下面給出我對其的一些理解,具體的解釋可以查看內核文檔庫的內核參數文件:
/usr/src/`uname -r`/Documents/kernel-parameters.txt

ACPI就是Advanced Configuration and Power Interface的縮寫,意思是「高級配置與電源接口」。這是英特爾、微軟和東芝共同開發的一種電源管理標準。
ACPI可實現以下功能:   
1、用戶可以使外設在指定時間開關;   
2、使用筆記本電腦的用戶可以指定計算機在低電壓的情況下進入低功耗狀態,以保證重要的應用程序運行;   
3、操作系統可以在應用程序對時間要求不高的情況下降低時鐘頻率;
4、操作系統可以根據外設和主板的具體需求為它分配能源;
5、在無人使用計算機時可以使計算機進入休眠狀態,但保證一些通信設備打開;
6、即插即用設備在插入時能夠由ACPI來控制。
不過,ACPI和其他的電源管理方式一樣,要想享受到上面這些功能,必須要有軟件和硬件的支持。在軟件方面,Windows 98及其後續產品和Windows 2000都對ACPI給予了全面的支持;而Linux的內核目前對此支持得並不是太理想。硬件方面比較麻煩,除了要求主板、顯卡和網卡等外設要支持 ACPI外,還需要機箱電源的配合。電源在提供5伏電壓給主板的同時,還必須使電流穩定在720毫安以上才可以,這樣它才能夠實現電腦的「睡眠」和「喚 醒」。
ACPI共有六種狀態,分別是S0到S5,它們代表的含義分別是:
S0--實際上這就是我們平常的工作狀態,所有設備全開,功耗一般會超過80W;
S1--也稱為POS(Power on Suspend),這時除了通過CPU時鐘控制器將CPU關閉之外,其他的部件仍然正常工作,這時的功耗一般在30W以下;(其實有些CPU降溫軟件就是利用這種工作原理)
S2--這時CPU處於停止運作狀態,總線時鐘也被關閉,但其餘的設備仍然運轉;
S3--這就是我們熟悉的STR(Suspend to RAM),這時的功耗不超過10W;
S4--也稱為STD(Suspend to Disk),這時系統主電源關閉,但是硬盤仍然帶電並可以被喚醒;
S5--這種狀態是最乾脆的,就是連電源在內的所有設備全部關閉,功耗為0。
我們最常用到的是S3狀態,即Suspend to RAM(掛起到內存)狀態,簡稱STR。顧名思義,STR就是把系統進入STR前的工作狀態數據都存放到內存中去。在STR狀態下,電源仍然繼續為內存等 最必要的設備供電,以確保數據不丟失,而其他設備均處於關閉狀態,系統的耗電量極低。一旦我們按下Power按鈕(主機電源開關),系統就被喚醒,馬上從 內存中讀取數據並恢復到STR之前的工作狀態。內存的讀寫速度極快,因此我們感到進入和離開STR狀態所花費的時間不過是幾秒鐘而已;而S4狀態,即 STD(掛起到硬盤)與STR的原理是完全一樣的,只不過數據是保存在硬盤中。由於硬盤的讀寫速度比內存要慢得多,因此用起來也就沒有STR那麼快了。 STD的優點是只通過軟件就能實現,比如Windows 2000就能在不支持STR的硬件上實現STD。
之前的電源管理是APM(Advanced Power Management),那麼ACPI和APM相比有什麼區別呢?

2、ACPI與APM比較
APM 1.0&1.1:由BIOS執行電源管理;
APM 1.2:操作系統定義電源管理時間,由BIOS負責執行;
ACPI:BIOS收集硬件信息,定義電源管理方案;由操作系統負責執行。
APM是一種軟件解決方案,因此是與操作系統有關的, 而ACPI是工業標準,包括了軟件和硬件方面的規範。

APIC (高級可編程中斷控制器)對計算機來講有兩個作用,
一是管理IRQ的分配,可以把傳統的16個IRQ擴展到24個(傳統的管理方式叫PIC),以適應更多的設備。
二是管理多CPU。由於Nf2主板並不支持多CPU,所以,APIC關閉直接的影響是減少了可用的IRQ。
不過,如果板卡不是非常多的話,關閉 APIC對系統是沒有什麼影響的。
要實現SMP功能,我們使用的CPU必須具備以下要求:
CPU 內部必須內置APIC單元。Intel 多處理規範的核心就是高級可編程中斷控制器(Advanced Programmable Interrupt Controllers--APICs)的使用。CPU通過彼此發送中斷來完成它們之間的通信。通過給中斷附加動作(actions),不同的CPU可以 在某種程度上彼此進行控制。每個CPU有自己的APIC(成為那個CPU的本地APIC),並且還有一個I/O APIC來處理由I/O設備引起的中斷,這個I/O APIC是安裝在主板上的,但每個CPU上的APIC則不可或缺,否則將無法處理多CPU之間的中斷協調。
APIC可能遇到的問題,很多這類問題可以通過BIOS更新來解決。
下面的是通過更改HAL類型來解決
  CPU實際運行頻率與BIOS設定頻率不符
  NF2的用戶大約有10%的會出現CPU實際運行頻率與BIOS設定頻率不符的問題。我們稱之為「頻率不對」。
  這種現象帶來的直接後果就是在測試3dmark或跑3D遊戲的時候,會感覺不流暢,也稱之為「頓」。
  一般在更改BIOS設置後、更新驅動後重啟時,用測試軟件如Aida32、MBM5等可以看到CPU的運行頻率和你在BIOS裡設置得不一樣,而且差 距很大。這個時候,用super pi測試CPU速度,會比平常花費時間長好幾秒,用3dmark跑測試,會比平常低幾百分甚至上千分。在3dmark中看到的CPU頻率,也與BIOS設 定不符合。
  如果出現這種情況,則屬於我們所討論的「頻率不對」的問題。
  不過,不是所有的3D遊戲「頓」都是這個原因。判斷的方法是:如果你只有個別遊戲「頓」,或者用上述軟件測試頻率正確,就不是此問題。
  如果判斷確實屬此問題,解決的方法也很簡單,經過網友討論,只要關閉APIC功能即可。(注意,是APIC,不是ACPI)。

有一些服務器(比如IBM的,HP的),安裝LINUX時,會給出內核的錯誤,導致無法安裝,這個時候可以在安裝的時候輸入
linux acpi=off noapic
應該是安裝上的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值