目录
一、概述
一直都想系统的学习一下代码优化,这几天无意从豆瓣上发现有一门叫做Performance Engineering of Software Systems的MIT公开课,简单看了下简介感觉无比汗颜——居然是本科生的课程。感慨有个好的引导真是重要。静下心来,觉得还是少发牢骚,研究一下一直感兴趣的东西吧。
公开课的地址:
- Lecture 1: Matrix Multiply: A Case Study
- Lecture 2: Bit Hacks
- Lecture 3: Basic Performance Engineering
- Lecture 4: Computer Architecture and Performance Engineering
- Lecture 5: Performance Engineering with Profiling Tools
- Lecture 6: C to Assembler
- Lecture 7: Memory Systems and Performance Engineering
- Lecture 8: Cache-Efficient Algorithms
- Lecture 9: Cache-Efficient Algorithms II
- Lecture 10: Dynamic Storage Allocation
- Lecture 11: What Compilers Can and Cannot Do
- Lecture 12: Multicore Programming
- Lecture 13: Parallelism and Performance
- Lecture 14: Analysis of Multithreaded Algorithms
- Lecture 15: Nondeterministic Programming
- Lecture 16: Synchronizing without Locks
- Lecture 17: Performance Issues in Parallelization
- Lecture 18: Primer on Ray Tracing Techniques
- Lecture 19: How TokuDB Fractal Tree Indexes Work
- Lecture 20: Distributed Systems
- Lecture 21: Quiz 2 Review
- Lecture 22: A Tale of 10 Bugs: Performance Engineering at VMware
- Lecture 23: Final Competition and Student Feedback
上面的地址可以用来看下课程的讲义,同时也提供了project,一定要做。
在国内观看上述视频真是奇慢无比,发现B站上有人搬运过来的,还有英文的字幕,感觉甚是不错:
https://www.bilibili.com/video/av37833446
二、vtune
2.1 安装
因为以前也用过一些profiling tool,但是没用过vtune,据说功能挺强,既然这门课程用到了,我就正好尝试一下,这里主要记录一下流程。
- 安装软件,下载地址不直接给了☺,可以用试用版,有授权当然更好,我用的是intel parallel studio xe 2018 update 3,安装过程没什么好说的,在此略过。
- 我家里刚好有两台机器,一台普通的windows i3,另一台淘宝淘的至强服务器,Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz,8core,32GB内存,CentOS7.2。这里用的是vtune的远程模式(我是windows host, linux target),具体操作可以参照intel官方的文档,这里只列出,并做简要的说明。
除了安装外,在真正使用软件之前,还是要看下vtune的 Post-Installation Steps
https://software.intel.com/en-us/vtune-amplifier-install-guide-windows-post-installation-steps
主要记录了不同target机器的准备工作,我这里主要关注target是linux的安装,按照“Preparing a Target Linux* System for Remote Analysis”页面中的条目逐条对比就可以了,我这里只参照 configure SSH connection做了免密码的putty配置,按照文中逐步操作不会有什么问题,下面是配置完的结果。
2.2 使用
1. 先点New Project建立工程
2. 然后在左侧选择ssh连接,首次连接需要等一段时间,为linux target安装驱动等
3. 以测试linux target上的ls为例,上图中列出三种方式,不多说了,这里选Launch Application,然后在右侧的Application中填上ls地址:
4. 然后选择测量的类型,直接点最右边Choose Analysis,进入下一个视图,左侧有很多测量的类型,可以自己研究一下,很多看见名字就知道意思了,微架构方面的测量选择General Exploration很有用,这里选择后,直接点Start就好了,整个步骤非常简单。
5. 之后vtune会给出本次profiling的结果,我这里显示的结果如下:
如果你深入一下vtune就知道,vtune在提供一种直观的“The Top-down Approach”定位微架构层级的问题,而在General Exploration提供了这一结果,如果你也显示如上结果,点change,从中选择General Exploration选项,得到如下的图,就可以进一步分析了。
vtune功能是非常强大的,首先,它保证了检测结果的权威性,针对每个性能指标,都有详细的说明和测量公式;其次上手很简单,获取帮助也非常简单。对比perf来说,perf有些结果很令人费解,你可能需要很了解微架构才能把握某些细节,vtune中完全不用担心,即使没有很好的对系统的理解也能直观的发现问题,当然了,想要优化一些基本的体系机构和优化方面的知识是少不了的,毕竟我们的目的是深入系统的方方面面。我也不打算放弃使用perf,两者对比,以vtune结果为准,可能可以解决一些对perf给出的某些结果的疑惑。
vtune的其他使用参照官方的文档就行了——Intel® VTune™ Amplifier 2019 User Guide,可以说是非常详细了,基本上你的疑惑都可以从中找到答案。使用软件的时候多多摸索它的用法,如我在使用的时候发现采样完成summary中Collection and Platform info显示的Collection Type是 driver-less的,在https://software.intel.com/en-us/vtune-amplifier-help-driverless-event-based-sampling-collection给出了说明,看来是linux target的相关驱动没有安装好,vtune使用了perf的采样结果,通过在上述页面给出的链接,说明需要自行安装Sampling Drivers,安装方法参考Build and Install the Sampling Drivers for Linux* Targets。因为我安装vtune的时候提示了安装linux target中的驱动,不知道为什么没有安装上,根据安装方法先看了下<install_dir>/sepdk/src,这里的install_dir,我的是 /opt/intel/vtune_amplifier_2018.3.0.559005/,既然有了安装目录 我就没去下载源码,根据文档直接
- ./build-driver 编译驱动
- ./insmod-sep -r 安装驱动
- ./boot-script --install 设置驱动开机挂载
重启了一下机器验证是否挂载成功,运行vtune再进行一个采样,上面的位置显示:
说明我们的修改是成功。
后来有一天,运行vtune采样会造成死机,target的vmcore显示采样驱动访问了非法地址,从官网上(https://software.intel.com/en-us/articles/intel-vtune-amplifier-sampling-driver-downloads)下载了2018驱动,按照上面的方法重新按照,恢复。同时,基于事件的采样需要下面配置:
三、总结
主要是通过这个课程学习和总结性能优化的各个方面的知识,会在后续文章展开。