Lecture 8 - Measurement And Timing
主要内容
本节课主要讲述了关注优化过程中效率的重要一步,即计时相关的内容。
DFVS
动态电压频率调节(DFVS,Dynamic Frequency and Voltage Scaling)是一种通过调整时钟频率和供电电压来降低功耗的技术。 \(Power \propto CV^2f\) 这种技术使得,当降低频率和电压时,功耗和热量会三次方地下降。所以,这会对性能耗时评价造成扰乱。
静止系统
系统中的不稳定因素
- 守护进程和后台任务
- 中断
- 代码和数据对齐
- thread placement
- 运行时调度器
- 超线程
- 多租户
- DVFS
- turbo boost
- 网络流量
让系统静止
- 确保没有其他的任务在运行
- 关闭守护进程和cron任务
- 断开网络
- 单线程任务不要在第0核上运行。
- 关闭超线程。
- 关闭DVFS。
- 关闭Turbo Boost。
测量耗时的方法
- /usr/bin/time
- 在代码中插入:
- 如
gettimeofday()、clock_gettime()、rdtsc() - 推荐使用
clock_gettime(CLOCK_MONOTONIC, ...):快速且不会往回走。
- 如
- 中断
- gdb、gprof
- 使用硬件和OS的计时器,如perf
- 使用cachegrind等类似的工具
性能建模
基本性能优化工作流程
- 测量程序A的性能。
- 优化程序A,争取得到一个性能更好的程序A‘。
- 测量程序A’的性能。
- 如果A‘胜过A,把A设为A’。
- 如果A仍然不够快,转到第2步。
根据不同的场景选择不同的性能统计方法
- 尽量处理更多的请求:算术平均值、CPU利用率
- 所有任务在10ms内完成:算术平均值、执行时间
- 大多数请求要在100ms内处理完成:90分位、执行时间
- SLA:多种指标结合
- 将代码放入100MB的内存:最大值、内存使用
比较两个程序
Q:如果要评比两个程序A、B谁更快,但是系统存在一定的噪声,该如何做?
A:同时运行A、B,A更经常能运行更快。我们做出假设检验:假设B赢过A,计算如下P值:A赢过B的概率是多少?