标签:压力测试工具 lazy 函数 系统文件 tin 左右 存在 read 文件操作
Linux可以分为两部分,分别为用户空间和内核空间,以32位操作系统为例,Linux 默认情况下会将高地址的 1GB 空间分配给内核空间(地址为0xffffffff-0xc0000000),将剩下的3GB空间分配给用户空间。
a) 用户空间包括:用户的应用程序、C库
b) 内核空间包括:系统调用接口、内核(狭义内核)、平台架构相关的代码
Linux的内核结构分为以下7个部分:
1) 系统调用接口(SCI):open、read、write等系统调用
2) 进程管理(PM):创建进程、删除进程、调度进程等
3) 内存管理(MM):内存分配、管理等
4) 虚拟文件系统(VFS):为多种文件系统提供统一的操作接口
5) 网络协议栈:提供各种网络协议
6) CPU架构相关代码(Arch):为的是提高至移植性
7) 设备驱动程序(DD):各种设备驱动,占到内核的70%左右代码
Linux内核系统调用是指所有的操作系统在其内核里都有一些内建的函数,这些函数可以用来完成一些系统级别的功能。Linux系统使用的这样的函数。
其过程如下,以open文件为例:
1.程序调用open库函数。
2.库函数通过swi指令陷入内核,硬件保存cpsr,pc。跳转到中断向量表中处理swi异常的表项。
3.根据lr寄存器获取系统调用号,调用相应的系统调用sys_open。
4.sys_open根据寄存器传递的参数(路径和文件操作权限),查找系统文件打开表,若是以存在此项,创建一个File结构,根据已经存在的表项填充关键字。若不存在,则根据路径进行查找,读取调用进程的root目录的inode节点,根据这个inode读取下一层的inode,递归,直到找到目标文件的inode。
5.创建file数据结构,填充信息,并将inode读取进内存,创建inode数据结构,放入到inode表中,将file数据结构放入内核的系统文件打开表中,返回给用户程序。
6.用户程序在进程文件打开表中分配一个空闲数组项保存file文件指针,并返回在进程文件打卡表中的对应下标索引,即文件描述符,至此完成文件的打开。
linux操作系统是多任务系统,通过进程管理实现多个进程的公平调度尽可能提高系统的吞吐量、资源利用率。其中有以下部分:
1. 进程描述符:在 Linux 内核内,进程是由相当大的一个称为 task_struct 的结构表示的。此结构包含所有表示此进程所必需的数据,此外,还包含了大量的其他数据用来统计(accounting)和维护与其他进程的关系(如父和子)。task_struct 位于 ./linux/include/linux/sched.h。在很多情况下,进程都是动态创建并由一个动态分配的 task_struct 表示。一个例外是init 进程本身,它总是存在并由一个静态分配的task_struct表示,参看 ./linux/arch/x86/kernel/init_task.c
2.进程创建:用户空间内可以通过执行一个程序、或者在程序内调用fork(或exec)系统调用来创建进程,fork调用会导致创建一个子进程,而exec调用则会用新程序代替当前进程上下文。一个新进程的诞生还可以分别通过vfork()和clone()。fork、vfork和clone三个用户态函数均由libc库提供,它们分别会调用Linux内核提供的同名系统调用fork,vfork和clone。
3.进程的状态:在操作系统原理中进程的有五种状态,分别为创建态、就绪态、运行态、阻塞态、终止态。在Linux系统中也有相应的状态,例如TASK_RUNNING:(R)对应运行态;TASK_INTERRUPTIBLE:(S)为睡眠状态;TASK_STOPPED为进程已中止执行等。
4.进程的调度时机:1.进程的时间片用完。2.进程状态发生改变。3.高优先级进程从其他状态转换为就绪态或者高优先级进程被创建。4.系统调用或者中断处理退出。
使用stress (系统压力测试工具)来模拟cpu使用繁忙情况,使用sysstat (监控分析系统性能的工具)来查看系统资源的使用情况。
使用指令stress --cpu 4 --timeout 600,模拟cpu繁忙的情况,可以看到cpu使用很严重。
接下来写一段的代码:
#include<stdio.h>
#include<time.h>
int main(int argc, char const *argv[])
{
/* code */
duoble s = 1000000;
clock_t start,finish; // 定义时间
start=clock();
for(int j=0;j<100000;j++){
for(int i=0;i<10000;++i){
s = s/i;
}
}
finish=clock();
printf("time=%lf\n",(double)(finish-start));//输出耗时
return 0;
}
分别在cpu繁忙情况和cpu空闲情况查看程序耗时:
cpu空闲:
cpu繁忙:
可以看到两者之间的耗时情况,当cpu空闲时,程序运行的更快,当cpu繁忙时,程序运行的时间更久。
总结分析影响程序执行性能的因素:
1.CPU,CPU 是操作系统稳定运行的根本,CPU的速度与性能很大一部分决定了系统整体的性能,因此CPU数量越多、主频越高,服务器性能也就相对越好。
2.I/O资源,在一个需要频繁读写的应用中,如果磁盘I/O性能得不到满足,就会导致应用的停滞。
3.内存,内存的大小也是影响 Linux 性能的一个重要的因素。内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,会导致资源浪费。
4.网络带宽,Linux 下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞;而稳定、高速的带宽,可以保证应用程序在网络上畅通无阻地运行。
标签:压力测试工具 lazy 函数 系统文件 tin 左右 存在 read 文件操作
原文地址:https://www.cnblogs.com/CJDiscipline/p/14760185.html