哔哔前一直练习费曼学习法了解系统知识原理掌握性能分析工具多练习,多思考,多提问只记录个人学习记录,欢迎指正一、CPU上下文1.1.CPU上下文的定义:CPU寄存器和程序计数器寄存器:CPU内置容量小,但速度极快的内存保存上一个任务的寄存器和计数器信息并切换到加载下一个任务的寄存器和计数器的过程CPU上下文切换是保证系统工作的核心功能之一1.2、分类1.2.1、进程上下文切换过程它可以运行在用户空间(进程用户模式)或内核空间(进程内核模式)。从用户态到内核态的转换需要一个系统调用完成一个系统调用过程和两次CPU上下文切换:先保存原来用户态的指令位置,更新内核态指令的新位置,跳转到内核modetorunthekerneltask(usermode-->kernelmode)系统调用完成后,恢复寄存器保存的用户态,跳回用户空间,继续运行进程(kernelmode→usermode)区别serialnumber进程上下文切换系统调用1-从一个进程切换到另一个正在运行的进程-同一进程正在运行【特权模式切换】-系统调用期间会发生CPU上下文切换2-用户空间资源,如虚拟内存,栈,以及需要保存的全局变量,-需要保存内核栈、寄存器等内核空间的状态-需要保存虚拟内存、栈、全局变量等用户空间资源场景按时间段划分进程,当时间片用完,会发生系统调度。当切换到另一个等待进程时,当系统资源不足时,需要等待资源满足后再运行。当前进程会被挂起,然后系统会调度其他进程运行sleep函数,使进程处于活跃状态。挂起,然后系统调度其他进程运行。当优先级高的进程正在运行时,当前进程将被挂起。当高优先级的进程发生硬件中断时,会中断当前进程并挂起,然后执行中断程序。1.2.21.线程上下文切换线程是调度的基本单位,进程是资源拥有的基本单位。因此,内核任务在调度时,就是在调度线程,进程提供虚拟内存、全局变量等资源。线程上下文切换如果同一个进程只有一个线程,不同进程之间有线程,那么进程就等于线程。虚拟内存和全局变量资源是共享的和不共享的。切换进程只需要保存线程私有数据,寄存器等非共享资源保存线程私有数据,保存进程的虚拟内存、全局变量等资源1.2.3中断上下文切换中断优先级会中断正常的调度和执行进程,然后处理中断处理程序对于同一个CPU,中断处理比进程所有权更重要高优先级2.分析CPU上下文过多的上下文切换会影响系统的整体性能。2.1.分析标准2.1.1。vmstat系统性能分析工具,输出系统整体的上下文切换情况。cs每秒上下文切换次数in每秒中断次数r就绪队列长度,即正在运行并等待CPU的进程数b处于不可中断状态的进程数2.1.2,pidstat-w查看每个进程的上下文切换cswch/s每秒自愿上下文切换的次数【进程无法获取需要的资源,导致上下文切换】nvcswch/s每秒非资源上下文切换的次数【进程因时间片过期、山区上下文切换等原因被系统强制调度]2.2.实践#10个线程跑5分钟的benchmark测试模拟多线程切换问题sysbench--threads=10--max-time=300threadsrun#每隔1秒输出一组数据``秒输出``1``groupdata#-w参数表示输出进程切换指标,-u参数表示输出CPU使用率指标#-wt参数表示输出线程上下文切换指标pidstat-wt``1#-d高亮显示变化的区域watch-dcat/proc/interrupts问题:没有看到重新安排??我看不到RES,因为窗口太小了。RES在底部。使用工具sysbench模拟多线程工作,vmstat查看整体系统上下文切换次数[cs]、中断次数[in]、就绪队列[r]、不间断进程数[b]pidstat-wt查看次数ofresourcecontextswitchespersecondoftheprocess[cswch],每秒非资源上下文切换次数[nvcswch]查看中断文件/proc/interrupts4,附录1,工具1.1,vmstat工具,系统性能中的分析分析工具,用于分析系统内存使用情况,分析CPU上下文切换次数和中断次数sudobashsudoyum-yinstallsysbench1.2,sysbenchtools,multithreadedbenchmarks评估不同系统参数下数据库负载的测试工具#10个线程运行一个benchmark测试5分钟,模拟多线程切换sysbench的问题--threads=10--max-time=300threadsrun2,参考《极客时间》Linux性能优化实践
