小编Ric*_*ner的帖子

RDTSCP与RDTSC + CPUID

我正在做一些Linux内核时序,特别是在中断处理路径中.我一直在使用RDTSC进行计时,但是我最近了解到它并不一定准确,因为指令可能无序发生.

然后我尝试了:

  1. RDTSC + CPUID(在这里以相反的顺序)刷新管道,由于超级调用和诸如此类的原因,在虚拟机(我的工作环境)上产生高达60倍的开销(!).无论是否启用了HW Virtualization,都可以使用此功能.

  2. 最近我遇到了RDTSCP*指令,它看起来像RDTSC + CPUID那样做,但更高效,因为它是一个较新的指令 - 相对而言只有1.5x-2x的开销.

我的问题:RDTSCP作为一个测量点是否真的准确,它是做出时机的"正确"方法吗?

另外要明确一点,我的时间基本上就是这样,内部:

  • 保存当前循环计数器值
  • 执行一种类型的基准测试(即:磁盘,网络)
  • 将当前和上一个周期计数器的增量添加到累加器值,并按单个中断递增计数器
  • 最后,将delta/accumulator除以中断次数,得到每次中断的平均周期成本.

*http://www.intel.de/content/dam/www/public/us/en/documents/white-papers/ia-32-ia-64-benchmark-code-execution-paper.pdf第27页

c x86 assembly linux-kernel

15
推荐指数
3
解决办法
8033
查看次数

如何在Linux内核中对特定功能进行基准测试或跟踪?

如何使用ftrace()(或其他任何东西)跟踪Linux内核中特定的用户定义函数?我正在尝试创建和运行一些微基准测试,所以我希望有时间运行某些功能.我已经阅读了(至少尽可能多的)文档,但朝着正确方向迈出的一步将是非常棒的.

我倾向于ftrace(),但在Ubuntu 14.04上有问题.

c ftrace linux-kernel systemtap

6
推荐指数
1
解决办法
590
查看次数

找到缺少的C代码,给定汇编代码?

代码是

int f(int x, int y, int z) {
  if (/* missing code here */)
    return z;
  else
    return -z;
}
Run Code Online (Sandbox Code Playgroud)

组装是

    pushl %ebp
    movl %esp, %ebp
    movl 8(%ebp), %eax
    cmpl 12(%ebp), %eax
    jge .L2
    movl 16(%ebp), %eax
    jmp .L3
.L2:
    movl 16(%ebp), %eax
    negl %eax
.L3:
    popl %ebp
    ret
Run Code Online (Sandbox Code Playgroud)

这个问题要求我找出缺少的测试表达式必须产生给出的汇编代码.好的,够容易的.有一个明显的比较之间正在进行的xy.如果jge操作员要将跳跃预先形成循环体12(%ebp) > %eax.

可能的选择是

x<=y x>=y x>y x<y

我的回答是x<=y,因为它12(%ebp)是一个参考y,它是目的地.但这个答案是错误的,我不知道如何.任何提示?非常感谢.

c x86 assembly

6
推荐指数
1
解决办法
266
查看次数

如何在 Linux 内核中生成“人工”中断?

我在这里阅读了答案:触发内核中断处理程序:如何?这是一个很好的,但不完全是我需要的。

我正在对处理中断方面的 RNG 函数进行微基准测试,因此我需要一种好方法来人为且可重复地生成中断。例如,我可以将某些内容重定向到生成 300 个中断或类似内容的 Procfs 接口。

就像在内核中运行某种生成中断的函数一样简单吗?

是否有某种中断实际上并不执行“任何操作”,但仍然经过整个中断处理程序路径?我意识到我可以只输入按键或类似的东西,但这对于研究目的来说并不是真正可重复和可编写脚本的。

我正在使用 x86 架构。

c linux linux-kernel

5
推荐指数
1
解决办法
3530
查看次数

一个服务器文件中存在多个 Node.js“应用程序”是一种不好的做法吗?

目前,我正在通过一个 server.js 文件运行两个(很快将是三个)node.js websocket 应用程序。我正在使用 Express 来服务我的整个页面,以及我编写的粒子物理“游戏”。我还将创建一个聊天室,只是为了了解更多有关这些事情的信息。

我的问题(或缺乏?)是所有这些都是通过一个 server.js 文件运行的。Heroku 似乎需要这个,所以我不确定是否还有其他选择。我用 Heroku 来托管它。

我的问题是,这是不好的做法吗?还有其他我应该做而我错过的事情吗?我所有的“应用程序”的流量都非常低,所以我认为这不是一个大问题。我只是想从一开始就学习最佳实践,这样我就不会犯愚蠢的错误。谢谢。

编辑:如何使用 procfile 设置在 Heroku 中专门拆分应用程序?

javascript heroku node.js express

4
推荐指数
1
解决办法
3306
查看次数

标签 统计

c ×4

linux-kernel ×3

assembly ×2

x86 ×2

express ×1

ftrace ×1

heroku ×1

javascript ×1

linux ×1

node.js ×1

systemtap ×1