autosar中cpu的負載怎麼計算
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 64 監控一下。
核心電壓一般也隨着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 DaVinci1、導入DBC文件
導入DBC文件——1 導入DBC文件——1 導入DBC文件——2 導入DBC文件——22、導入CDD文件
導入CDD文件——1 導入CDD文件——1 導入CDD文件——2 導入CDD文件——23、只要更改了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,診斷報文是喚不醒的 。所以會出現你説的這種情況。
問題描述: 模塊上電,模塊發出的第一幀(模塊的網絡管理報文週期640ms,應用報文週期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平均負載