使用 rmss 命令在一系列内存大小上进行的应用程序执行

作为一个驱动程序,rmss 命令在某一内存大小范围内执行指定的应用程序,并显示在每个内存大小下应用程序的性能统计信息。

rmss 命令的 -s-f-d-n-o 标志组合使用以调用 rmss 命令作为驱动程序。 rmss 命令的调用样式的语法如下:
rmss [ -s smemsize ] [ -f fmemsize ] [ -d memdelta ]
     [ -n numiterations ] [ -o outputfile ] command

下面讨论每一个标志的详细信息。 -s-f-d 标志用于指定内存大小的范围。

-n
该标志用于指定每个内存大小下运行和测量该命令的次数。
-o
该标志用于指定 rmss 的报告写到哪一个文件,当该命令就是您想要在每个存大小下运行和测量的程序。
-s
该标志指定起始容量。
-f
该标志指定最终大小。
-d
该标志指定每次大小变化差值。
所有值都是整数或者小数,以兆字节计。 例如,如果您想在 256、224、192、160 和 128 MB 下运行和测量一个命令,可以使用以下组合:
-s 256 -f 128 -d 32
相似的,如果您想在 128、224、192、224 和 256 MB 下运行和测量一个命令,可以使用以下组合:
-s 128 -f 256 -d 32

如果省略 -s 标志,那么 rmss 命令以机器的实际内存大小作为起始大小。 如果省略 -f 标志,那么 rmss 命令以 8 MB 作为最终大小。 如果省略 -d 标志,内存大小增量的缺省值是 8 MB。

那您应该为 -s-f-d 选择哪些值呢? 一种简单的选择是大于运行您要测量的应用程序的系统的内存大小。 然而少于 8 MB 的增量也可能是有用的,因为当您给定一个大小时,您可以获取可以得到的空间量的估计值。 例如,如果一个给定应用程序在 120 MB 处系统颠簸,但 128 MB 处运行没有页面调进,那知道 120 MB 到 128 MB 之间哪里开始系统颠簸的非常重要。 如果从 127 MB 开始的,您可能希望将系统设置为 128 MB 以上的内存,或者您也希望试着去修改应用程序得到更多的内存空间。 另一方面,如果系统是从 121 MB 开始颠簸的,那 128 MB 的内存对您来说足够了。

-n 标志用于指定每个内存容量下运行和测量该命令多少次。 运行和测量该命令到指定的次数后,rmss 显示描述在应用程序该内存容量下重要的平均性能的统计信息。 在每个内存容量下运行 3 次该命令,您可以使用以下格式:
-n 3
如果省略 -n 标志,那么 rmss 命令检测在初始化过程中,应用程序必须运行多少次可以使得累积的总运行时间达到 10 秒。 rmss 这样做是为了保证短时间运行的应用程序性能的统计信息不被外界干扰所明显地影响。
注: 如果要测量非常简短的程序,那么累积 10 秒 CPU 时间所需的迭代次数可能非常大。 因为每一次程序执行至少消耗大约 2 秒的 rmss 开销,所以对于短程序应显式指定 -n 参数。

-n 标志设为多少值比较好呢? 如果您知道应用程序运行要消耗远远超过 10 秒,那么可以指定 -n 1,这样,该命令运行两次,但对每个内存大小只测一次。 使用 -n 标志的好处是 rmss 命令会更快完成,因为它将不必在初始化期间耗费时间来确定要运行程序多少次。 当被测命令是长时间或交互式地执行的时候,这是非常有价值的。

注意到 rmss 命令总是在每一个内存大小下的运行和测量命令之前作为热身运行一次,这是非常重要的。 为了避免应用程序不在内存引起的输入输出,热身是非常重要的。 虽然此类的输入输出影响性能,并不一定是实内存的缺少而引起的。 热身运行中并不包含由 -n 标志指定次数的重复。

-o 标志用于指定 rmss 报告要写到的文件。 如果省略 -o 标志,那么报告会写入 rmss.out 文件。

最后,command 用于指定要被测量的应用程序。 那可以是可执行程序或 shell 脚本,可以带有或省略命令行参数。 然而,在命令的形式上是有一些限制的。 首先,它不能包含输入或输出的重定向 (例如, foo> 输出foo < input)。 这是因为 rmss 已命令将任何命令名作为它的参数。 要重定向,将命令置于一个 shell 脚本文件。

通常,如果要将 rmss 输出存储到某个特定文件,请使用 -o 选项。 如果您想将 rmss 命令的标准输出重定向(例如,将它连接到一个已存在的文件后),那使用如下 Korn shell 来在括号中调用 rmss 命令。
# (rmss -s 24 -f 8 foo) >> output