diff options
author | Xin LI <delphij@FreeBSD.org> | 2005-04-06 11:46:30 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2005-04-06 11:46:30 +0000 |
commit | 5174d5c33475cad1b6540ea9890645aec32aeb27 (patch) | |
tree | badde02e79206ceb6d0e1614c62ee289f2d1265b /zh_CN.GB2312/books/handbook | |
parent | 5ebb842897cc1606e71e7cd2a187b305833b0a38 (diff) |
Notes
Diffstat (limited to 'zh_CN.GB2312/books/handbook')
-rw-r--r-- | zh_CN.GB2312/books/handbook/config/chapter.sgml | 450 |
1 files changed, 284 insertions, 166 deletions
diff --git a/zh_CN.GB2312/books/handbook/config/chapter.sgml b/zh_CN.GB2312/books/handbook/config/chapter.sgml index c4983bd5b7..82b9f9405d 100644 --- a/zh_CN.GB2312/books/handbook/config/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/config/chapter.sgml @@ -1,7 +1,7 @@ <!-- The FreeBSD Chinese Documentation Project - Original Revision: 1.181 + Original Revision: 1.206 $FreeBSD$ --> @@ -284,36 +284,32 @@ <indexterm><primary>服务</primary></indexterm> - <para>很多 &os; 用户选择用ports来安装第三方软件。 - 大多数情况下需要一种方式来配置软件, - 这种方式可以让软件在系统初始化之后就启动。 - 很多软件需要在系统初始化时就启动,类似于其中的两个 - <filename role="package">mail/postfix</filename> 或者 - <filename role="package">www/apache13</filename>。 - 因此必须有一个行之有效的方法来配合第三方软件, - 偶然的出错会导致程序不能正确启动。</para> + <para>许多用户会选择使用 Ports Collection 来在 &os; 上安装第三方软件。 + 很多情况下这可能需要进行一些配置以便让这些软件能够在系统初始化的过程中启动。 服务, + 例如 <filename role="package">mail/postfix</filename> 或 + <filename role="package">www/apache13</filename> + 就是这些需要在系统初始化时启动的软件包中的两个典型代表。 + 这一节解释了启动第三方软件所需要的步骤。</para> <para>&os; 包含的大多数服务,例如 &man.cron.8;, 就是通过系统启动脚本启动的。 这些脚本也许会有些不同, 这取决于 &os; 版本。 但是不管怎样, 需要考虑的一个重要方面是他们的启动配置文件要能被基本启动脚本识别捕获。</para> - <para>自从 rcNG 出现以来,系统为第三方软件初始化变得清晰而有条理了。 - 应用程序将会把一个简单的启动脚本放在 - <filename role="directory">/usr/local/etc/rc.d</filename> - 目录,系统初始化脚本会读取这个目录下面的脚本。 - 这些脚本在系统启动之后被执行。</para> + <para>在 rcNG 出现之前, 应用程序会把一个简单的启动脚本扔到 + <filename class="directory">/usr/local/etc/rc.d</filename> + 目录中, 这个目录中的脚本会被系统初始化脚本读取。</para> - <para>当很多人花费时间把旧的配置格式融入到新系统的时候, - 仍然残留有一些第三方软件需要把脚本放在上述目录中。 - 这些脚本中的细微差别依赖于 rcNG 是否被使用。 - &os; 5.1 之前的所有版本并不需要额外的配置; - 当然,大多数情况下这些久经考验的脚本都会工作的很好。</para> + <para>尽管很多人已经花费了相当多的时间来把旧的配置方式融入到新系统中, + 仍然有许多第三方软件需要把脚本放到上面提到的目录中。 + 是否使用 rcNG 会对这些脚本的执行带来一些变化。 + 在 &os; 5.1 之前采用的是旧式的配置, + 当然, 绝大多数情况下, 新式的脚本也会工作的很好。</para> <para>每个脚本都应该遵守 &os; 版本所需求的一些规定: 每个脚本必须在文件名最后添加一个 <filename>.sh</filename> 的扩展名,并且这个脚本能被系统执行。 - 后者可以通过 <command>chmod</command> 把权限设置为 + 后者可以通过 <command>chmod</command> 命令把权限设置为 <literal>755</literal>来实现。 它还应该能接受 <literal>start</literal> 选项来启动程序并且接受 <literal>stop</literal> @@ -339,12 +335,9 @@ esac exit 0</programlisting> - <para>这个脚本提供了一个 <literal>stop</literal> 和 - <literal>start</literal> 选项, 用于操作这里称之为 - <literal>utility</literal> 的应用程序。 可以在 - <filename>/etc/rc.conf</filename> 中加入这样一行:</para> - - <programlisting>utility_enable="YES"</programlisting> + <para>这个脚本提供了 <literal>stop</literal> 和 + <literal>start</literal> 两个选项, 用以操作 + <literal>utility</literal>。</para> <para>可以用如下方法来启动:</para> @@ -401,39 +394,45 @@ run_rc_command "$1"</programlisting> <para>这个脚本将保证 <application>utility</application> 能够在 - <literal>login</literal> 服务之前, 并且在 - <literal>daemon</literal> 服务之后启动。 它同时也提供了一个设置和跟踪 - <acronym>PID</acronym>, 也称作进程 - <acronym>ID</acronym> 文件的方法。</para> + <literal>login</literal> 服务之前, 并在 + <literal>daemon</literal> 服务之后启动。 它同时也提供了设置和跟踪 + <acronym>PID</acronym> 的方法, 称作进程 + <acronym>ID</acronym> 文件。</para> + + <para>可以在 <filename>/etc/rc.conf</filename> 中加入:</para> + + <programlisting>utility_enable="YES"</programlisting> <para>这个新方法也使得命令行参数、包含 <filename>/etc/rc.subr</filename> 中所提供的功能, 兼容 &man.rcorder.8; 工具并提供更简单的通过 <filename>rc.conf</filename> 文件来配置的方法。 实际上它甚至可以放到 - <filename role="directory">/etc/rc.d</filename> 目录中。 + <filename class="directory">/etc/rc.d</filename> 目录中。 当然, 在使用 &man.mergemaster.8; 来完成软件升级时这会带来一些麻烦。</para> </sect2> <sect2> - <title>使用服务来启动服务</title> + <title>用服务来启动服务</title> - <para>其他服务, 例如 <acronym>POP</acronym>3 服务器, - <acronym>IMAP</acronym>, 等等, 可以通过 - &man.inetd.8; 来启动。 这样的过程包括从 - ports collection 安装相应的程序, 并把配置添加进 - <filename>/etc/inetd.conf</filename> 文件, 或去掉当前配置中的注释。 - 如何使用 <command>inetd</command> 并进行配置在 - <link linkend="network-inetd">inetd</link> 一节中有深入的阐述。</para> + <para>其他服务, 例如 <acronym>POP</acronym>3 + 服务器, <acronym>IMAP</acronym>, 等等, + 也可以通过 &man.inetd.8; 来启动。 这一过程包括从 + Ports Collection 安装相应的应用程序, + 并把配置加入到 <filename>/etc/inetd.conf</filename> 文件, + 或去掉当前配置中的某些注释。 + 如何使用和配置 <application>inetd</application> 在 + <link linkend="network-inetd">inetd</link> 一节中进行了更为深入的阐述。</para> <para>一些情况下, 通过 &man.cron.8; 来启动系统服务也是一种可行的选择。 这种方法有很多好处, 因为 <command>cron</command> 会以 - <command>crontab</command> 的文件属主身份执行那些进程。 + <filename>crontab</filename> 的文件属主身份执行那些进程。 这使得普通用户也能够执行他们的应用。</para> <para><command>cron</command> 工具提供了一个独有的功能, 以 <literal>@reboot</literal> 来指定时间。 这样的设置将在 &man.cron.8; 启动时运行, 通常这也是系统初始化的时候。</para> + </sect2> </sect1> @@ -469,13 +468,11 @@ run_rc_command "$1"</programlisting> 这是一项重要的安全功能。</para> <note> - <para>用户 crontabs 允许每一个用户在不需要 root 特权的前提下调度自己的任务。 - 在用户的 crontab 中的命令将以该用户的权限执行。</para> - - <para>同任何其他用户一样, <username>root</username> 用户也可以有自己的 crontab。 - 它不同于 <filename>/etc/crontab</filename> (也就是系统 crontab)。 - 因为有系统 crontab 的存在,通常不需要给 <username>root</username> - 建立单独的 crontab。</para> + <para>同其他用户一样, <username>root</username> 用户也可以有自己的 + crontab。 它不同于 + <filename>/etc/crontab</filename> (也就是系统 crontab)。 + 由于有系统 crontab 的存在, 通常并不需要给 + <username>root</username> 建立单独的用户 crontab。</para> </note> <para>让我们来看一下 <filename>/etc/crontab</filename> 文件:</para> @@ -730,7 +727,10 @@ sshd is running as pid 433.</screen> <title>设置网卡</title> - <indexterm><primary>网卡配置</primary></indexterm> + <indexterm> + <primary>网卡</primary> + <secondary>配置</secondary> + </indexterm> <para>现在我们不可想象一个计算机没有网络连接的情况。 添加和配置一块网卡是任何 &os; 系统管理员的一项基本任务。 @@ -740,8 +740,8 @@ sshd is running as pid 433.</screen> <title>查找正确的驱动程序</title> <indexterm> - <primary>网卡配置</primary> - <secondary>查找驱动程序</secondary> + <primary>网卡</primary> + <secondary>驱动程序</secondary> </indexterm> <para>在开始之前,您应该知道您的网卡类型,它用的芯片和它是 PCI @@ -749,12 +749,23 @@ sshd is running as pid 433.</screen> 可以查看您的版本硬件兼容性列表以确定您的网卡被支持。 </para> - <para> - 现在您已经确信您的网卡被支持了,您需要为这块网卡选择正确的驱动程序。 - <filename>/usr/src/sys/i386/conf/LINT</filename> - 文件将会给您一些被支持的芯片/网卡驱动信息的列表。 - 如果您对哪个是正确的驱动有疑问,阅读驱动的使用手册。 - 手册会提供所支持硬件的更多信息和相关可能产生的问题。</para> + <para>确认系统能够支持您的网卡之后, 您还需要为它选择合适的驱动程序。 + <filename>/usr/src/sys/conf/NOTES</filename> 和 + <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename> + 将为您提供所支持的一些网卡和芯片组的信息。 + 如果您怀疑驱动程序是否使所要找的那一个, + 请参考驱动程序的联机手册。 + 联机手册将提供关于所支持的硬件更详细的信息, + 甚至还包括可能发生的问题。</para> + + <note> + <para><filename>NOTES</filename> 在 + &os; 4.X 上并不存在。 您需要查看 <filename>LINT</filename> + 来了解关于网卡的信息。 参见 + <xref linkend="kernelconfig-config"> + 以了解关于 <filename>NOTES</filename> 和 + <filename>LINT</filename> 的进一步信息。</para> + </note> <para>如果您有一个普通的网卡,大多数时候您不需要为驱动浪费精力。 常用的网卡在 <filename>GENERIC</filename> 内核中已经支持了, @@ -775,23 +786,35 @@ ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto</screen> <para>在这个例子中,我们看到有两块使用 &man.dc.4; 驱动的网卡在系统中。</para> - <para>为了使用网卡,需要装载正确的驱动程序。这可能通过两种途径来完成。 - 最简单的方法是简单的用 &man.kldload.8; 来装载一个驱动该网卡的内核模块。 - 一个模块不是支持所有网卡驱动的(例如ISA 网卡用 &man.ed.4; 来驱动)。 - 另一种可选择的方法是您可以把支持您网卡的驱动静态的编译进内核。查看 - <filename>/usr/src/sys/i386/conf/LINT</filename> - 和手册中的驱动部分来了解把什么添加到您的内核配置文件中。可以查看 <xref - linkend="kernelconfig"> 以获得更多的重新编译内核的信息。 - 如果您的网卡在启动时被您的内核 (<filename>GENERIC</filename>) - 检测到了,那么就没有必要建立一个新内核了。 - </para> + <para>如果您的网卡没有出现在 + <filename>GENERIC</filename> 中, 则需要手工加载合适的驱动程序。 + 要完成这项工作可以使用下面两种方法之一:</para> + + <itemizedlist> + <listitem> + <para>最简单的办法是用 &man.kldload.8; 加载网卡对应的内核模块。 + 并不是所有的网卡都能够通过这种方法提供支持; + 比较明显的例子是 ISA 网卡。</para> + </listitem> + + <listitem> + <para>另外, 您也可以将网卡的支持静态联编进内核。 察看 + <filename>/usr/src/sys/conf/NOTES</filename>, + <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename> + 以及驱动程序的联机手册以了解需要在您的内核配置文件中加一些什么。 + 要了解关于重新编译内核的进一步细节, 请参见 <xref + linkend="kernelconfig">。 如果您的卡在引导时可以被内核 + (<filename>GENERIC</filename>) 识别, + 您应该不需要编译新的内核。</para> + </listitem> + </itemizedlist> </sect2> <sect2> <title>配置网卡</title> <indexterm> - <primary>网卡配置</primary> + <primary>网卡</primary> <secondary>配置</secondary> </indexterm> @@ -956,8 +979,8 @@ ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"</programlis <title>测试以太网卡</title> <indexterm> - <primary>网卡配置</primary> - <secondary>测试网卡</secondary> + <primary>网卡</primary> + <secondary>测试</secondary> </indexterm> <para>为了确认网卡被正确的配置了,在这里我们要做两件事情。首先, @@ -999,8 +1022,8 @@ round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms</screen> <title>调试</title> <indexterm> - <primary>网卡配置</primary> - <secondary>调试</secondary> + <primary>网卡</primary> + <secondary>故障排除</secondary> </indexterm> <para>调试硬件和软件配置一直是一件头痛的事情, @@ -1082,35 +1105,37 @@ round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms</screen> <hostid role="netmask">255.255.255.255</hostid> 或 <hostid role="netmask">0xffffffff</hostid>。</para> - <para>例如,假设 <devicename>fxp0</devicename> 连接到两个网段, - 子网掩码是 <hostid role="netmask">255.255.255.0</hostid> 的 - <hostid role="ipaddr">10.1.1.0</hostid> 和子网掩码是 - <hostid role="netmask">255.255.255.240</hostid> 的 - <hostid role="ipaddr">202.0.75.16</hostid>。我们将要系统使用从 - <hostid role="ipaddr">10.1.1.1</hostid> 到 - <hostid role="ipaddr">10.1.1.5</hostid> 和从 + <para>举例来说, 假设使用 + <devicename>fxp0</devicename> 连接到两个网络, + 分别是 <hostid role="ipaddr">10.1.1.0</hostid>, + 其子网掩码为 <hostid role="netmask">255.255.255.0</hostid>, + 以及 <hostid role="ipaddr">202.0.75.16</hostid>, + 其子网掩码为 <hostid role="netmask">255.255.255.240</hostid>。 + 我们希望从 <hostid role="ipaddr">10.1.1.1</hostid> + 到 <hostid role="ipaddr">10.1.1.5</hostid> 以及从 <hostid role="ipaddr">202.0.75.17</hostid> 到 - <hostid role="ipaddr">202.0.75.20</hostid> 的地址)。 - 如前面说明的那样, 只有给定网络范围内的第一个地址 (在这个例子中, + <hostid role="ipaddr">202.0.75.20</hostid> 的地址能够互相访问。 + 如前所述, 只有两个网段中的第一个地址 (本例中, <hostid role="ipaddr">10.0.1.1</hostid> 和 - <hostid role="ipaddr">202.0.75.17</hostid>) 需要有实际的子网掩码; - 所有其它地址 (<hostid role="ipaddr">10.1.1.2</hostid> + <hostid role="ipaddr">202.0.75.17</hostid>) 应使用真实的子网掩码; + 其余的 (<hostid role="ipaddr">10.1.1.2</hostid> 到 <hostid role="ipaddr">10.1.1.5</hostid> 以及 <hostid role="ipaddr">202.0.75.18</hostid> 到 - <hostid role="ipaddr">202.0.75.20</hostid>) 必须配置为使用掩码 - <hostid role="netmask">255.255.255.255</hostid>。</para> - - <para>下面的记录会正确的设置这个适配器:</para> - -<programlisting> ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" - ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" - ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" - ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" - ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" - ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" - ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" - ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" - ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"</programlisting> + <hostid role="ipaddr">202.0.75.20</hostid>) 则必须配置为使用 + <hostid role="netmask">255.255.255.255</hostid> 作为子网掩码。</para> + + <para>下面是根据上述描述所进行的 <filename>/etc/rc.conf</filename> + 配置:</para> + + <programlisting>ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" +ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" +ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" +ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" +ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" +ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" +ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" +ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" +ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"</programlisting> </sect1> @@ -1121,7 +1146,7 @@ round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms</screen> <title><filename>/etc</filename> 布局</title> <para>在配置信息中有很多的目录,这些包括:</para> - <informaltable frame="none"> + <informaltable frame="none" pgwide="1"> <tgroup cols="2"> <colspec colwidth="1*"> <colspec colwidth="2*"> @@ -1184,7 +1209,7 @@ round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms</screen> <para><filename>resolv.conf</filename> 中最常见的记录是: </para> - <informaltable frame="none"> + <informaltable frame="none" pgwide="1"> <tgroup cols="2"> <colspec colwidth="1*"> <colspec colwidth="2*"> @@ -1482,7 +1507,7 @@ device_probe_and_attach: cbb0 attach returned 12</screen> 变量可以设置成0(关)或者1(开);默认是1。 这个变量控制目录是否被系统缓存。大多数目录是小的, 在系统中只使用单个片断(典型的是1K)并且在缓存中使用的更小 - (典型的是512字节)。当这个变量设置为关闭 (0) 时, + (典型的是512字节)。当这个变量设置为关闭 (<literal>0</literal>) 时, 缓存器仅仅缓存固定数量的目录,即使您有很大的内存。 而将其开启 (设置为1) 时, 则允许缓存器用 VM 页面缓存来缓存这些目录,让所有可用内存来缓存目录。 @@ -1573,8 +1598,12 @@ device_probe_and_attach: cbb0 attach returned 12</screen> (<varname>kern.cam.scsi_delay</varname>)</title> <indexterm> - <primary><literal>SCSI_DELAY</literal></primary> - <secondary><varname>kern.cam.scsi_delay</varname></secondary> + <primary><varname>kern.cam.scsi_delay</varname></primary> + </indexterm> + + <indexterm> + <primary>kernel options</primary> + <secondary><literal>SCSI_DELAY</literal></secondary> </indexterm> <para><literal>SCSI_DELAY</literal> 内核配置会缩短系统启动时间。 @@ -1837,38 +1866,58 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <title>TCP 带宽迟延(Bandwidth Delay Product)</title> <indexterm> - <primary>TCP 带宽迟延限制</primary> - <secondary><varname>net.inet.tcp.inflight_enable</varname></secondary> + <primary>限制 TCP 带宽延迟积</primary> + <secondary><varname>net.inet.tcp.inflight.enable</varname></secondary> </indexterm> - <para>The TCP Bandwidth Delay Product Limiting 类似于 NetBSD 的TCP/Vegas。 - 它可以通过设置 <varname>net.inet.tcp.inflight_enable</varname> sysctl - 变量为 <literal>1</literal> 来启动。 - 系统将会为每个连接尝试带宽迟延并且限制发送到网络中的队列中的数据数量以维持适当的吞吐量。</para> - - <para> - 如果您在使用调制解调器,千兆以太网或者高速的广域网连接 - (或者其他有高的带宽迟延的产品)提供数据服务,这个特性就会很有用。 - 特别是您在使用窗口缩放或者配置一个大的发送窗口。如果启用了这个选项, - 同时要确信设置 <varname>net.inet.tcp.inflight_debug</varname> 为 - <literal>0</literal>(关闭调试),对于生产用来说,设置 - <varname>net.inet.tcp.inflight_min</varname> 至少为 - <literal>6144</literal> 可能会受益。然而, - 注意设置一个高的最小值能有效的关闭依赖连接的带宽限制。 + <para>限制 TCP 带宽延迟和 NetBSD 的 TCP/Vegas 类似。 + 它可以通过将 sysctl 变量 + <varname>net.inet.tcp.inflight.enable</varname> + 设置成 <literal>1</literal> 来启用。 + 系统将尝试计算每一个连接的带宽延迟积, + 并将排队的数据量限制在恰好能保持最优吞吐量的水平上。</para> + + <para>这一特性在您的服务器同时向使用普通调制解调器, + 千兆以太网, 乃至更高速度的光与网络连接 + (或其他带宽延迟积很大的连接) 的时候尤为重要, + 特别是当您同时使用滑动窗缩放, 或使用了大的发送窗口的时候。 + 如果启用了这个选项, 您还应该把 + <varname>net.inet.tcp.inflight.debug</varname> 设置为 + <literal>0</literal> (禁用调试), + 对于生产环境而言, 将 <varname>net.inet.tcp.inflight.min</varname> + 设置成至少 + <literal>6144</literal> 会很有好处。 然而, 需要注意的是, + 这个值设置过大事实上相当于禁用了连接带宽延迟积限制功能。 这个限制特性减少了在路由和交换包队列的堵塞数据数量, 也减少了在本地主机接口队列阻塞的数据的数量。在少数的等候队列中、 交互式连接,尤其是通过慢速的调制解调器,也能用低的 <emphasis>往返时间</emphasis>操作。但是,注意这只影响到数据发送 - (上载/服务端)。对数据接收(下载)没有效果。</para> - - <para>调整 <varname>net.inet.tcp.inflight_stab</varname> - 是 <emphasis>不</emphasis> 被建议的。这个参数的默认值是 20, - 它代表两个最大的包被添加到带宽迟延窗口考虑。 - 另外的窗口是稳定算法和改善改变条件时的应答所需要的, - 但是它也能导致通过慢速连接产生高的 ping 时间(虽然比您不用这个算法还慢)。 - 这些情况下,您可能想试着把这个参数减小到 15,10 或者 5; - 并且也可能需要减小 <varname>net.inet.tcp.inflight_min</varname> - (例如3500)来达到效果。减少这些参数应该是最后的唯一手段。</para> + (上载/服务端)。对数据接收(下载)没有效果。 + </para> + + <para>调整 <varname>net.inet.tcp.inflight.stab</varname> 是 + <emphasis>不</emphasis> 推荐的。 这个参数的默认值是 + 20, 表示把 2 个最大包加入到带宽延迟积窗口的计算中。 + 额外的窗口似的算法更为稳定, 并改善对于多变网络环境的相应能力, + 但也会导致慢速连接下的 ping 时间增长 (尽管还是会比没有使用 + inflight 算法低许多)。 对于这些情形, + 您可能会希望把这个参数减少到 15, 10, 或 5; + 并可能因此而不得不减少 + <varname>net.inet.tcp.inflight.min</varname> (比如说, + 3500) 来得到希望的效果。 减少这些参数的值, + 只应作为最后不得已时的手段来使用。</para> + + <note> + <para>对于 4.X 和更早的 &os; 版本, + <literal>inflight</literal> sysctl 变量直接隶属于 + <varname>net.inet.tcp</varname>。 它们的名字是 + (按字母顺序): + <varname>net.inet.tcp.inflight_debug</varname>, + <varname>net.inet.tcp.inflight_enable</varname>, + <varname>net.inet.tcp.inflight_max</varname>, + <varname>net.inet.tcp.inflight_min</varname>, + <varname>net.inet.tcp.inflight_stab</varname>。</para> + </note> </sect3> </sect2> </sect1> @@ -2033,8 +2082,16 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <sect2 id="acpi-intro"> <title>什么是 ACPI?</title> - <para>高级配置和电源接口(<acronym>ACPI</acronym>) - 是一个业界标准的硬件资源和电源管理接口(因此而得名)。它是 + <indexterm> + <primary>ACPI</primary> + </indexterm> + + <indexterm> + <primary>APM</primary> + </indexterm> + + <para>高级配置和电源接口 (<acronym>ACPI</acronym>) + 是一个业界标准的硬件资源和电源管理接口 (因此而得名) 。它是 <emphasis>操作系统控制的配置和电源管理(Operating System-directed configuration and Power Management)</emphasis>,也就是说, 它给操作系统(<acronym>OS</acronym>)提供了更多的控制和弹性。 @@ -2130,6 +2187,11 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <title>使用和调试 &os; <acronym>ACPI</acronym></title> + <indexterm> + <primary>ACPI</primary> + <secondary>problems</secondary> + </indexterm> + <para><acronym>ACPI</acronym> 是一种全新的发现设备、 管理电源使用, 提供过去由 <acronym>BIOS</acronym> 管理的访问不同硬件的标准化方法。 让 <acronym>ACPI</acronym> 在各种系统上都能正确使用的工作一直在进行, @@ -2164,18 +2226,19 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <listitem> <para>在 <quote>boot - <option>-v</option></quote> 之后得到的 &man.dmesg.8; 输出, 以及任何在重现 + -v</quote> 之后得到的 &man.dmesg.8; 输出, 以及任何在重现 bug 时出现的错误信息。</para> </listitem> <listitem> <para>在禁用了 <acronym>ACPI</acronym> 之后的 <quote>boot - <option>-v</option></quote> 的 &man.dmesg.8; 输出, 如果您发现禁用 ACPI + -v</quote> 的 &man.dmesg.8; 输出, 如果您发现禁用 ACPI 能够帮助消除问题。</para> </listitem> <listitem> - <para>来自 <quote>sysctl hw.acpi</quote> 的输出。 这也是找到您的系统所提供的功能的一种好办法。</para> + <para>来自 <command>sysctl hw.acpi</command>的输出。 + 这也是找到您的系统所提供的功能的一种好办法。</para> </listitem> <listitem> @@ -2212,6 +2275,10 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <sect2 id="ACPI-background"> <title>背景</title> + <indexterm> + <primary>ACPI</primary> + </indexterm> + <para><acronym>ACPI</acronym> 存在于采用 ia32 (x86)、 ia64 (安腾)、 以及 amd64 (AMD) 架构的所有现代计算机上。 完整的标准具有大量的各式功能, 包括 @@ -2248,9 +2315,24 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <sect2 id="ACPI-comprob"> <title>常见问题</title> - <para>为了使 <acronym>ACPI</acronym> 正常工作, - 它的每一部分都必须工作正常。 这里是一些常见的问题, - 按照出现的频繁程度顺序排序, 并提供了一些绕过或修正它们的方法。</para> + <indexterm> + <primary>ACPI</primary> + <secondary>problems</secondary> + </indexterm> + + <para>要让 <acronym>ACPI</acronym> 正常工作, + 它的每一部分都必须工作正常。 下面是一些常见的问题, + 按照出新的频繁程度排序, 并给出了一些绕过或修正它们的方法。</para> + + <sect3> + <title>鼠标问题</title> + + <para>某些时候, 唤醒操作会导致鼠标不再正常工作。 + 已知的绕过这一问题的方法, 是在 + <filename>/boot/loader.conf</filename> 文件中添加 + <literal>hint.psm.0.flags="0x3000"</literal> 设置。 + 如果这样做不能解决问题, 请考虑按前面介绍的方法提交问题报告。</para> + </sect3> <sect3> <title>休眠/唤醒</title> @@ -2267,12 +2349,12 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <literal>S4</literal><acronym>OS</acronym> 则是完全由操作系统实现的。</para> - <para>可以使用 <command>sysctl</command> - <option>hw.acpi</option> 来查看与休眠有关的项目。 + <para>可以使用 <command>sysctl hw.acpi</command> + 来查看与休眠有关的项目。 这里是我的 Thinkpad 上得到的结果。</para> - <screen>hw.acpi.supported_sleep_state: S3 S4 S5</screen> - <screen>hw.acpi.s4bios: 0</screen> + <screen>hw.acpi.supported_sleep_state: S3 S4 S5 +hw.acpi.s4bios: 0</screen> <para>这表示我可以使用 <command>acpiconf -s</command> 来测试 <literal>S3</literal>, @@ -2298,7 +2380,7 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <para>为了帮助隔离问题, 请在内核中删去尽可能多的驱动。 如果这样做能够解决问题, 请尝试逐个加载驱动直到问题再次出现。 通常预编译的驱动程序如 - <filename>nvidia.ko</filename>、 <application>X11</application> + <filename>nvidia.ko</filename>、 X11 显示驱动, 以及 <acronym>USB</acronym> 的问题最多, 而以太网卡的驱动则通常工作的很好。 如果您能够通过加载和卸载驱动使系统正常工作, @@ -2337,6 +2419,10 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <sect3> <title>系统停止响应 (暂时或永久性地)</title> + <indexterm> + <primary>中断风暴</primary> + </indexterm> + <para>绝大多数系统停止响应是由于未能及时响应中断或发生了中断风暴导致的。 芯片组有很多问题最终会溯源到 <acronym>BIOS</acronym> 如何在引导系统之前配置中断, <acronym>APIC</acronym> @@ -2352,7 +2438,12 @@ device_probe_and_attach: cbb0 attach returned 12</screen> 您可以尝试停止内核并进入 <acronym>DDB</acronym> (在控制台上按 <keycombo action="simul"><keycap>CTRL</keycap> <keycap>ALT</keycap><keycap>ESC</keycap></keycombo>) - 并输入 <option>show interrupts</option>。</para> + 并输入 <literal>show interrupts</literal>。</para> + + <indexterm> + <primary>APIC</primary> + <secondary>禁用</secondary> + </indexterm> <para>处理中断问题的救命稻草是尝试禁用 <acronym>APIC</acronym> 支持, 这是通过在 @@ -2367,12 +2458,12 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <para>崩溃对于 <acronym>ACPI</acronym> 是比较罕见的情况, 如果发现, 将会非常重视并很快修复。 您要做的第一件事是设法隔离出能够重现崩溃 (如果可能的话) - 的操作并获取一份调用队战。 请启用 + 的操作并获取一份调用堆栈。 请启用 <option>options DDB</option> 并设置串行控制台 (参见 <xref linkend="serialconsole-ddb">) 或配置一个 &man.dump.8; 分区。 您将在 <acronym>DDB</acronym> 中通过 <option>tr</option> - 得到调用队战。 如果您只能用手抄的方法记录它, + 得到调用堆栈。 如果您只能用手抄的方法记录它, 一定要记下头五 (5) 行和最后五 (5) 行。</para> <para>然后, 尝试通过在启动时禁用 @@ -2409,6 +2500,11 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <title><acronym>ASL</acronym>、<command>acpidump</command>, 以及 <acronym>IASL</acronym></title> + <indexterm> + <primary>ACPI</primary> + <secondary>ASL</secondary> + </indexterm> + <para>最常见的问题是 <acronym>BIOS</acronym> 制造商提供的不正确 (甚至完全错误的!) 字节代码。 这通常会以类似下面这样的内核消息显示在控制台上:</para> @@ -2416,26 +2512,28 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <screen>ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\ (Node 0xc3f6d160), AE_NOT_FOUND</screen> - <para>通常您可以通过将 - <acronym>BIOS</acronym> 升级到最新版本来解决这类问题。 + <para>许多时候, 您可以通过将 + <acronym>BIOS</acronym> 升级到最新版本来解决此类问题。 绝大多数控制台消息是无害的, 但如果您有其他问题例如电池工作不正常, 则从 <acronym>AML</acronym> 开始查找问题将是一条捷径。 - 字节代码, 或常说的 <acronym>AML</acronym>, 是从一种称作 - <acronym>ASL</acronym> 语言的原代码编译得到的结果。 - <acronym>AML</acronym> 在 + 字节代码, 或常说的 <acronym>AML</acronym>, + 是从一种叫做 <acronym>ASL</acronym> 的语言写成的源代码进行编译得到的结果。 + <acronym>AML</acronym> 一般存放在 <acronym>DSDT</acronym> 表中。 要得到您系统的 <acronym>ASL</acronym>, 需要使用 &man.acpidump.8;。 - 您应该使用 <option>-t</option> (显示固定表的内容) - 和 <option>-d</option> (将 <acronym>AML</acronym> 反汇编成 - <acronym>ASL</acronym>) 两个选项。 参考 + 需要同时指定 <option>-t</option> (显示固定标的内容) + 和 <option>-d</option> (将 <acronym>AML</acronym> 反编译成 + <acronym>ASL</acronym>) 两个选项。 请参见 <link linkend="ACPI-submitdebug">如何提交调试信息</link> - 一节以获得示范用法。</para> + 一节了解如何使用它。</para> - <para>您可以检查的第一件事是重新编译 + <para>最方便的初步检查是尝试重新编译 <acronym>ASL</acronym> 来看看是否有错误。 - 警告通常都可以忽略, 而错误通常会使导致 - <acronym>ACPI</acronym> 无法正常工作的原因。 要编译您的 - <acronym>ASL</acronym>, 使用下面的命令:</para> + 通常可以忽略这一过程中产生的警告, + 但错误一般就都是 bug, 它们通常就是导致 + <acronym>ACPI</acronym> 无法正常工作的原因。 + 要重新编译您的 <acronym>ASL</acronym>, + 可以使用下面的命令:</para> <screen>&prompt.root; <userinput>iasl your.asl</userinput></screen> </sect2> @@ -2443,15 +2541,20 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <sect2 id="ACPI-fixasl"> <title>修复 <acronym>ASL</acronym></title> + <indexterm> + <primary>ACPI</primary> + <secondary>ASL</secondary> + </indexterm> + <para>我们的长期目标是让每一个人都能够在不需要任何用户干预的情况下使用 <acronym>ACPI</acronym>。 然而, 目前我们仍然在开发绕过 <acronym>BIOS</acronym> 制造商常见错误的方法。 - Microsoft 解释器 (<filename>acpi.sys</filename> 和 + µsoft; 解释器 (<filename>acpi.sys</filename> 和 <filename>acpiec.sys</filename>) 并不会严格地检查是否遵守了标准, - 因此许多只在 Windows 中测试 <acronym>ACPI</acronym> 的 + 因此许多只在 &windows; 中测试 <acronym>ACPI</acronym> 的 <acronym>BIOS</acronym> 制造商很可能永远不会修正他们的 <acronym>ASL</acronym>。 我们希望不断地找出并用文档说明 - Microsoft 的解释器到底允许那些不标准的行为, + µsoft; 的解释器到底允许那些不标准的行为, 并在 &os; 进行对应的修改使它能够正常工作而不需要用户修正 <acronym>ASL</acronym>。 作为一项临时缓解问题的方法, 并帮助我们确认其行为, 您可以手工修正 @@ -2460,6 +2563,11 @@ device_probe_and_attach: cbb0 attach returned 12</screen> 发给我们, 这样我们就有可能绕过 <acronym>ACPI-CA</acronym> 中的错误行为, 从而不再需要您来手工修正。</para> + <indexterm> + <primary>ACPI</primary> + <secondary>error messages</secondary> + </indexterm> + <para>下面是一些常见的错误信息, 它们的原因, 以及如何修正。</para> @@ -2467,10 +2575,10 @@ device_probe_and_attach: cbb0 attach returned 12</screen> <title>_OS dependencies (_OS 依赖)</title> <para>某些 <acronym>AML</acronym> 假定世界是由不同版本的 - Windows 组成的。 您可以让 &os; 声称自己是任意 + &windows; 组成的。 您可以让 &os; 声称自己是任意 <acronym>OS</acronym> 来看一看是否能够修正问题。 比较简单的办法是设置 - <option>hw.acpi.osname</option>=<quote>Windows 2001</quote> + <option>hw.acpi.osname</option>="Windows 2001" 到 <filename>/boot/loader.conf</filename> 中, 或使用您在 <acronym>ASL</acronym> 中找到的其他字符串。</para> </sect3> @@ -2512,7 +2620,7 @@ device_probe_and_attach: cbb0 attach returned 12</screen> acpi_dsdt_name="/boot/DSDT.aml"</programlisting> <para>一定要把您的 <filename>DSDT.aml</filename> 复制到 - <filename role="directory">/boot</filename> 目录中。</para> + <filename class="directory">/boot</filename> 目录中。</para> </sect3> </sect2> @@ -2520,6 +2628,16 @@ acpi_dsdt_name="/boot/DSDT.aml"</programlisting> <title>从 <acronym>ACPI</acronym> 中获取调试输出信息</title> + <indexterm> + <primary>ACPI</primary> + <secondary>问题</secondary> + </indexterm> + + <indexterm> + <primary>ACPI</primary> + <secondary>调试</secondary> + </indexterm> + <para><acronym>ACPI</acronym> 驱动程序提供了非常灵活的调试机制。 这允许您指定一组子系统, 以及所需要的详细信息。 需要调试的子系统可以按 <quote>layers(层)</quote> @@ -2534,10 +2652,10 @@ acpi_dsdt_name="/boot/DSDT.aml"</programlisting> 不同的层和输出详细度的完整列表可以在 &man.acpi.4; 联机手册中找到。</para> <para>调试输出默认并不开启。 要起用它, 您需要在内核设置中添加 - <option>options ACPI_DEBUG</option>, 如果您的内核中编入了 + <literal>options ACPI_DEBUG</literal>, 如果您的内核中编入了 <acronym>ACPI</acronym> 的话。 您还可以在 <filename>/etc/make.conf</filename> 中加入 - <option>ACPI_DEBUG=1</option> 来在全局起用它。 + <literal>ACPI_DEBUG=1</literal> 来在全局起用它。 如果它只是模块, 您可以用下面的方法来重新编译 <filename>acpi.ko</filename>:</para> @@ -2546,9 +2664,9 @@ acpi_dsdt_name="/boot/DSDT.aml"</programlisting> make ACPI_DEBUG=1</userinput></screen> <para>安装 <filename>acpi.ko</filename> 到 - <filename role="directory">/boot/kernel</filename> + <filename class="directory">/boot/kernel</filename> and add your 并把所需的详细度和层在 <filename>loader.conf</filename> 中指定。 - 这个例子讲起用所有 + 这个例子将启用所有 <acronym>ACPI-CA</acronym> 组件以及所有 <acronym>ACPI</acronym> 硬件驱动 (<acronym>CPU</acronym>、 <acronym>LID</acronym>, 等等) 的消息。 |