视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
autosar中cpu的负载怎么计算
2023-06-21 19:39:44 责编:小OO
文档


autosar中cpu的负载可以用CPU一段工作时间与该时间段内被占用时间的比值来计算,可以得之CPU负载率=占用时间除以运行总时间。

负载,在物理学中指连接在电路中的两端具有一定电势差的电子元件,用于把电能转换成其他形式的能的装置。

在电工学中指在电路中接收电能的设备,是各类用电器的总称。

常用的负载有电阻、引擎、灯泡、空调、电动机等可消耗功率的元件。

对负载最基本的要求是阻抗匹配和所能承受的功率。

小编还为您整理了以下内容,可能对您也有帮助:

autosar中cpu的负载可以用CPU一段工作时间与该时间段内被占用时间的比值来计算,可以得之CPU负载率=占用时间除以运行总时间。

负载,在物理学中指连接在电路中的两端具有一定电势差的电子元件,用于把电能转换成其他形式的能的装置。

在电工学中指在电路中接收电能的设备,是各类用电器的总称。

常用的负载有电阻、引擎、灯泡、空调、电动机等可消耗功率的元件。

对负载最基本的要求是阻抗匹配和所能承受的功率。

cpu 使用率和负载的关系和区别

当我们使用top命令查看系统的资源使用情况时会看到 load average,如下图所示。它表示系统在1、5、15分钟的平均工作负载。那么什么是负载(load)呢?它和CPU的利用率又有什么关系呢?

load average:系统平均负载是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。这个数字越小越好。

CPU利用率:显示的是程序在运行期间实时占用的CPU百分比

CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,当CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换。

举例说明

网上有篇文章举了一个有趣比喻,拿打电话来说明两者的区别,我按自己的理解阐述一下。

某公用电话亭,有一个人在打电话,四个人在等待,每人限定使用电话一分钟,若有人一分钟之内没有打完电话,只能挂掉电话去排队,等待下一轮。电话在这里就相当于CPU,而正在或等待打电话的人就相当于任务数。

在电话亭使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,更会有新增的人在这儿排队,这个人数的变化就相当于任务数的增减。为了统计平均负载情况,我们5分钟统计一次人数,并在第1、5、15分钟的时候对统计情况取平均值,从而形成第1、5、15分钟的平均负载。

有的人拿起电话就打,一直打完1分钟,而有的人可能前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。如果把电话看作CPU,人数看作任务,我们就说前一个人(任务)的CPU利用率高,后一个人(任务)的CPU利用率低。

当然, CPU并不会在前三十秒工作,后三十秒歇着,只是说,有的程序涉及到大量的计算,所以CPU利用率就高,而有的程序牵涉到计算的部分很少,CPU利用率自然就低。但无论CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系。

这个有争议,各有各的说法,个人比较赞同CPU负载小于等于0.5算是一种理想状态。

不管某个CPU的性能有多好,1秒钟能处理多少任务,我们可以认为它无关紧要,虽然事实并非如此。在评估CPU负载时,我们只以5分钟为单位为统计任务队列长度。如果每隔5分钟统计的时候,发现任务队列长度都是1,那么CPU负载就为1。假如我们只有一个单核的CPU,负载一直为1,意味着没有任务在排队,还不错。

但是我那台服务器,是双核CPU,等于是有4个内核,每个内核的负载为1的话,总负载为4。这就是说,如果我那台服务器的CPU负载长期保持在4左右,还可以接受。

但是每个内核的负载为1,并不能算是一种理想状态!这意味着我们的CPU一直很忙,不得清闲。网上有说理想的状态是每个内核的负载为0.7左右,我比较赞同,0.7乘以内核数,得出服务器理想的CPU负载,比如我这台服务器,负载在3.0以下就可以。

最简单办法的是更换性能更好的服务器,不要想着仅仅提高CPU的性能,那没有用,CPU要发挥出它最好的性能还需要其它软硬件的配合。

在服务器其它方面配置合理的情况下,CPU数量和CPU核心数(即内核数)都会影响到CPU负载,因为任务最终是要分配到CPU核心去处理的。两块CPU要比一块CPU好,双核要比单核好。

因此,我们需要记住,除去CPU性能上的差异,CPU负载是基于内核数来计算的!有一个说法,“有多少内核,即有多少负载”。

4. CPU使用率到多少才算比较理想?

CPU利用率在过去常常被我们这些外行认为是判断机器是否已经到了满负荷的一个标准,我看到长时间CPU使用率60-80%就认为机器有瓶颈出现。

-----------------------------------

https://blog.51cto.com/wks97/2073217

cpu占用和性能有关系吗?

CPU占用率和CPU性能有关系,一般说来,同样的应用,CPU占用率越低,说明这个CPU性能越高。有一定的关系,但不是说必然的正比例的关系。还和温度啊,显卡内存等其他配套设备有关。一个性能高的CPU但内存少可能也占用多。

而cpu使用率指cpu的负载情况。打开资源管理器(ctrl+alt+del),就可以看见cpu的使用率,是用百分比(%)表示的,一般都在5%~100%之间,数值大小根据cpu的负载情况而定。百分比数值越大就是表示cpu的负载越高,反之亦然。

于是cpu主频和使用率的关系就出来了。同等档次的cpu,在处理相同数据量的时候,主频高的cpu,其使用率低;主频低的cpu,使用率就高。

CPU使用率指的是程序在运行期间实时占用的CPU百分比,这是对一个时间段内CPU使用状况的统计。通过这个指标可以看出在某一个时间段内CPU被占用的情况。

CPU(Central Processing Unit)是计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元,相当于系统的“大脑”。当 CPU 过于繁忙,就像“人脑”并发处理过多的事情,会降低做事的效率,严重时甚至会导致崩溃“宕机”。因此,理解 CPU 的工作原理,合理控制负载,是保障系统稳定持续运行的重要手段。

CPU性能首先是与架构有很大关系,不管频率多高,核心数多强,如果架构本身效率低,那么这颗CPU的效能也不会好

CPU资源占用率高会导致电脑运行速度变慢,如果是偶尔出现这种情况并很快恢复则属于正常。但如果长期居高不下就有问题了,很多人第一时间会想到中毒了。通过升级杀毒软件并杀毒,排除了病毒的原因后,如果CPU资源占用率还是居高不下,

很多人就不知道怎么办了第一时间想到病毒这很正常,毕竟这也是感染病毒后的典型症状,但并不代表一定有病毒。如果排除了病毒的原因,我建议还是先从进程入手,在任务管理器中检查一下是哪个进程占用了大量的CPU资源,记住这个进程名称,到网上搜索一下别人对这个进程的描述,这样可借用他人成功的经验来分析、处理自己遇到的故障。要注意的是部分系统进程也可能被病毒利用

CPU负载太高什么意思啊

即目前工作量已经接近于CPU的最大算力了,这会导致电脑反应过慢。负载就是cpu在一段时间内正在处理以及等待cpu处理的进程数之和的统计信息,也就是cpu使用队列的长度统计信息,这个数字越小越好。

负载分为两大部分:CPU负载、IO负载。

例如,假设有一个进行大规模科学计算的程序,虽然该程序不会频繁地从磁盘输入输出,但是处理完成需要相当长的时间。因为该程序主要被用来做计算、逻辑判断等处理,所以程序的处理速度主要依赖于cpu的计算速度。

扩展资料

原因:

1、磁盘读写请求过多就会导致大量I/O等待

cpu的工作效率要高于磁盘,而进程在cpu上面运行需要访问磁盘文件,这个时候cpu会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候会切换到其他进程或者空闲,这个任务就会转换为不可中断睡眠状态。当这种读写请求过多就会导致不可中断睡眠状态的进程过多,从而导致负载高,cpu低的情况。

2、MySQL中存在没有索引的语句或存在死锁等情况

MySQL的数据是存储在硬盘中,如果需要进行sql查询,需要先把数据从磁盘加载到内存中。当在数据特别大的时候,如果执行的sql语句没有索引,就会造成扫描表的行数过大导致I/O阻塞,或者是语句中存在死锁,也会造成I/O阻塞,从而导致不可中断睡眠进程过多,导致负载过大。

系统负载是什么

问题一:什么是计算机负载?操作系统负载是什么? 使用uptime或者top命令,都可以看到一个负载的输出,形如load average: 0.00, 0.03, 0.00,这个负载到底是什么东西呢,man文档里只是一笔带过,没有具体的给出负载的定义。   负载的统计,必然是由内核完成的,因此在内核源码中找答案是再好不过的事情了,找来2.6.21的内核源码,开始探索。  节选部分源码:  kernel/timer.c

1254 active_tasks = count_active_tasks();

1256 CALC_LOAD(avenrun[0], EXP_1, active_tasks);

1257 CALC_LOAD(avenrun[1], EXP_5, active_tasks);

1258 CALC_LOAD(avenrun[2], EXP_15, active_tasks);

include/linux/sched.h

110 #define FSHIFT   11   /* nr of bits of precision */

111 #define FIXED_1   (1>= FSHIFT;   load(t) = ( load(t-1)*exp(i) + n(t)*(2048-exp(i)) ) / 2048  load(t-1)为上次计算出的结果  n(t)为t时刻的活动进程数  计算方式是累加各个CPU的运行队列中running和uninterruptible的值 再乘以2048  计算方式如下:  1946 unsigned long nr_active(void)

1947 {

1948 unsigned long i, running = 0, uninterruptible = 0;

1949

1950 for_each_online_cpu(i) {

1951 running += cpu_rq(i)->nr_running;

1952 uninterruptible += cpu_rq(i)->nr_uninterruptible;

1953 }

1954

1955 if (unlikely((long)uninterruptible >

问题二:电力系统中负载什么意思?负荷什么意思 电力系统用语负载就是消耗电能的设备,除了工矿企业和家庭用电设备以外,系统中的变压器,输电线路等也消耗一定的电能,所以也可以认为是发电机的负载。负载二字就是负担载荷的意思。

负荷有时和负载可以通用。对发电机来说负荷表示发电机输出的有功功率和无功功率,对用户来说负荷表示用电量的大小。发电机变压器满负荷表示它已达到最大功率。大致含义如此。

问题三:linux系统平均负载,数值是什么意思? 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足以下条件则其就会位于运行队列中:- 它没有在等待I/O 操作的结果- 它没有主动进入等待状态(也就是没有调用'wait') - 没有被停止(例如:等待终止) 例如:[[email protected] init.d]# uptime 7:51pm up 2 days, 5:43, 2 users,load average: 8.13 , 5.90 , 4.94 命令输出的最后内容表示在过去的1 、5 、15分钟内运行队列中的平均进程数量。 一般来说只要每个CPU 的当前活动进程数不大于3 那么系统的性能就是良好的,如果每个CPU 的任务数大于5 ,那么就表示这台机器的性能有严重问题。对于上面的例子来说,假设系统有两个CPU ,那么其每个CPU 的当前任务数为:8.13/2=4.065.这表示该系统的性能是可以接受的。

问题四:什么叫做操作系统负载基线 负载压力测试有助于确认被测系统是否能够支持性能需求,以及预期的负载增长等。负载压力测试不只是关注不同负载场景下的响应时间等指标,它也要通过测试来发现在不同负载场景下会出现的,例如速度变慢、内存泄漏等问题的原因。负载压力测试是性能测试的重要组成部分,负载压力测试包括并发性能测试、疲劳强度测试、大数据量测试等内容。

问题五:负载是什么意思 负川是指连接在电路中的电源两端的电路元件。

电路中不应没有负载而直接把电源两极相连,此连接称为短路。常用的负载有电阻、引擎和灯泡等可消耗功率的元件。不消耗功率的元件,如电容,也可接上去,但此情况为断路。在应用电力系统中,发电厂的地位相当于电源,而工厂,家庭等消耗电能,是负载。

问题六:电力系统中的负载是什么意思? 用电器,电阻之类

问题七:什么是系统负载?uptime? 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。如果一个进程满足一下条件则其就会位于运行队中中:

它没有在等待I/O操作的结果它没有主动进入等待状态(也就是没有调用wait)没有被停止(例如:等待终止) 一般来说,每个CPU内核当前活动进程树不大于3,则系统运行表现良好!当然这里说的是每个CPU

内核,也就是如果你的主机是四核CPU的话,那么只要是uptime最后输出的一串字符数值小于12即表示系统负载不是很严重。

当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢。

以下显示输入uptime的信息:

问题八:什么是负载均衡 负载平衡也称负载共享,是指对系统中的负载情况进行动态调整,以尽量消除或减少系统中各节点负载不均衡的现象。具体实现方法是将过载节点上的任务转移到其他轻载节点上,尽可能实现系统各节点的负载平衡,从而提高系统的吞吐量。负载共享有利于统筹管理分布式系统中的各种资源,便于利用共享信息及其服务机制扩大系统的处理能力。

动态负载共享策略是指把系统中各节点上已有的负载作为参考信息,在运行过程中,根据系统中各节点的负载状况,随时调整负载的分配,使各节点尽可能保持负载的平衡。

负载:负载共享算法中的关键问题是如何确定负载。根据任务负载可以判断某一任务在特定节点的响应时间,确定在该节点上的执行性能。曾经被研究及使用的负载包括CPU队列长度、某时间内的平均CPU队列长度、CPU利用率等。Kunz发现负载的选取对系统性能有着重要的影响,而最有效的负载计算方式是CPU队列长度。

动机:用户将任务提交给系统处理,由于任务到达的随机性导致了某些处理机处于过载而某些处理处于空闲或轻载状态。负载共享能够通过将过载处理机上的任务迁移到轻载处理机上执行来提高性能。

性能:从静态角度看,高性能是指各处理机上的负载基本平衡。从动态角度看,性能的尺度是任务的平均响应时间,而任务的响应时间是指任务从提交到开始执行的持续时间。

负载平衡策略:

动态负载平衡策略包含四个部分:转移策略、选择策略、定位策略和信息策略。

问题九:cpu负载是什么意思 cpu负载的定义:在一般情况下可以将单核心cpu的负载看成是一条单行的桥,数字1代表cpu刚好能够处理过来,即桥上能够顺利通过所有的车辆,桥外没有等待的车辆,桥是畅通的。当超过1时表示有等待上桥的车辆,小于1时表示车辆能够快速的通过。单核心cpu就表示该cpu能够处理的事务数是1,

在多核cpu中cpu能够并行处理的事务的数量应该是cpu个数*cpu核数,而且负载数最好不要超过这个数值。例如一个4核cpu,则cpu_load最大值为4,不能长期超过4,否则会有任务没有得到及时的处理,而使系统的负载累积增高,导致系统运行缓慢。

问题十:请问高手们,软件系统负载压力测试的主要目的是什么? 首先,你的问题本身不够准确。负载测试和压力测试是不同的两种性能测试方式。

1、先说压力测试,压力测试是为了确定系统的瓶颈或者最大使用极限的。为了考察系统在极端条件下的表现,极端条件可以是超负荷的交易量和并发用户数,方法是分别模拟一定数量的用户并发访问系统,记录并分析系统响应时间;

2、再说负载测试,负载测试是为了测试软件系统当负载逐渐增加时,系统各项性能指标的变化情况。站在用户的角度去观察在一定条件下系统的性能表现。这些考察指标一般为响应时间、交易容量、并发容量、资源使用率等。

再说下两者的区别:压力测试一般设置的 *** 点策略是100%VU同时增加,指标要求是系统正常运行,负载测试一般不设置 *** 点,每几秒钟增加一定的VU数,记录系统平均响应时间。当前业内普遍的标准是2/5/10原则,2s以内为优秀,5s以内可以接受,10秒是极限。

不知道回答的是否您需要的答案,能否为您解决问题。

CPU的耗电值和什么有关,怎么计算的?

TDP 50W 是设计最大功耗,一般在上网之类的时候只有10几w,游戏时看占用情况,一般占到一半时就达到30w了,满载肯定不止50w,一般要高出20%。你可以下载一个AIDA 监控一下。

核心电压一般也随着cpu负载而升高,电压越高功耗也越大,但是设置了电压后,就算不升压电流也会增大,功耗也增大追问那TDP注明最大50W+20%也就是60W,那核心电压怎么弄也不会变?

核心电压是CPU统一的计量标准算耗电量,还是先看CPU的类型和型号,在看核心电压算耗电量的?

追答你这个问题太难回答,cpu制作工艺不同从90纳米-22纳米,架构也不一样,核心多少不同,主频也不一样,没有一个简单的公式。一般说的综合考虑同一款cpu功耗都不一样的。比如i5 3570k。超频到同等频率下,电压就很多不一样,电压高的功耗大

请问autosar和osek的关系是什么?

都是汽车电子软件的标准。

AUTOSAR与OSEK二者都是汽车电子软件的标准。

OSEK基于ECU开发,AUTOSAR基于整体汽车电子开发。

1.AUTOSAR

AUTOSAR一般就是指AUTOSAR构架/标准,AUTOSAR的全称是AUTomotive Open System ARchitecture),随着多年的发展,越来越多的行业内的公司加入到了AUTOSAR联盟中,这其中有OEM(汽车整车厂),Tier1(汽车零部件供应商),芯片制造商以及工具制造商,AUTOSAR构架/标准也成为了汽车E/E设计的发展方向。

2.OSEK

在1995年召开的研讨会上众多的厂商对OSEK和VDX的认识达成了共识,产生了OSEK/VDX规范(1997年发布),本文简称OSEK规范。

它主要由四部分组成:操作系统规范(OSEK Operating System,OSEK OS)、通信规范(OSEK Communication , OSEK COM )、网络管理规范( OSEK Net Management, OSEK NM)和OSEK实现语言(OSEK Implementation Language,OIL)。

扩展资料:

OSEK OS的特点

OSEK规范为实现其制定的初衷并满足汽车控制领域对系统安全性和节省有限资源的特殊要求,制定了系统而全面的操作系统规范。其特点主要有以下几个方面。

1. 实时性 

由于越来越多的微处理器被应用到汽车控制领域,如汽车刹车的防抱死系统、动力设备的安全控制等这些系统直接关系着人的生命安全,即使出现丝毫的差错也会导致危及生命安全的严重后果,因此要求操作系统具有严格的实时性。

2.可移植性 

OSEK规范详细规定了操作系统运行的各种机制,并在这些机制基础上制定了标准的应用程序编程接口,使那些编写的代码能够很容易地整合起来,增强了应用程序的可移植性。

3.可扩展性 

为了适用于广泛的目标处理器,支持运行在广泛硬件基础上的实时程序,OSEK操作系统具备高度模块化和可灵活配置的特性。

AUTOSAR特点

1、模块化和可配置性 

定义了一套汽车ECU软件构架,将不依赖硬件的软件模块和依赖硬件的软件模块分别优雅的封装起来,从而可以让ECU可以集成由不同供应商提供的软件模块,增加了功能的重用性,提高了软件质量。软件可以根据不同的ECU功能需求和资源情况进行灵活配置。

2、有标准化接口 

定义了一系列的标准API来实现软件的分层化。

3、提出了RTE的概念 

RTE全称是Runtime Environment,采用RTE实现了ECU内部和ECU之间的节点通讯,RTE处于功能软件模块和基础软件模块之间,使得软件集成更加容易。

4、具有标准的测试规范 

针对功能和通讯总线制定了标准的测试规范,测是规范涵盖的范围包括对于AUTOSAR的应用兼容性(例如RTE的需求,软件服务行为需求和库等)和总线兼容性(总线处理行为和总线协议等),它的目标是建立标准的测试规范从而减少测试工作量和成本。

参考资料:百度百科-AUTOSAR

参考资料:百度百科-osek

Vector-AUTOSAR使用中的问题总结

配置工具:DaVinci(达芬奇)

DaVinci DaVinci

1、导入DBC文件

导入DBC文件——1 导入DBC文件——1 导入DBC文件——2 导入DBC文件——2

2、导入CDD文件

导入CDD文件——1 导入CDD文件——1 导入CDD文件——2 导入CDD文件——2

3、只要更改了DBC或CDD文件,都需要 Update

更新方式 更新方式 正在更新 正在更新

1、一般情况下直接调用  CanNm _DisableCommunication (CanNm 模块 ) 接口就一定可以关掉 NM 报文发送。

问:调用 CanNm _DisableCommunication 接口的话,是不是模块也接收不到总线上的网络管理报文了,自己也不能发送 NMF 了?

答:vecotor解释,“好像能接收,只是不发送”。(具体现象还需要debug调试)。

2、调用  CanNm _EnableCommunication (CanNm 模块) 接口是打开 NM 报文发送。

注意: 如果  CANNM_COM_CONTROL_ENABLED 宏没有打开,即 STD_OFF, 则直接在应用程序中调用  CanNm_DisableCommunication 接口,程序会报错:提示 function has no prototype ,即使包含  CanNm.h 头文件也没用。

打开  CANNM_COM_CONTROL_ENABLED  宏的配置方法:

配置1 配置1 配置2 配置2

这样就可以将  CANNM_COM_CONTROL_ENABLED  宏打开( STD_ON ),然后可以直接调用  CanNm _DisableCommunication / CanNm _EnableCommunication 接口了。

以上是手动禁止 NMF 发送的方法,其实打开了   CANNM_COM_CONTROL_ENABLED  宏之后, 也可以用配置工具配置,更简单实现禁止 NMF 发送,如下:

通过配置关闭 NMF 发送 通过配置关闭 NMF 发送

注意: 特别是Nm Communication这个,必须勾选上。

问题描述: 产品上电,通过工具模拟总线报文发送,发送一帧报文(例如 0x621 ), Appl_GenericPrecopy() 接口没有接收到,发送第二帧的时候,ID报文跳才会转到 Appl_GenericPrecopy() 接口。 Appl_GenericPrecopy() 接口不是接收所有的ID报文吗?为什么刚开始上电连续发送2帧报文才会跳转到 Appl_GenericPrecopy() 接口?

答:vector解释,“   第一帧作为唤醒帧的话,只是唤醒ECU,第二帧才能被接收到。 在实车环境下这种情况是比较常见的,如果ECU速度比较慢的话可能需要更多帧才能被接收到”。

问题描述:   模块上电的时候, 发送一帧诊断报文(例如:10 03),模块没有任何响应(肯定或否定) ,直到模块的 应用报文 和 网络管理报文 发出来后,再发诊断报文,模块是可以响应的,这个是不是在配置工具中配置了?

答: Vector: 这个是可以配置或者可以在回调函数里面做的, 一般泛亚都是要求只有网络管理报文才能唤醒ECU,诊断报文是唤不醒的 。所以会出现你说的这种情况。

问题描述: 模块上电,模块发出的第一帧(模块的网络管理报文周期0ms,应用报文周期1s)与接收到的第一帧网络管理报文时间相差的800多ms,第一帧发送出来比较慢,请问这个是什么引起的,AUTOSAR的模块调用比较慢吗?

答:Vector:模块调用的话都是你们自己的系统调度的,首先看看是否调度有延迟之类的。其次可以看看从上电到调用 CanNm_TriggerTransmission 需要多长时间,这个函数是发送 NM 报文的。

接着可以做以下测试:1、从上电到调用  Can_Write  的时间。2、在 CanHL_StartTransition  中会调用 CanIf_ControllerModeIndication ,从上电到调 CanIf_ControllerModeIndication  的时间。

根据泛亚要求首帧发出的时间100-200ms之间:

泛亚首帧发送时间要求 泛亚首帧发送时间要求

解决方法: 我感觉和 AUTOSAR 任务调度的顺序及次数等有关系,因为之前没有买 OS 模块,软件写了一个简单的操作系统,并且按照 RTE.C 文件中定义的 AUTOSAR的任务时间进行顺序执行。

将 CanSM_MainFunction() 和 CanNm_MainFunction() 放在 1ms 任务中,在该任务中便于调试控制时间调用CanNm_MainFunction()函数,通过在该任务内累加计时80ms后,调用CanNm_MainFunction()。 示例代码 示例代码 问题描述:  当读诊断长帧的时候,发送 30 之后,后面长帧的数据会显示出来,但是数据后面会自动填充一个 01,这个是什么情况?见下图描述:

图示问题描述 图示问题描述

配置如下,解决该问题:

配置1 配置1 配置2 配置2

问题描述: 模块上电发送2帧网络管理报文以及总线上没有报文后,模块到预休眠4S,从预休眠到休眠4S,共8秒休眠,和这些参数有关吗?

答:有些关系的,Repeat Message Time越长发的NM报文越多。 这些参数就配置了这个8秒的时间,就是两个4秒的配置。

按照 vector 说法,没有解决问题,故修改配置如下: Repeat Message Time: 1500-->2000;Timeout Time:4000-->8000;Wait Bus Sleep Time: 4000-->8000,以供参考。

修改配置 修改配置

问题描述: 模块对诊断报文不需要做DLC长度检查,即要求:当模块收到诊断报文时,即使诊断报文的实际数据长度<8,模块也应该接收此报文并按照诊断要求进行响应。

答:Vector: Rx P Dlc 改成 0 当然不行了,还是要改回 8 ,其实只需要把 Rx P Dlc Check 的勾去掉就行了。 Dlc Check 一般都可以不用改。

注意: 还有一个配置比较重要,见 配置3 ,之前打电话咨询过 vector ,应该是配置3 这项配置,具体以调试结果为准。

配置1 配置1 配置2 配置2 配置3 配置3

问题描述: 在总线高负载下,调试后发现会进入到如下接口,文件 Det.c ,其中 MoleId = 0x3C,ErrorId = 0x46; 这里会进入 While 循环,超时后 WatchDog 导致产品 Reset 。

问题截图 问题截图

进一步分析,文件 CAN.c ;发现 CAN 控制器 Reset 后一直处于 kFlexCAN_DISABLE_MODE ,无法恢复正常通信;即使收到正确的网络管理报文也无法恢复。

原因分析: While 循环是导致  ECU Reset  的直接原因,根本原因在于高负载应用报文条件下,上电/ Reset 后 CAN 控制器初始化异常, FlexCAN 没有进入 Normal 模式,导致不断的进入 DET_reportError 中的死循环。

1、系统启动,在进行网络管理报文发送,调用  CANIF_TRANSMIT  的接口时控制器处于 STOP 状态,从而导致系统进入 DET 。

2、在新版本的代码中由于 DEM 接口的调用在 DEM 模块初始化之前,导致系统进入 DET 。

解决方法:

最简单的方法(但不是根本的方法) :把while死循环去掉,或者把Det检测去掉,高负载的情况下确实应该增加过滤,DET模块仅在开发阶段使用,在最终产品中,一般都会把DET模块去掉。

vector提出的方法: 1、将CAN的过滤器和FULLCAN进行配置和使用。2、在具体的 Mainfunction 调度中,将 CANSM_Mainfunction 调度放至 CANNM_Mainfunction 之前调用,并且在初次启动的时候将 CANNM_Mainfunction 的调用做延迟处理,防止高负载的情况下 CAN 控制器处于 STOP 状态使系统进入 DET 。3、将对应的模块的初始化函数调用放至DEM接口使用之前,在初始化完成之后再进行接口的调用。

配置工程,有几个地方的配置可以优化一下:

由于该问题跟 CAN 总线负载相关,可以使用硬件过滤来降低 CPU 开销,由于该配置中报文不多,推荐使用 FULLCAN 的过滤配置:

每个模块的 DET 选项可以去掉,见下图,如果还在查问题,可以暂时打开:

CAN 模块的 Overrun Notification 可以设置为 None 或者 Application :

问题描述: 当模块出现了 busoff ,通过示波器测量 MCU 的 TX 脚,发现没有进行快恢复和慢恢复的动作。

测试方法:

最简单的测试方法: 通过将 CAN_H 和 CAN_L 短接在一起产生busoff, 通过示波器测量MCU的TX脚,查看是否有快恢复慢恢复的动作。

有效测试方法: 使用 CANstress 工具,干扰模块发送的报文,测量模块快慢恢复时间。

打开已有的 cst 文件或打开工具新建 cst 文件:

配置1  配置1  配置2  配置2  配置3 配置3

调试方法:

vector :发生 bus-off 上层要收到 bus-off 通知才会执行相应的操作。在 bus-off 上层回调打个断点看代码能否执行到。上层代码有相应的回调函数的配置见截图,回调函数的: Appl_CanSM_BusOffBegin , Appl_CanSM_BusOffEnd 。

BusOff回调函数配置 BusOff回调函数配置

DEBUG调试: 产生  busoff   会进入 Appl_CanSM_BusOffBegin , busoff 结束后会进入 Appl_CanSM_BusOffEnd  接口中。

vector : CanSM_MainFunction 是处理 Bus-off 恢复的,那两个接口函数只是通知 app 的。根据项目填充所需要的内容。

目前解决方法: 我怀疑和没有购买 OS 有关系,调换了AUTOSAR 10ms任务的执行顺序;

方法: 应用层没有请求 Run 模式,所以通信停止以后系统就休眠,只有在应用层请求 Run 模式就可以。但在应用层请求 Run 模式需要有 Rte 和 Davinci Developer 工具的配合,如果没有的话只能通过修改代码。把 Request_ESH_RunRequest_0_requestedMode 这个变量或者类似名字的变量在系统启动后置成 1 ,要休眠时置成 0 ,这样通信停止后就不会进休眠了。由于这个变量是个静态变量,外部修改需要更改 BswM 模块生成的代码。

调试结果: 模块初始化的时候将 Request_ESH_RunRequest_0_requestedMode 设置为 1 ,然后停止发送报文,让通信停止,模块没有进入休眠,电流也正常,没有进入休眠。

数据ID(ID)需要在 cdd 文件中添加,配置完成 DID 后,需要导入配置工具(见 一、如何导入DBC和CDD文件 ),导入之后,打开配置工具,如下:

DTC 需要在 cdd 文件中添加,配置完成  DTC  后,需要导入配置工具(见 一、如何导入DBC和CDD文件 ),导入之后,打开配置工具,如下:

如何判断系统负载,包括cpu,内存,io设备等

可以用TOP工具查看实时状态。

top进入视图:

第一行:10:01:23 当前系统时间126 days, 14:29 系统已经运行了126天14小时29分钟(在这期间没有重启过)2 users 当前有2个用户登录系统load average: 1.15, 1.42, 1.44 load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。 第二行:Tasks 任务(进程),系统现在共有183个进程,其中处于运行中的有1个,182个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。 第三行:cpu状态6.7% us 用户空间占用CPU的百分比。0.4% sy 内核空间占用CPU的百分比。0.0% ni 改变过优先级的进程占用CPU的百分比92.9% id 空闲CPU百分比0.0% wa IO等待占用CPU的百分比0.0% hi 硬中断(Hardware IRQ)占用CPU的百分比0.0% si 软中断(Software Interrupts)占用CPU的百分比

第四行:内存状态8306544k total 物理内存总量(8GB)7775876k used 使用中的内存总量(7.7GB)530668k free 空闲内存总量(530M)79236k buffers 缓存的内存量 (79M) 第五行:swap交换分区2031608k total 交换区总量(2GB)2556k used 使用的交换区总量(2.5M)2029052k free 空闲交换区总量(2GB)4231276k cached 缓冲的交换区总量(4GB)

cpu负载是指的是什么?

AIX 全名为(Advanced Interactive Executive),它是IBM 公司的Unix操作系统,

整个系统的设计从网络、主机硬件系统,到操作系统完全遵守开放系统的原则。

下面对AIX 作以介绍。

RS/6000 采用IBM 的UNIX操作系统-AIX作为其操作系统。这是一

个目前操作系统界最成功,应用领域最广,最开放的第二代的UNIX系

统。它特别适合于做关键数据处理(CRITICAL)。

AIX 包含了许多IBM 大型机传统受欢迎的特征,如系统完整性,系统可管理

性和系统可用性。

在 AIX 操作系统上,有许多的数据库和开发工具,用户除了选用已有的应用

软件外,还可以根据各自的需要进行开发。

此外,在AIX 之上,有一组功能强,使用方便的系统管理工具。对于异种平台

互存,互操作有很成熟的解决方案。

由于该 UNIX 的先进的内核技术和最好的开放性,因此,虽然RS/6000

从宣布到今天只有短短的5 年多的时间,它已在各行各业有了广泛的运用,

并在1993和1994年连续二年在MIDRANGE商用 UNIX 领域处于第一位。

RISC SYSTEM/6000的操作系统是AIX ,它是性能卓越的、开放的

UNIX,汇集了多年来计算机界在UNIX上的研究成果,以IBM 在计算机

体系结构、操作系统方面40多年极其丰富的经验。最大限度的使用RISC

技术,安装了象AIX 这样的具备工业界实力的UNIX操作系统。

它既可连接SAA 体系结构,又能与非IBM 系统的网络相连,因此,可以

和多数专业银行现有的系统实现互连,这对今后业务系统拓展将带来极大的

灵活性,并降低投资。

AIX 遵循一系列的国际标准:

* IEEE POSIX1004.1-1990

* X/OPEN 移植指南ISSUE3的基本级(XPG3)

* AES/OS REVISION A (OSF/1 LEVEL 2 资格)

* FIPS 151-1

* AIX的编译器: XLC、C++(可选)、FORTRAN(可选)、PASCAL(可选)、COBOL(可选)

* ADA 的编译器已达到XPG3“成员”级的认可。

* AIX 支持多用户、多任务。

AIX有一些其它特性包括:

AIX 提供了3 种SHELL :SYSTEM V的KORN、BOURNE SHELL和4.3BSDC

SHELL作为可选择的UNIX系统界面;

安全设施满足TCB (Trusted Computing Base)的C2级;

实时处理能力,这对于“面向交易”的应用至关重要(如零售业

和银行等),它使RS/6000 获得极高的响应和吞吐量;

虚拟存储管理,当需要时,可将一些不常用的模块转送至外存,

提高内存的可利用性。

先进的文件系统,使得系统管理更加有效,并提高了数据可靠性

以及完整性。

能兼容Dos 应用程序和数据。

InfoExplorer,快速信息超文本索引系统- 不仅包括文字,而且

对包含声音、图像的索引系统,这是个联机的文件接口。包括全部的

超文本的索引和查找,以及面向任务和坐标的多重导引和索引系统。

这个文字及图形索引系统以一个灵活的、基于任务的方式去使用详细

资料及培训资料。

高级系统管理工具(SMIT,System Management Interface Tool)。

提供一级菜单驱动程序,诸如完成软件的安装与设置、设备的设置及

管理、问题的测定、存贮管理等。可以自动地进行I/O 设备设置,

ASCII 终端也可充当系统控制台。在LAN 上可以进行远程系统的安装。

系统工作负载

系统工作负载的完整准确的定义对于预测或理解它的性能是很关键的。在衡量系统性能时,工作负载的不同可能会比 CPU 时钟速度或随机访问存储器(RAM)大小不同带来更多的变化。工作负载的定义不仅必须包含向系统发送的请求的类型和速率,还要包含将要执行的确切软件包和内部应用程序。

包括系统将在后台处理的工作也很重要。例如,如果一个系统包含通过 NFS 加载且由其它系统频繁访问的文件系统,那么处理那些访问很可能是总体工作负载中非常重要的一部分,即使该系统不是正式的服务器也是如此。

已进行标准化从而允许在不同系统之间进行比较的工作负载称为基准程序。但是,很少有实际的工作负载能完全符合基准程序的精确算法和环境。即使是那些最初从实际的应用程序发展而来的行业标准基准程序也已经过简化和均匀化,从而使它们可移植到大量的硬件平台上。使用行业标准基准程序唯一有效的方法是减小将接受严肃评估的候选系统的范围。因此,在尝试理解系统的工作负载和性能时不应该只依赖基准测试结果。

可以将工作负载分为以下类别:

多用户

由多个用户通过各自的终端提交的工作组成的工作负载。通常,这种工作负载的性能目标有两种可能,即在保留指定的最坏情况响应时间条件下最大化系统吞吐量,或者对于固定不变的工作负载获得尽可能快的响应时间。

服务器

由来源于其它系统的请求组成的工作负载。例如,文件服务器的工作负载主要是磁盘读写请求。它是多用户工作负载(加上 NFS 或其它 I/O 活动)的磁盘 I/O 部分,所以适用同样的目标,即在给定的相应时间下最大化吞吐量。其它的服务器工作负载由诸如数学计算密集的程序、数据库事务、打印机作业之类的项组成。

工作站

由单独的用户通过键盘提交工作和在该系统的显示器上接收结果组成的工作负载。通常这种工作负载的最高优先级性能目标是使用户请求的响应时间最短。

性能目标

在定义了系统必须处理的工作负载后,可以选择性能标准并根据这些标准设定性能目标。计算机系统的总体性能标准是响应时间和吞吐量。

响应时间是提交请求和返回该请求的响应之间使用的时间。示例包括:

数据库查询花费的时间

将字符回显到终端上花费的时间

访问 Web 页面花费的时间

吞吐量是对单位时间内完成的工作量的量度。示例包括:

每分钟的数据库事务

每秒传送的文件千字节数

每秒读或写的文件千字节数

每分钟的 Web 服务器命中数

这些度量之间的关系很复杂。有时可能以响应时间为代价而得到较高的吞吐量,而有时候又要以吞吐量为代价得到较好的响应时间。在其它情况下,一个单独的更改可能对两者都有提高。可接受的性能基于合理的吞吐量与合理的响应时间相结合。

在规划或调谐任何系统中,当处理特定的工作负载时一定要保证对响应时间和吞吐量都有明确的目标。否则,有可能存在一种风险,那就是您花费了分析时间和物力改善的仅仅是系统性能中一个次要的方面。

程序执行模型

为了清楚地检查工作负载的性能特征,需要有一个动态而非静态的程序执行模型,如下图所示。

图 1. 程序执行层次结构. 该图形以一个三角形为基础。左边代表和右边适当的操作系统实体匹配的硬件实体。程序必须从存储在磁盘上的最低级别开始,到最高级别的处理器运行程序指令。例如,从底部到顶部,磁盘硬件实体容纳可执行程序;实内存容纳等待的操作系统线程和中断处理程序;转换后备缓冲区容纳可分派的结程;高速缓存中包含当前分派的线程和处理器流水线;而寄存器中包含当前的指令。

程序为了运行必须沿着硬件和操作系统层次结构并行向上前进。硬件层次结构中的每个元素都比它下面的元素稀少和昂贵。不仅程序不得不为了每个资源和其它程序竞争,而且从一个级别过渡到下一级别也要花时间。为了理解程序执行动态,需要对层次结构中每一级别有个基本的了解。

硬件层次结构

通常,从一个硬件级别移动到另一级别所需要的时间主要由较低级别的等待时间(从发出请求到接受到第一批数据的时间)组成。

固定磁盘

对于一个在单机系统中运行的程序而言,最慢的操作是从磁盘上取得代码或数据,这是因为有下列原因:

必须引导磁盘控制器直接访问指定的块(排队延迟)。

磁盘臂必须寻道以找到正确的柱面(寻道等待时间)。

读/写磁头必须等候直到正确的块旋转到它们下面(旋转等待时间)。

数据必须传送到控制器(传送时间)然后传递到应用程序中(中断处理时间)。

除了程序中显式的读或写请求以外,还有许多原因导致磁盘操作缓慢。频繁的系统调谐活动证明是不必要地跟踪了磁盘 I/O。

实内存

实内存通常称为随机存取存储器或 RAM,它比磁盘速度快,但每个字节的开销非常昂贵。操作系统尽量只把当前使用的代码和数据保存在 RAM 中,而把任何额外的内容存储在磁盘上,或者决不首先把它们带入 RAM 中。

然而,RAM 的速度不一定比处理器快。通常在硬件意识到 RAM 访问需求与处理器可使用数据或指令的时间之间,会出现许多处理器周期的 RAM 等待时间。

如果要访问存储到磁盘上(或者尚未调进)的某一虚拟内存页,则会产生一个缺页故障,并且程序的执行暂挂直到该页从磁盘读取。

转换后备缓冲区(TLB)

使程序员不会受限于系统的物理局限性的方法是实现虚拟内存。程序员在设计和编写程序时认为内存非常大,系统将负责将程序中指令和数据的虚拟地址转换成需要用来从 RAM 取得的指令和数据的实际地址。因为这个地址转换过程可能很费时,系统将最近访问过的虚拟内存页的实际地址保存在一个叫转换后备缓冲区(TLB)的高速缓存中。

只要运行中的程序继续访问程序和数据页中的一小部分,则完整的从虚拟到实际页地址的转换过程就不需要在每次 RAM 访问的时候都重做一次。当程序试图访问的虚拟内存页没有 TLB 入口(即 TLB 未命中)时,则需要大量的处理器周期(即 TLB 未命中等待时间)来进行地址转换。

高速缓存

为了将程序必须经历的 RAM 等待时间减到最小,系统为指令和数据组织了高速缓存。如果所需的指令和数据已在高速缓存中,则产生高速缓存命中,处理器就可在下一个周期立刻使用该指令或数据。否则产生高速缓存未命中,伴随有 RAM 等待时间。

在某些系统中,有两到高速缓存,通常称它们为 L1、L2 和 L3。如果一个特殊的存储器引用导致 L1 未命中,则检查 L2。如果 L2 产生未命中,则引用转至下一个级别,要么是 L3(如果存在),要么是 RAM。

高速缓存的大小和结构根据型号的不同而有不同,但是有效使用它们的原理是相同的。

流水线和寄存器

流水线型超标量体系结构使得在某些情况下可以同时处理多个指令。大批的通用寄存器和浮点寄存器使得可以将相当多的程序数据保存在寄存器中,而不需要频繁存储和重新装入。

可以设计优化编译器最大限度地利用这些能力。当生成产品程序时,无论程序有多小编译器的优化函数都应该能使用。Optimization and Tuning Guide for XL Fortran, XL C and XL C++ 中描述了如何将程序调谐到最大性能。

软件层次结构

程序为了运行还必须逐步执行软件层次结构中的一系列步骤。

可执行程序

当请求运行某个程序时,操作系统执行一些操作以将磁盘上的可执行程序转换成运行中的程序。首先,必须扫描当前 PATH 环境变量中的目录以查找程序的正确副本。然后,系统装入程序(不要和 ld 命令混淆,该命令是个绑定程序)必须解析出从程序到共享库的任何外部引用。

为了表示用户的请求,操作系统将创建一个进程或一组资源(例如专用虚拟地址段),任何运行中的程序都需要该进程或资源。

操作系统也会在该进程中自动创建一个单独的线程。线程是一个单独程序实例的当前执行状态。在 AIX 中,对处理器和其它资源的访问是根据线程来分配而不是根据进程分配的。应用程序可在一个进程中创建多个线程。这些线程共享由运行它们的进程所拥有的资源。

最后,系统转移到程序的入口点。如果包含入口点的程序页还不在内存中(可能因为程序最近才编译、执行和复制),则由它引起的缺页故障中断将该页从它的后备存储器中读取出来。

中断处理程序

通知操作系统发生了外部事件的机制是中断当前运行线程并将控制转移到中断处理程序。在中断处理程序可以运行之前,必须保存足够的硬件状态以保证在中断处理完成后系统能恢复线程的上下文。新调用的中断处理程序将经历在硬件层次结构中上移带来的所有延迟(除了页面故障)。如果该中断处理程序最近没有运行过(或者中间程序很节约时间),那么它的任何代码或数据不太可能保留在 TLB 或高速缓存中。

当再次调度已中断的线程时,它的执行上下文(如寄存器内容)逻辑上将得到恢复,以便它可以正确运行。然而,TLB 和高速缓存的内容必须根据程序的后继请求重新构造。因此,作为中断的结果,中断处理程序和被中断的线程都可能遇到大量的高速缓存未命中和 TLB 未命中延迟。

等待线程

无论何时只要执行的程序发出不能立刻满足的请求,例如同步 I/O 操作(显式的或缺页故障的结果),该线程就会处于等待状态,直到请求完成为止。除了请求本身所需的时间以外,通常这还会导致另外一些 TLB 和高速缓存的延迟时间。

可分派线程

当某个线程可分派但不在运行时,它不能完成任何有用的事情。更糟的是,正运行的其它线程可能导致重新使用该线程的高速缓存线路并将实内存页收回,从而引起最终分派时出现更多的延迟。

当前已分派的线程

调度程序选择对使用处理器有强烈要求的线程。在『CPU 调度程序性能概述』中讨论了影响该项选择需要考虑的事项。当分派线程后,处理器的逻辑状态恢复成线程中断时有效的状态。

当前的机器指令

如果未出现 TLB 或高速缓存未命中的情况,绝大多数机器指令都能在单个处理器周期内执行。相比之下,如果程序迅速转换到该程序的不同区域且访问大量不同区域中的数据,就会产生较高的 TLB 和高速缓存未命中率,执行每条指令使用的平均处理器周期数(CPI)可能大于 1。这种程序被认为有较差的局域性引用能力。它也许在使用必需的最少指令数来做这个工作,但是要消耗大量不必要的周期数。部分是因为指令数和周期数之间相关性较弱,检查程序列表来计算路径长度不会再直接产生一个时间值。由于较短的路径通常比较长的路径快,所以速率根据路径长度率的不同而明显不同。

编译器用完善的方法重新安排代码从而将程序执行所需的周期数降到最小。追求最佳性能的程序员必须首先致力于确保编译器具有有效优化代码所需的全部信息,而不是试图事后批评编译器的优化技术(请参阅『预处理器和编译器的有效使用』)。优化有效性的实际衡量标准是可信工作负载的性能。

系统调谐

在有效实现应用程序后,系统总体性能的进一步提高就成了系统调谐考虑的一个问题。系统级调谐包含的主要组件有:

通信 I/O

取决于工作负载的类型与通信链路的类型,可能需要调谐以下的一个或多个通信设备驱动程序:TCP/IP 或 NFS。

固定磁盘

逻辑卷管理器(LVM)控制文件系统的位置和磁盘上调页空间,这可能会极大地影响系统经历的寻道等待时间。磁盘设备驱动程序控制执行 I/O 请求所遵从的顺序。

实内存

虚拟内存管理器(VMM)控制空闲实内存帧的池,并决定何时从何处取用帧来补充该池。

运行线程

调度程序确定接下来由哪个可调度实体接收控制权。在 AIX 中,可调度实体是线程。请参阅『线程支持』。

性能调谐过程介绍

性能调谐主要是资源管理问题和正确的系统参数设置。调谐工作负载和系统以有效利用资源由下列步骤组成:

识别系统中的工作负载

设置目标:

确定如何评测结果

量化目标和区分目标的优先级

识别系统性能的关键资源

最小化工作负载的关键资源要求:

如果可选择的话,使用最适当的资源

减少个别程序或系统函数对关键资源的要求

结构化资源的并行使用

修改资源的分配以反映优先级

更改个别程序的优先级或资源

更改系统资源管理参数的设置

重复步骤 3 到步骤 5 直到满足目标(或者资源饱和)

如果必要的话,使用其它资源

在系统性能管理的每个阶段都有相应的工具(参阅附录 A 『监视和调谐命令和子例程』)。这些工具有些可从 IBM 得到;另一些是第三方产品。下图说明在一个简单的 LAN 环境中性能管理的各阶段。

图 2. 性能阶段. 该图用五个加权的圆圈说明对系统性能调谐的各步骤:规划、安装、监视、调谐和扩展。每个圆圈代表系统处于不同的性能状态:空闲、不均衡、均衡和过载。实质上就是扩展一个过载的系统、调谐系统直到它是均衡的、监视不均衡的系统并且在需要扩展时安装更多的资源。

识别工作负载

系统执行的所有工作都必须能够识别。特别是在 LAN 连接的系统中,通过系统的用户之间仅有的非正式协议,可以轻松地开发出一组复杂的交叉安装的文件系统。这些文件系统必须被识别出来并作为任何调谐活动的一部分进行考虑。

对于多用户工作负载,分析员必须量化一般情况和高峰期的请求率。确定用户实际与终端交互时间的实际比例也是很重要的。

该识别阶段中的一个要素是决定必须对生产系统进行评估和调谐活动,还是在另一系统上(或“切换”)用实际工作负载的模拟型式来完成评估和调谐活动。分析员必须针对非生产环境的灵活性权衡来自于生产环境结果的较大可靠性,分析员可在非生产环境中进行试验,当然试验所冒的风险是性能下降或更糟。

设置目标的重要性

虽然可以根据可测数量设置目标,但实际希望的结果往往带有主观性,比如令人满意的响应时间。进一步讲,分析员必须抵挡住调谐可测量的东西而不是对他而言是重要东西的。如果没有系统提供的评估能符合所要求的改进,那么就必须对该评估进行设计。

量化目标最有价值的方面不是选择达到的数字,而是对(通常)多个目标的相对重要性进行公开判定。如果这些优先级没有事先设定且不是每个相关的人都理解的话,分析员在没有进行频繁咨询之前不能作出任何折衷的决定。分析员还容易对用户的反应或管理性能中一些已经被忽略的方面而感到吃惊。如果系统的支持和使用跨过了组织的边界,您可能需要供应商和用户之间的书面服务级协议,可确保对性能目标和优先级有一个清楚而共同的理解。

识别关键资源

通常,给定工作负载的性能可由一两种关键系统资源的可用性和速度决定。分析员必须正确识别出那些资源,否则会冒险陷入无休止的尝试出错操作。

系统具有物理资源和逻辑资源。关键的物理资源通常比较容易识别,因为较多的系统性能工具可用来评估物理资源的利用率。通常最影响性能的物理资源如下:

CPU 周期

内存

I/O 总线

不同的适配器

磁盘臂

磁盘空间

网络访问

逻辑资源不太容易识别。逻辑资源通常是对物理资源进行分区的编程抽象。进行分区的目的是共享和管理物理资源。

构建于其上的物理资源和逻辑资源的一些示例如下:

CPU

处理器时间片

内存

页面帧

堆栈

缓冲区

队列

锁和信号量

磁盘空间

逻辑卷

文件系统

文件

分区

网络访问

会话

信息包

通道

了解逻辑资源和物理资源是很重要的。因为缺少逻辑资源线程可能阻塞,就像因为缺少物理资源而阻塞一样,扩展下层物理资源未必能保证创建附加的逻辑资源。例如,考虑使用 NFS 块 I/O 守护程序 biod。客户机上的一个 biod 守护程序要求处理每个暂挂的 NFS 远程 I/O 请求。因此,biod 守护程序的数量了能同时运行的 NFS I/O 操作的数量。当缺少 biod 守护程序时,系统检测会指示 CPU 和通信链路只使用了很少一部分。您可能有系统未充分利用(并且很慢)的假象,事实上这时是因为缺少 biod 守护程序从而了其余的资源。biod 守护程序使用处理器周期和内存,但您不能简单地通过添加实内存或将它转移到一个更快的 CPU 上来修正这个问题。解决方案是创建更多的逻辑资源(biod 守护程序)。

在应用程序开发过程中可能不经意间创建逻辑资源和瓶颈。传递数据或控制设备的方法可以有效地创建一个逻辑资源。当偶然创建这样的资源时,通常没有工具可监视它们的使用,也没有接口控制它们的分配。它们的存在可能不会引起重视,直到某个特定性能问题出现时就会突出它们的重要性。

最小化关键资源要示

下面讨论在三个级别上考虑最小化工作负载的关键资源要求。

使用适当的资源

决定在一个资源上使用另一个资源时应该理智地考虑并且头脑中要有明确的目标。在应用程序开发过程中有一个选择资源的示例,即通过增加内存消耗来减少 CPU 的消耗来达到一个平衡。用于演示资源选择的公共的系统配置决策为:是将文件放置在单独的本地工作站上,还是放置在远程服务器上。

减少关键资源的要求

对于本地开发的应用程序,可用多种方法检查程序以便其更有效地执行相同的功能或除去不需要的功能。在系统管理级别上,争用关键资源的低优先级工作负载可以移动到其它系统中、在其它时间运行或由“工作负载管理器”控制。

结构化资源的并行使用

因为工作负载需要运行多个系统资源,从而可以利用这样的事实,即资源是的且可以并行使用。例如,操作系统预读算法检测到程序在顺序访问文件的事实,因此它调度并行执行的其它顺序读取操作,同时应用程序还处理先前的数据。并行也用于系统管理。例如,如果某个应用程序同时访问两个或多个文件且如果同时访问的这些文件存放在不同的驱动器上,那么添加一个额外的磁盘驱动器可能会提高磁盘 I/O 的速率。

资源分配优先级

操作系统提供了一些方法来区分活动的优先级。有些在系统级别上设置,比如磁盘调步。其它的例如进程优先级可由单个用户设置以反映连接到特定任务上的重要性。

重复调谐步骤

性能分析的一个公认的真理是接下来总有瓶颈出现。减少某个资源的使用意味着另一资源了吞吐量或响应时间。例如,假设我们的系统中有下列的利用率级别:

CPU:90% 磁盘:70% 内存:60%

这个工作负载是 CPU 受限的。如果成功的调谐工作负载使得 CPU 负载从 90% 降到 45%,则可望在性能上有两倍的改善。不幸的是现在的工作负载是 I/O 受限的,它有下列的近似利用率:

CPU:45% 磁盘:90% 内存:60%

改善后的 CPU 利用率允许程序立刻提交磁盘请求,但接下来我们会受到由磁盘驱动器的容量施加的。性能改善也许是 30% 而不是预期的 100%。

总是存在一个新的关键资源。重要的问题是使用手边的资源是否已经满足性能目标。

注意: 用 vmtune、schedtune 和其它调谐命令产生的不正当系统调谐可能导致意外的系统行为,例如降低系统或应用程序的性能或系统暂停。更改仅应在性能分析识别出瓶颈时才适用。

注:

对于性能相关的调谐设置,不存在什么一般建议。

应用额外的资源

在前述所有的方法都用尽后如果系统性能仍不能满足它的目标,则必须增强或扩展关键资源。如果关键资源是逻辑资源且下层物理资源足够,则无需额外代价就可以扩展逻辑资源。如果关键资源是物理资源,分析员必须研究一些额外的问题:

必须增强或扩展关键资源到什么程度才可以终止瓶颈?

系统性能会满足它的目标吗?或另外的资源会首先饱和吗?

如果有一串关键资源的话,增强或扩展所有这些资源或与另一系统划分当前工作负载是否更节省成本呢?

性能基准

当试图比较不同环境中给定软件的性能时,常会遇到许多可能的错误,一些是技术上的,一些是概念上的。本节包含主要的提示信息。本书其它各节讨论评测过去和特定处理时间的不同方法。

评测处理系统调用需要花费的时间(挂钟)时,需要获取一个由下列内容组成的数字:

执行正运行服务的指令所需要的确切时间

处理器等待内存中的指令或数据时延迟的不同时间(也就是说,高速缓存和 TLB 不命中的代价)

在调用开头和结束访问时钟所需要的时间

由周期性事件如系统定时器中断所消耗的时间

由或多或少的随机事件消耗的时间,如 I/O

为了避免报告一个不精确的数字,常常要求多次评测工作负载。因为所有的外部的因素都会增加处理时间,典型的评估集有一个曲线的形式

测定cpu性能的指标

一、CPU使用率

1、如何查看CPU使用率

使用vmstat、top等命令查询,获取空闲(idle简写为id)值,1-id 即为cpu使用率

使用哪种方式查询都可以,需注意当cpu使用率较大时,需使用top命令查询单个cpu的利用率;

1)vmstat

2) top

top命令界面下,按1,显示单个cpu的信息(再按1,显示cpu总的使用情况)

如果某个cpu的数值使用率较大,其余的很小,则证明程序设计的有问题;

2、CPU使用率分析

注意>50%    告警>70%    严重>90%(也可以设置为80%以上告警)

当系统cpu利用率大于50%时,需要注意;大于70%时,需密切关注;大于90%,情况就比较严重了;

建议CPU使用率70%以下;

二、CPU负载

1、如何查看CPU负载

1)查看CPU逻辑颗数(负载与逻辑CPU个数密切相关)

cat /proc/cpuinfo |grep "processor"|wc -l

说明:以上为4核CPU

2)查看cpu负载

top命令界面如下(分别为1/5/15分钟的平均负载):

2、CPU负载分析

top命令,load

average的3个值,均除以逻辑cpu个数,得到的结果为每个cpu内核的负载,对此数值进行分析;

如果大于1,证明已经有一定的负载了;建议每个cpu内核平均负载不大于0.8;

如果为1~3之间,且系统其它资源都正常,则可接受;若大于5,则系统性能有问题;(有时大于2,也可以说负载高)

此数值并不是固定的,需要根据系统其它资源统一分析;

ps:这3个值代表1、5、15分钟的平均值,通过这3个数值的信息,可以分析出系统负载的趋势;

三、其他

1) vmstat的r计数器> cpu逻辑颗数

vmstat 1:关注r列值

r列: 表示系统中 CPU 等待处理的线程。由于 CPU 每次只能处理一个线程,所以,该数值越大,通常表示系统运行越慢。

这个值如果长期大于CPU逻辑颗数,则说明CPU资源不足,可以考虑增加CPU;

2)sar -u:查看CPU使用率

sar -q:查看CPU平均负载

下载本文
显示全文
专题