加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

ksh_timer时间接口 - Unix系统

发布时间:2014-05-30 14:46:41 所属栏目:Unix 来源:站长网
导读:简介 ksh_timer 被设计用来帮助 ksh 或 ksh93 脚本管理员或开发人员计算每个函数及其 shell 脚本用户定义部分所用的时间。 以下几个要点定义了 ksh_timer 的功
简介

ksh_timer 被设计用来帮助 ksh 或 ksh93 脚本管理员或开发人员计算每个函数及其 shell 脚本用户定义部分所用的时间。

以下几个要点定义了 ksh_timer 的功能:

如果在 ksh_timer 中运行脚本,那么该脚本调用的函数是自动计时的。

用户使用 ##KTB <section_name>(这部分的开始)和 ##KTE <section_name>(这部分的结束)在脚本中心 定义相关部分。

给出的时间是总运行时间,不是已使用的时间。

输出包括 ? Main ? 时间,这是脚本的总运行时间。

还包括去向不明的输出 时间,这些时间是花费在函数或用户定义部分之外的 ? Main ? 部分中的时间。

去 向不明的时间还包括计算函数引起的 ksh_timer 开销。

ksh_timer 支持 ksh 和 ksh93 脚本的执行。

使用:ksh_timer [-D] [-c] [-?] [-s] [script name arguments ...]

-D 将 ksh_timer 置于调试模式。

-c 保留原始输出文件 (ksh_timer.<script_name>.<pid>.out)。通常在执行后删除。

-s [script name arguments ...] 脚本文件名和脚本所需参数。

-? 打印使用情况。

重要提示

该接口 (ksh_timer) 是为了用户方便而提供的。本文使用一个样例程序说明了 ksh_timer 的用法和功能,工具 是按原样提供的,我们不提供任何担保和支持。

该工具已在 IBM? AIX? 5.3,6.1 和 7.1 版本上 进行了测试。ksh_timer 可以用于其他操作系统,要实现这一点,必须使用本文安装 小节中提供的源代 码,为该操作系统重新构建 ksh_timer_c 可执行文件。

概述

在启动时,ksh_timer 会读 取命令行提供的输入脚本,然后从中构建以下 3 个文件(源文件、计时器文件和 exec 文件)。

源文件包含原函数定义,并且来自 exec 文件。

计时器文件包含包括计时代码和调 用原函数的封装函数。计时器文件也来自 exec 文件。在下列示例中,原函数 f1 在源文件中被重命名为 f1_orig ,而在计时器文件中,f1 有一个计时代码包含 f1_orig 函数,该函数使我们能够得到原函数 f1 所耗的时间。

exec 文件是源文件和计时器文件的来源,而且包含原始 main 代 码以及用于任何用户定义部分的计时器代码。

当完成这些文件的构建之后,ksh_timer 会运行构 建 exec 文件。运行原始代码时,该函数会计算函数和用户定义部分的运行时间,并将这些时间写入输出 文件。执行完这些操作之后,它会分析输出文件,然后计算函数名、缩进、迭代次数以及这些函数或代码 部分的最小、最大、平均和总运行时间,并将它们显示在屏幕上。

使用以下输入脚本样例: ksh_timer.test_pres

#! /usr/bin/ksh
f1()
{
echo "hello"
}
#Main
##KTB user_defined_section
sleep 1
f1
##KTE user_defined_section
sleep 2
f1

源文件:包含原始函数定义

f1_orig()
{
echo "hello"
}

计时器文件:包含包括计时代码和调用原函数的封装函数

function f1
{
time1f1=`/home/albl/ksh_timer/ksh_timer_c`
ksh_timer_add_func f1
f1_orig $*
f1_orig_rc=$?
time2f1=`/home/albl/ksh_timer/ksh_timer_c`
let " time3f1 = $time2f1 - $time1f1"
print "$indent1:$indent2:$indent3:$indent4:$indent5:$time3f1" >&9
ksh_timer_remove_func f1
return $f1_orig_rc
}

exec 文件:包含用于任何用户定义部分的原始代码和计时器代码

. 

./ksh_timer.test_pres.413914.source
. ./ksh_timer.test_pres.413914.timer
time1user_defined_section=`/home/albl/ksh_timer/ksh_timer_c`
ksh_timer_add_func user_defined_section
sleep 1
f1
time2user_defined_section=`/home/albl/ksh_timer/ksh_timer_c`
let "time3user_defined_section=$time2user_defined_section-$time1user_defined_section"
print "$indent1:$indent2:$indent3:$indent4:$indent5:$time3user_defined_section" >&9
ksh_timer_remove_func user_defined_section
sleep 2
f1

运行该样例得到下列输出:

$ ./ksh_timer -s ./sample
----------------------Start of sample output--------------------------------
hello
hello
----------------------End of sample output--------------------------------
------------------------------------------------------------------------------------------
|    function   |     Minimum       |     Maximum       |   Average  |       Total       |
|               +-------------------+-------------------+------------+-------------------|
|   or Section  |iter.#|   time     |iter.#|   time     |   time     |#iter.|   time     |
|---------------+------+------------+------+------------+------------+------+------------|
|Main           |                                                           |0m03.092834s|
|---------------+------+------------+------+------------+------------+------+------------|
|-user_defined|     1|0m01.027853s|     1|0m01.027853s|0m01.027853s|     1|0m01.027853s|
|--f1           |     1|0m00.003143s|     1|0m00.003143s|0m00.003143s|     1|0m00.003143s|
|-f1            |     1|0m00.002652s|     1|0m00.002652s|0m00.002652s|     1|0m00.002652s|
|---------------------------------------------------------------------------+------------|
|-Unaccounted   |                                                           |0m02.062329s|
------------------------------------------------------------------------------------------

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读