gpt4 book ai didi

c - 如何检查内核中函数的性能

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:43 25 4
gpt4 key购买 nike

我正在尝试理解和使用现有的实用程序或可编程代码片段,它们可以根据功耗、内核空间中函数的 CPU 周期来衡量 CPU 利用率/性能。

我有两个功能片段做同样的工作:

将 ip 地址转换为字符串。

char* inet_ntoa(struct in_addr in, char* buf, size_t* rlen)
{

int i;
char* bp;

bp = buf;
for (i = 0;i < 4; i++ ) {
unsigned int o, n;
o = ((unsigned char*)&in)[i];
n = o;
if ( n >= 200 ) {
*bp++ = '2';
n -= 200;
}else if ( n >= 100 ) {
*bp++ = '1';
n -= 100;
}
if ( o >= 10 ) {
int i;
for ( i = 0; n >= 10; i++ ) {
n -= 10;
}
*bp++ = i + '0';
}
*bp++ = n + '0';
*bp++ = '.';
}
*--bp = 0;
if ( rlen ) {
*rlen = bp - buf;
}

return buf;
}

char *inet_ntoa (struct in_addr in)
{
unsigned char *bytes = (unsigned char *) &in;
__snprintf (buffer, sizeof (buffer), "%d.%d.%d.%d",
bytes[0], bytes[1], bytes[2], bytes[3]);

return buffer;
}

后面的函数来自glibc。前一个是我自己的。

这两个函数将在内核空间中调用。我如何衡量性能以进行比较。

我的机器是 Ubuntu 14.04 x86 i686。 Linux 内核 3.13

我从源代码 linux/tools 安装了 perf。

我的模块正在运行。我如何 Hook perf 来衡量我的函数性能。

请建议。

最佳答案

你应该看看oprofile .示例输出(来自 http://homepages.cwi.nl/~aeb/linux/profile.html )

# oprofpp -l -i /foo/vmlinux | tail
c012ca30 488 1.86174 kmem_cache_free
c010e280 496 1.89226 mask_and_ack_8259A
c010a61a 506 1.93041 restore_all
c0119220 603 2.30047 do_softirq
c0110b30 663 2.52938 delay_tsc
c012c7c0 703 2.68198 kmem_cache_alloc
c02146c0 786 2.99863 __copy_to_user_ll
c0169b70 809 3.08637 ext3_readdir
c01476f0 854 3.25805 link_path_walk
c016fcd0 1446 5.51656 ext3_find_entry

关于c - 如何检查内核中函数的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32865293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com