摘要:計(jì)算公式亦或亦或相當(dāng)于中的值的計(jì)算是內(nèi)核提供的該進(jìn)程在時(shí)間內(nèi)消耗的。分別是該進(jìn)程的子進(jìn)程在用戶態(tài)和內(nèi)核態(tài)消耗的。注意中的是一個(gè)絕對(duì)累計(jì)值,所以要取兩個(gè)時(shí)間點(diǎn),算中消耗的。內(nèi)核中,進(jìn)程線程消耗的時(shí)間,單位都是這個(gè)。
計(jì)算公式
(process jiffies) * 100.0f / ((float)Hertz * (float)et * cpuCoresCount)
亦或
(process jiffies) * 100.0f / (float)Hertz / (float)et / cpuCoresCount
亦或
100 * (process jiffies)/ (float)Hertz / (float)et / cpuCoresCount
process jiffies的計(jì)算相當(dāng)于top -p pid 中 %CPU 的值
Hertz(tick per second)process jiffies是內(nèi)核提供的該進(jìn)程在DeltaT時(shí)間內(nèi)消耗的jiffies。具體是/proc/
/stat文件的第14-17 token。14-17token分別是utime, stime, cutime, cstime。cutime/cstime分別是該進(jìn)程spawn的子進(jìn)程在用戶態(tài)和內(nèi)核態(tài)消耗的jiffies。 process jiffies = utime + stime + cutime + cstime
Jiffies 為L(zhǎng)inux核心變數(shù)(unsigned long),它被用來(lái)記錄系統(tǒng)自開(kāi)機(jī)以來(lái),已經(jīng)過(guò)了多少tick。每發(fā)生一次timer interrupt,Jiffies變數(shù)會(huì)被加一。
注意stat中的jiffies是一個(gè)絕對(duì)累計(jì)值,所以要取兩個(gè)時(shí)間點(diǎn),算DeltaT中消耗的jiffies。
(process jiffies) = (current process jiffies) - (last process jiffies)
et什么是jiffies呢?其實(shí)就是Linux內(nèi)核定義的一個(gè)時(shí)間單位,值就是1/Hertz。Linux內(nèi)核中,進(jìn)程/線程消耗的時(shí)間,單位都是這個(gè) jiffies。
Hertz就是CLK_TCK,可以根據(jù)getconf CLK_TCK獲取
LINUX系統(tǒng)時(shí)鐘頻率是一個(gè)常數(shù)HZ來(lái)決定的, 通常HZ=100,即100Hz,一個(gè)周期即為 1/100s = 10ms = 10^7 ns,那么他的精度度就是10ms(毫秒)。也就是說(shuō)每10ms一次中斷。所以一般來(lái)說(shuō)Linux的精確度是10毫秒。
這里是每次統(tǒng)計(jì)的間隔時(shí)間,單位為秒
cpu核數(shù)(System.nanoTime() - lastNanoTime) * 1E-9
/usr/bin/nproc
或者
cat /proc/cpuinfo | grep processor | wc -ldoc
man-proc
Linux內(nèi)核中的jiffies及其作用介紹及jiffies等相關(guān)函數(shù)詳解
Top中是如何取到Linux內(nèi)核中的Hertz的?以及CPU使用率到底是怎么算出來(lái)的?
Docker 監(jiān)控的一點(diǎn)想法
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/66748.html
摘要:從多線程的發(fā)展來(lái)看,可以操作系統(tǒng)的發(fā)展分為三個(gè)歷史階段真空管和穿孔卡片晶體管和批處理系統(tǒng)集成電路和多道程序設(shè)計(jì)最早的計(jì)算機(jī)只能解決簡(jiǎn)單的數(shù)學(xué)運(yùn)算問(wèn)題,比如正弦余弦等。我們用了比較長(zhǎng)的篇幅介紹了進(jìn)程線程發(fā)展的歷史。 專(zhuān)題簡(jiǎn)介 作為一個(gè)合格的Java程序員,必須要對(duì)并發(fā)編程有一個(gè)深層次的了解,在很多互聯(lián)網(wǎng)企業(yè)都會(huì)重點(diǎn)考察這一塊。可能很多工作3年以上的Java程序員對(duì)于這一領(lǐng)域幾乎沒(méi)有太多研...
摘要:每個(gè)進(jìn)程的第一個(gè)線程都會(huì)隨著該進(jìn)程的啟動(dòng)而被創(chuàng)建,它們可以被稱(chēng)為其所屬進(jìn)程的主線程。因此,線程也被稱(chēng)為輕量級(jí)進(jìn)程。與進(jìn)程調(diào)度類(lèi)似,在線程之間快速切換,制造了線程并行運(yùn)行的假象。也就是說(shuō),線程之間是沒(méi)有保護(hù)的。其中的指代的就是系統(tǒng)級(jí)線程。 并發(fā)的發(fā)展歷史 其實(shí),在早期計(jì)算機(jī)并沒(méi)有包含操作系統(tǒng),...
摘要:進(jìn)程與線程進(jìn)程和線程是操作系統(tǒng)的基本概念但是它們比較抽象不容易掌握。線程,有時(shí)被稱(chēng)為輕量進(jìn)程,,是程序執(zhí)行流的最小單元。 進(jìn)程與線程 進(jìn)程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。 有一個(gè)很好的類(lèi)比,可以把它們解釋地清晰易懂。 CPU 計(jì)算機(jī)的核心是CPU,它承擔(dān)了所有的計(jì)算任務(wù)。它就像一座工廠,時(shí)刻在運(yùn)行。 假定工廠的電力有限,一次...
摘要:線程的可能實(shí)現(xiàn)方式基本上主流的操作系統(tǒng)都支持線程,也提供了線程的實(shí)現(xiàn)。使用用戶線程和內(nèi)核線程混合實(shí)現(xiàn)在這種混合實(shí)現(xiàn)下,既存在用戶線程,也存在內(nèi)核線程。 進(jìn)程與線程 在傳統(tǒng)的操作系統(tǒng)中,最核心的概念是進(jìn)程,進(jìn)程是對(duì)正在運(yùn)行的程序的一個(gè)抽象。進(jìn)程的存在讓并行成為了可能,在一個(gè)操作系統(tǒng)中,允許運(yùn)行著多個(gè)進(jìn)程,這些進(jìn)程看起來(lái)是同時(shí)在運(yùn)行的。如果我們的計(jì)算機(jī)同時(shí)運(yùn)行著 web 瀏覽器、電子郵件客...
摘要:在單核系統(tǒng)之上我們采用單進(jìn)程單線程的模式來(lái)開(kāi)發(fā)。由進(jìn)程來(lái)管理所有的子進(jìn)程,主進(jìn)程不負(fù)責(zé)具體的任務(wù)處理,主要工作是負(fù)責(zé)調(diào)度和管理。模塊與模塊總結(jié)無(wú)論是模塊還是模塊,為了解決實(shí)例單線程運(yùn)行,無(wú)法利用多核的問(wèn)題而出現(xiàn)的。 前言 進(jìn)程與線程是一個(gè)程序員的必知概念,面試經(jīng)常被問(wèn)及,但是一些文章內(nèi)容只是講講理論知識(shí),可能一些小伙伴并沒(méi)有真的理解,在實(shí)際開(kāi)發(fā)中應(yīng)用也比較少。本篇文章除了介紹概念,通過(guò)...
閱讀 3245·2021-11-18 10:02
閱讀 1947·2021-09-22 10:54
閱讀 2993·2019-08-30 15:43
閱讀 2579·2019-08-30 13:22
閱讀 1581·2019-08-29 13:57
閱讀 1049·2019-08-29 13:27
閱讀 739·2019-08-26 14:05
閱讀 2528·2019-08-26 13:30