6.1. /etc/profile 文件

The/etc/profile文件包含系统范围的环境设置和启动程序。您在此文件中进行的所有自定义设置将应用于系统上的整个环境变量,因此在此文件中放置优化标志是一个不错的选择。为了从您的 x86 程序中最大限度地发挥性能,您可以在使用-O9标志进行编译时使用完全优化。许多程序在 Makefile 中包含-O2-O9是最高级别的优化。它会增加生成文件的大小,但运行速度更快。

请注意,-O9标志并不总是能为您的处理器带来最佳性能。如果您拥有 x686 及以上处理器,那当然可以,但低于 x686,则不一定。

编译时,对于您可能拥有的任何类型的处理器,请使用-fomit-frame-pointer开关。这将使用堆栈来访问变量。不幸的是,使用此选项几乎不可能进行调试。您还可以使用-mcpu=cpu_type-march=cpu_type开关,以尽 GCC 的能力为列出的 CPU 优化程序。但是,生成的代码将只能在指示的 CPU 或更高版本上运行。

优化选项仅在我们服务器中编译和安装新程序时才适用。这些优化在我们的 Linux 基础系统中不起任何作用;它只是告诉我们的编译器优化我们将使用在/etc/profile文件中指定的优化标志安装的新程序。

以下是根据您的 CPU 架构,我们建议您放入/etc/profile文件中的优化标志。

推荐的优化标志

  1. 对于 CPU i686 或 PentiumPro, Pentium II, Pentium III,在/etc/profile文件中,为 PentiumPro、Pentium II 和 III Pro 处理器系列添加此行
                   CFLAGS=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions
                   

    对于 CPU i586 或 Pentium:在/etc/profile文件中,为 Pentium 处理器系列添加此行
                   CFLAGS=-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops -fomit-frame-pointer -fforce-mem -fforce-addr -malign-double -fno-exceptions
                   

    对于 CPU i486:在/etc/profile文件中,为 i486 处理器系列添加此行
                   CFLAGS=-O3  -funroll-all-loops -malign-double -mcpu=i486 -march=i486 -fomit-frame-pointer -fno-exceptions
                   

  2. 现在,在选择了您的 CPU 设置 -i686, i586, 或 i486 后,在/etc/profile文件中更下方的位置,添加CFLAGS LANG LESSCHARSET到 export 行
                   export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC CFLAGS LANG LESSCHARSET
                   

  3. 注销并重新登录;在此之后,新的CFLAGS环境变量已设置,软件和其他配置工具将识别它。 Pentium Pro/II/III 优化仅适用于 egcs 或 pgcc 编译器。 egcs 编译器已默认安装在您的服务器上,因此您无需担心。

以下是我们使用的不同优化选项的解释

-funroll-loops

The-funroll-loops优化选项将执行循环展开的优化,并且仅对迭代次数可以在编译时或运行时确定的循环执行此操作。

-funroll-all-loops

The-funroll-all-loops优化选项也将执行循环展开的优化,并且对所有循环执行。

-ffast-math

The-ffast-math优化选项将允许 GCC 编译器为了优化代码速度,违反一些 ANSIIEEE 规则/规范。

-malign-double

The-malign-double优化选项将控制 GCC 编译器是否在双字边界或单字边界上对齐 double、long double 和 long long 变量。这将产生在 Pentium 上运行速度稍快,但会占用更多内存的代码。

-mcpu=cpu_type

The-mcpu=cpu_type优化选项将设置机器类型在调度指令时使用的默认 CPU

-fforce-mem

The-fforce-mem优化选项将通过强制将内存操作数复制到寄存器中,然后再对其进行算术运算,并通过使所有内存引用成为潜在的公共子表达式来生成更好的代码。

-fforce-addr

The-fforce-addr优化选项将通过强制将内存地址常量复制到寄存器中,然后再对其进行算术运算来生成更好的代码。

-fomit-frame-pointer

The-fomit-frame-pointer优化选项是最有趣的选项之一,它将允许程序不为不需要帧指针的函数在寄存器中保留帧指针。这避免了保存、设置和恢复帧指针的指令;它还使许多函数中可以使用额外的寄存器,并使在大多数机器上进行调试变得不可能。

Important: 我们将在本书中描述的所有未来优化默认都指的是 Pentium II/III CPU 系列。因此,如果需要,您必须在/etc/profile文件中以及在编译时调整针对您特定 CPU 处理器类型的编译标志。