本文主要是介绍实验总结分析报告:从系统的角度分析影响程序执行性能的因素,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、课程内容梳理
系统概念模型
使用高级软件工程中学习的drawio工具对课程内容分块进行梳理概括并绘制linux系统相关部分模型如下
1.中断处理
2.时钟体系
3.文件系统
4.文件系统挂载
5.驱动程序
6.进程调度
验证模型
例1:读写文件
- 选取文件系统模型
- 在系统打开文件表项struct file中查找是否已经打开
- 若未打开,则找到对应的inode节点,建立dentry项,新建struct file项加入系统打开文件表和进程打开文件表。
- 调用file对象中的f_op函数操作集中的write和read函数
- 函数经过层层调用最终调用实际文件系统中的读写实现完成文件读写。
例2:设备注册、使用与移除(内核模块方式)
- 选取驱动程序模型
- 切换root权限加载内核模块
- 初始化字符设备cdev
- 申请设备号并调用cdev_add()添加设备,在kobj_map中查找设备号dev_t,加入新probe并根据dev_t向chrdev中添加新设备
- 上层通过VFS调用file对象的操作函数,通过驱动程序对设备进行操作
- 移除内核模块,调用cdev_del()删除设备,删除设备号。
二、影响应用程序性能表现的因素
1.中断处理模型
- 模型中不难看出程序在运行时会频繁发生中断(时钟、系统调用、异常等)而且中断期间的各个步骤也比较多且繁琐,所以从发生中断到恢复运行期间所花费的时间会直接影响到宏观上程序的执行时间,因此中断发生越频繁,中断处理时间越长,程序的宏观性能表现也就越低。
- 在模型中还会发现由于在中断处理完成后还会检查softirq即软中断进行处理,因此如果存在过多的软中断等待处理时也会一定程度上影响返回程序运行的时间。
- 综上所述,由于中断次数的数量级非常庞大,因此每次中断期间的微小差距都会被放大很多倍,中断的性能直接影响到宏观上程序的性能表现。
2.时钟体系模型
- 时钟主要影响的是应用程序的定时器以及时钟中断的频繁程度。
- 上述终端模型可以看出中断对程序的性能影响是比较明显的,而影响时钟体系则影响了中断发生的频繁程度,如果中断次数过多或时间片过短,会导致程序运行期间频繁发生中断,使得中断处理时间延长,从而延长程序的有效运行时间;如果中断次数过少,又会导致程序的平均响应时间降低,可能对于单个程序而言性能提高(比如实时程序),但是总体来看平均性能下降。
- 综上所述,时钟主要通过影响时钟中断和时间片长短影响程序的性能表现。
3.文件系统
- 文件系统与应用程序的关联十分密切,在linux系统中,VFS使得“万物皆文件”,因此一个文件系统的性能也会显著影响应用程序的性能。
- 以简单的文件访问为例,一个复杂的应用程序往往涉及大量的串行的文件访问操作,那么在宏观层面上看来,花费1min打开一个文件和花费1ms打开一个文件的两个文件系统的显著差距在系统其他部分性能相差不大的情况下约等于两个程序的性能差距,从模型中很容易发现linux定义了dentry、file、系统打开文件表以及每个进程的打开文件表、当前目录等结构用来加速文件的访问速度。
- 文件系统模型主要为VFS文件系统的部分抽象,而与其相接的各类操作函数集如file_operations等则指向了具体的操作函数实现,这些操作函数的性能也包含在文件系统对应用程序的影响中。
- 文件系统的一端为硬件,而程序对于文件的操作实际上就是对硬件(如存储设备)的操作,因此设备的性能也会一定程度上影响应用程序的操作,如SSD和HDD等不同的存储介质之间的性能差异。
- 综上所述,当应用程序需要对文件进行操作时,文件系统的性能设计也会直接影响到程序的性能。
4.文件系统挂载
- 文件系统挂载过程与应用程序的影响关系基本包含在文件系统中,这里就不再赘述。
5.驱动程序
- 驱动程序对应用程序的影响与文件系统类似,主要取决于驱动和设备的性能,也不再赘述。
6.进程调度
- 进程调度与中断类似,但是中断更偏向于硬件层面,而调度偏向于软件层面,不同的进程调度策略和优先级机制都会影响到一个应用程序的性能表现,主要体现在应用程序获得CPU的时间和次数。
- 对于实时进程而言,由于强调实时性,因此进程调度策略一般都会偏向实时进程,实时进程也会拥有更高的优先级;但是对于普通进程来说,当其与实时进程同时存在时,如果调度策略是偏向实时进程,那么普通进程的性能就会受到实时进程的影响,当进程调度为非抢占式切实时进程长期占用资源时,对于用户而言该普通应用程序的性能表现就会极其差劲。
- 另外,在不考虑实时进程影响的情况下,计算密集型和I/O密集型应用程序进程由于重点不同,不同的调度策略带来的平均性能也会非常大,I/O密集型任务所需的CPU资源相对较少,因此时间片过多会浪费资源,linux的CFS调度策略就比较好的解决了这个问题。
- 综上所述,在一个应用程序的运行期间,调度方式的不同会影响到其在用户直观感受上的性能表现。
7.其他
- 一个应用程序的本身是其性能表现差异的根本原因,应用程序的结构,算法,采用的连接方式是动态链接还是静态链接,都会影响到程序运行时的性能表现。
- 此外,作为程序运行的载体,CPU、内存等关键部件的性能也直接影响了程序的性能。
三、总结
一个程序从打开到结束经历了非常多的软件操作和硬件变化,在实际运行时,复杂的数据结构,各个不同的步骤都参与了进程的执行,因此每个环节中的执行性能都会或多或少的影响到整个程序运行过程中的性能表现,小到内核压栈,大到访问文件,每一步都是应用程序性能的一部分,而这每一部分都影响着宏观上,在用户层面主观感受到的性能表现。
转载请注明作者出处
这篇关于实验总结分析报告:从系统的角度分析影响程序执行性能的因素的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!