同居男友許一恒遭遇事業(yè)難關(guān),此時(shí)女友成心不但發(fā)現(xiàn)自己懷了孕,還獲知許一恒跟閨蜜馬可好上了,而馬可家境殷實(shí),能夠幫助他渡過(guò)絕境。成心因?yàn)樯類?ài),選擇成全,離開(kāi)許一恒,并做了人流手術(shù),不料這胎兒竟成了“嬰靈”點(diǎn)點(diǎn)。后來(lái)點(diǎn)點(diǎn)決定“帶走”成心,慧化大師用佛法感化點(diǎn)點(diǎn),并將其“交給了佛”。不久成心再受邪祟之?dāng)_,點(diǎn)點(diǎn)冒險(xiǎn)回來(lái)搭救,也還原了真相……借此告誡切莫輕易墮胎,佛門有曰“五逆重罪”,墮胎必是冤孽。

">
须菩提祖师是谁
地區(qū):阿魯巴
  類型:0-3歲
  時(shí)間:2025-06-01 04:29:47
劇情簡(jiǎn)介
本文來(lái)自微信公眾號(hào):發(fā)內(nèi)功修煉 (ID:kfngxl),作者:張彥飛 allen大家好,我是飛哥!負(fù)載是查 Linux 服務(wù)器運(yùn)行狀態(tài)時(shí)很常用的一個(gè)能指標(biāo)。在觀察線上服器運(yùn)行狀況的時(shí)候,我也是經(jīng)常把負(fù)載找出來(lái)一看。在線上請(qǐng)求壓力大的時(shí)候,經(jīng)常是也伴著負(fù)載的飆高。但是負(fù)的原理你真的理解了嗎我來(lái)列舉幾個(gè)問(wèn)題,看你對(duì)負(fù)載的理解是否足的深刻。負(fù)載是如何計(jì)出來(lái)的?負(fù)載高低和 CPU 消耗正相關(guān)嗎??jī)?nèi)核是如何暴露負(fù)載數(shù)據(jù)應(yīng)用層的?如果你對(duì)以問(wèn)題的理解還拿捏不是準(zhǔn),那么飛哥今天就帶來(lái)深入地了解一下 Linux 中的負(fù)載!一、理解負(fù)載查看過(guò)程我們常用 top 命令查看 Linux 系統(tǒng)的負(fù)載情況。一個(gè)典型翠山 top 命令輸出的負(fù)載如下所示。#?topLoad?Avg:?1.25,?1.30,?1.95??...........輸出中的 Load Avg 就是我們常說(shuō)的負(fù)載,也叫系統(tǒng)均負(fù)載。因?yàn)閱渭兡骋?瞬時(shí)的負(fù)載值并沒(méi)有太意義。所以 Linux 是計(jì)算了過(guò)去一段時(shí)間內(nèi)的平均值,這三個(gè)數(shù)別代表的是過(guò)去 1 分鐘、過(guò)去 5 分鐘和過(guò)去 15 分鐘的平均負(fù)載值。那么 top 命令展示的數(shù)據(jù)數(shù)是如何的呢?事實(shí)上,top 命令里的負(fù)載值是從 /proc/ loadavg 這個(gè)偽文件里來(lái)的。通過(guò) strace 命令跟蹤 top 命令的系統(tǒng)調(diào)用可以看的到個(gè)過(guò)程。#?strace?topopenat(AT_FDCWD,?"/proc/loadavg",?O_RDONLY)?=?7內(nèi)核中定義了 loadavg 這個(gè)偽文件的 open 函數(shù)。當(dāng)用戶態(tài)訪問(wèn) /proc/ loadavg 會(huì)觸發(fā)內(nèi)核定義的函數(shù),在這里會(huì)讀內(nèi)核中的平均負(fù)載變量簡(jiǎn)單計(jì)算后便可展示出。整體流程如下圖所示我們根據(jù)上述流程圖再開(kāi)了看下。偽文件 /proc/ loadavg 在 kernel 中定義是在 /fs/ proc / loadavg.c 中。在該文件中會(huì)創(chuàng)建 /proc/ loadavg,并為其指定操作方法 loadavg_proc_fops。//file:?fs/proc/loadavg.cstatic?int?__init?proc_loadavg_init(void){?proc_create("loadavg",?0,?NULL,?&loadavg_proc_fops);?return?0;}在 loadavg_proc_fops 中包含了打開(kāi)該文件時(shí)對(duì)應(yīng)的操作方法。//file:?fs/proc/loadavg.cstatic?const?struct?file_operations?loadavg_proc_fops?=?{?.open??=?loadavg_proc_open,?};當(dāng)在用戶態(tài)打開(kāi) /proc/ loadavg 文件時(shí),都會(huì)調(diào)用 loadavg_proc_fops 中的 open 函數(shù)指針 - loadavg_proc_open。loadavg_proc_open 接下來(lái)會(huì)調(diào)用 loadavg_proc_show 進(jìn)行處理,核心的計(jì)算是在這里完的。//file:?fs/proc/loadavg.cstatic?int?loadavg_proc_show(struct?seq_file?*m,?void?*v){?unsigned?long?avnrun[3];?//獲取平均負(fù)載值?get_avenrun(avnrun,?FIXED_1/200,?0);?//打印輸出平均負(fù)載?seq_printf(m,?"%lu.%02lu?%lu.%02lu?%lu.%02lu?%ld/%d?%d\n",??LOAD_INT(avnrun[0]),?LOAD_FRAC(avnrun[0]),??LOAD_INT(avnrun[1]),?LOAD_FRAC(avnrun[1]),??LOAD_INT(avnrun[2]),?LOAD_FRAC(avnrun[2]),??nr_running(),?nr_threads,??task_active_pid_ns(current)-last_pid);?return?0;}在 loadavg_proc_show 函數(shù)中做了兩件事。調(diào)用 get_avenrun 讀取當(dāng)前負(fù)載值將平均負(fù)載值照一定的格式打印輸出上面的源碼中,大家看了 FIXED_1/200、LOAD_INT、LOAD_FRAC 等奇奇怪怪的定義,代寫的這么猥瑣是因?yàn)閮?nèi)中并沒(méi)有 float、double 等浮點(diǎn)數(shù)類型,而是用整數(shù)來(lái)模的。這些代碼都是為了整數(shù)和小數(shù)之間轉(zhuǎn)化使。知道這個(gè)背景就行了不用過(guò)度展開(kāi)剖析。這用戶通過(guò)訪問(wèn) /proc/ loadavg 文件就可以讀取到內(nèi)核算的負(fù)載數(shù)據(jù)了。其中取 get_avenrun 只是在訪問(wèn) avenrun 這個(gè)全局?jǐn)?shù)組而已。//file:kernel/sched/core.cvoid?get_avenrun(unsigned?long?*loads,?unsigned?long?offset,?int?shift){?loads[0]?=?(avenrun[0]?+?offset)??shift;?loads[1]?=?(avenrun[1]?+?offset)??shift;?loads[2]?=?(avenrun[2]?+?offset)??shift;}現(xiàn)在可以總結(jié)一下我們開(kāi)篇中的一問(wèn)題:?內(nèi)核是如何暴露負(fù)載數(shù)據(jù)給應(yīng)用層的?核定義了一個(gè)偽文件 /proc/ loadavg,每當(dāng)用戶打開(kāi)這個(gè)文件的時(shí)候,內(nèi)核中的 loadavg_proc_show 函數(shù)就會(huì)被調(diào)用到,接著訪問(wèn) avenrun 全局?jǐn)?shù)組變量 并將平均負(fù)載從整數(shù)轉(zhuǎn)化為小數(shù),并打印來(lái)。好了,另外一個(gè)新題又來(lái)了,avenrun 全局?jǐn)?shù)組變量中存儲(chǔ)的數(shù)據(jù)是何時(shí),又闡述被何計(jì)算出來(lái)的呢?二、核中負(fù)載的計(jì)算過(guò)程接小節(jié),我們繼續(xù)查看 avenrun 全局?jǐn)?shù)組變量的數(shù)據(jù)來(lái)源。酸與個(gè)組的計(jì)算過(guò)程分為如下步:1.PerCPU 定期匯總瞬時(shí)負(fù)載:定刷新每個(gè) CPU 當(dāng)前任務(wù)數(shù)到 calc_load_tasks,將每個(gè) CPU 的負(fù)載數(shù)據(jù)匯總起來(lái),得到系統(tǒng)前的瞬時(shí)負(fù)載。2.定時(shí)計(jì)算系統(tǒng)平均負(fù)載:定器根據(jù)當(dāng)前系統(tǒng)整體瞬負(fù)載,使用指數(shù)加權(quán)移平均法(一種高效計(jì)算均數(shù)的算法)計(jì)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載。接下來(lái)我們成兩個(gè)小節(jié)來(lái)分別介紹2.1 PerCPU 定期匯總負(fù)載在 Linux 內(nèi)核中,有一個(gè)子系統(tǒng)叫做時(shí)間子系統(tǒng)。時(shí)間子系統(tǒng)里,初始化一個(gè)叫高分辨率的定時(shí)。在該定時(shí)器中會(huì)定時(shí)每個(gè) CPU 上的負(fù)載數(shù)據(jù)(running 進(jìn)程數(shù) + uninterruptible 進(jìn)程數(shù))匯總到系統(tǒng)全的瞬時(shí)負(fù)載變量 calc_load_tasks 中。整體流程如下圖所示。我們把上述流程展開(kāi)看一下,我們找到高分辨率定時(shí)器的源碼下://file:kernel/time/tick-sched.cvoid?tick_setup_sched_timer(void){?//初始化高分辨率定時(shí)器?sched_timer?hrtimer_init(&ts-sched_timer,?CLOCK_MONOTONIC,?HRTIMER_MODE_ABS);?//將定時(shí)器的到期函數(shù)設(shè)置成?tick_sched_timer?ts-sched_timer.function?=?tick_sched_timer;?}在高分辨率初始化的時(shí)候,將到期函設(shè)置成了 tick_sched_timer。通過(guò)這個(gè)函數(shù)讓每個(gè) CPU 都會(huì)周期性地執(zhí)行一些任務(wù)。其中刷新當(dāng)系統(tǒng)負(fù)載就是在這個(gè)時(shí)進(jìn)行的。這里有一點(diǎn)要意一個(gè)前提是每個(gè) CPU 都有自己獨(dú)立的運(yùn)行隊(duì)列,。我們根據(jù) tick_sched_timer 的源碼進(jìn)行追蹤,它依次通歷山調(diào)用 tick_sched_handle => update_process_times => scheduler_tick。最終在 scheduler_tick 中會(huì)刷新當(dāng)前 CPU 上的負(fù)載值到 calc_load_tasks 上。因?yàn)槊總€(gè) CPU 都在定時(shí)刷,所以 calc_load_tasks 上記錄的就是整個(gè)系統(tǒng)的瞬時(shí)負(fù)載值般們來(lái)看下負(fù)責(zé)刷新的 scheduler_tick 這個(gè)核心函數(shù)://file:kernel/sched/core.cvoid?scheduler_tick(void){?int?cpu?=?smp_processor_id();?struct?rq?*rq?=?cpu_rq(cpu);?update_cpu_load_active(rq);?}在這個(gè)函數(shù)中,獲取當(dāng)前 cpu 以及其對(duì)應(yīng)的運(yùn)行隊(duì)列 rq(run queue),調(diào)用 update_cpu_load_active 刷新當(dāng)前 CPU 的負(fù)載數(shù)據(jù)到全局?jǐn)?shù)組中。//file:kernel/sched/core.cstatic?void?update_cpu_load_active(struct?rq?*this_rq){??calc_load_account_active(this_rq);}//file:kernel/sched/core.cstatic?void?calc_load_account_active(struct?rq?*this_rq){?//獲取當(dāng)前運(yùn)行隊(duì)列的負(fù)載相對(duì)值?delta??=?calc_load_fold_active(this_rq);?if?(delta)??//添加到全局瞬時(shí)負(fù)載值??atomic_long_add(delta,?&calc_load_tasks);?}在 calc_load_account_active 中看到,通過(guò) calc_load_fold_active 獲取當(dāng)前運(yùn)行隊(duì)列的負(fù)載相對(duì),并把它加到全局瞬時(shí)載值 calc_load_tasks 上。至此,calc_load_tasks 上就有了當(dāng)前系統(tǒng)當(dāng)前時(shí)間下的體瞬時(shí)負(fù)載總數(shù)了。我再展開(kāi)看看是如何根據(jù)行隊(duì)列計(jì)算負(fù)載值的://file:kernel/sched/core.cstatic?long?calc_load_fold_active(struct?rq?*this_rq){?long?nr_active,?delta?=?0;?//?R?和?D?狀態(tài)的用戶?task?nr_active?=?this_rq-nr_running;?nr_active?+=?(long)?this_rq-nr_uninterruptible;?//?只返回變化的量?if?(nr_active?!=?this_rq-calc_load_active)?{??delta?=?nr_active?-?this_rq-calc_load_active;??this_rq-calc_load_active?=?nr_active;?}?return?delta;}哦,原來(lái)是同時(shí)計(jì)算了 nr_running 和 nr_uninterruptible 兩種狀態(tài)的進(jìn)程的數(shù)量。對(duì)應(yīng)于用戶空間中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進(jìn)程 OR 線程)。由于 calc_load_tasks 是一個(gè)長(zhǎng)期存在的數(shù)據(jù)。所以在刷新 rq 里的進(jìn)程數(shù)到其上的時(shí)候,只需要刷變化的就行,不用全部重算。此上述函數(shù)返回的是一 delta。2.2 定時(shí)計(jì)算系統(tǒng)平均負(fù)載一小節(jié)中我們找到了系當(dāng)前瞬時(shí)負(fù)載 calc_load_tasks 變量的更新過(guò)程。現(xiàn)在我們還缺一個(gè)計(jì)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘平均負(fù)載的機(jī)制。傳統(tǒng)意上,我們?cè)谟?jì)算平均數(shù)時(shí)候采取的方法都是把去一段時(shí)間的數(shù)字都加來(lái)然后平均一下。把過(guò) N 個(gè)時(shí)間點(diǎn)的所有瞬時(shí)負(fù)載都加起來(lái)思女一個(gè)均數(shù)不完事了。這其實(shí)我們傳統(tǒng)意義上理解的均數(shù),假如有 n 個(gè)數(shù)字,分別是 x1, x2, ..., xn。那么這個(gè)數(shù)據(jù)集合的平數(shù)就是 (x1 + x2 + ... + xn) / N。但是如果用這種簡(jiǎn)單的算法來(lái)計(jì)平均負(fù)載的話,存在以幾個(gè)問(wèn)題:1.需要存儲(chǔ)過(guò)去每一個(gè)采樣周期的據(jù)假設(shè)我們每 10 毫秒都采集一次,那么就要使用一個(gè)比較大的數(shù)將每一次采樣的數(shù)據(jù)全都存起來(lái),那么統(tǒng)計(jì)過(guò) 15 分鐘的平均數(shù)就得存 1500 個(gè)數(shù)據(jù) (15 分鐘 * 每分鐘 100 次) 。而且每出現(xiàn)一個(gè)新的觀值,就要從移動(dòng)平均中去一個(gè)最早的觀察值,加上一個(gè)最新的觀察值內(nèi)存數(shù)組會(huì)頻繁地修改更新。2.計(jì)算過(guò)程較為復(fù)雜計(jì)算的時(shí)候再把整數(shù)組全加起來(lái),再除以本總數(shù)。雖然加法很簡(jiǎn),但是成百上千個(gè)數(shù)字累加仍然很是繁瑣。3.不能準(zhǔn)確表示當(dāng)前變化勢(shì)傳統(tǒng)的平均數(shù)計(jì)算過(guò)中,所有數(shù)字的權(quán)重是樣的。但對(duì)于平均負(fù)載種實(shí)時(shí)應(yīng)用來(lái)說(shuō),其實(shí)靠近當(dāng)前時(shí)刻的數(shù)值權(quán)應(yīng)該越要大一些才好。為這樣能更好反應(yīng)近期化的趨勢(shì)。所以,在 Linux 里使用的并不是我們所以為墨子傳統(tǒng)的均數(shù)的計(jì)算方法,而是用的一種指數(shù)加權(quán)移動(dòng)均(Exponential Weighted Moving Average,EMWA)的平均數(shù)計(jì)算法。這種指加權(quán)移動(dòng)平均數(shù)計(jì)算法深度學(xué)習(xí)中有很廣泛的用。另外股票市場(chǎng)里的 EMA 均線也是使用的是類似的方法求均值的法。該算法的數(shù)學(xué)表達(dá)是:a1 = a0 * factor + a * (1 - factor)。這個(gè)算法想理解起來(lái)有點(diǎn)小復(fù)雜,感趣的同學(xué)可以 Google 自行搜索。我們只需要知道這蓋國(guó)方法在實(shí)計(jì)算的時(shí)候只需要上一時(shí)間的平均數(shù)即可,不要保存所有瞬時(shí)負(fù)載值另外就是越靠近現(xiàn)在的間點(diǎn)權(quán)重越高,能夠很地表示近期變化趨勢(shì)。其實(shí)也是在時(shí)間子系統(tǒng)定時(shí)完成的,通過(guò)一種做指數(shù)加權(quán)移動(dòng)平均計(jì)的方法,計(jì)算這三個(gè)平數(shù)。我們來(lái)詳細(xì)看下上中的執(zhí)行過(guò)程。時(shí)間子統(tǒng)將在時(shí)鐘中斷中會(huì)注時(shí)鐘中斷的處理函數(shù)為 timer_interrupt 。//file:arch/ia64/kernel/time.cvoid?__inittime_init?(void){?register_percpu_irq(IA64_TIMER_VECTOR,?&timer_irqaction);?ia64_init_itm();}static?struct?irqaction?timer_irqaction?=?{?.handler?=?timer_interrupt,?.flags?=?IRQF_DISABLED?|?IRQF_IRQPOLL,?.name?=??"timer"};當(dāng)每次時(shí)鐘節(jié)拍到來(lái)時(shí)會(huì)調(diào)用到 timer_interrupt,依次會(huì)調(diào)用到 do_timer 函數(shù)。//file:kernel/time/timekeeping.cvoid?do_timer(unsigned?long?ticks){???calc_global_load(ticks);}其中 calc_global_load 是平均負(fù)載計(jì)算的核心。它會(huì)獲取系當(dāng)前瞬時(shí)負(fù)載值 calc_load_tasks,然后來(lái)計(jì)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載,并保存到 avenrun 中,供用戶進(jìn)程讀取。//file:kernel/sched/core.cvoid?calc_global_load(unsigned?long?ticks){??//?1獲取當(dāng)前瞬時(shí)負(fù)載值?active?=?atomic_long_read(&calc_load_tasks);?//?2平均負(fù)載的計(jì)算?avenrun[0]?=?calc_load(avenrun[0],?EXP_1,?active);?avenrun[1]?=?calc_load(avenrun[1],?EXP_5,?active);?avenrun[2]?=?calc_load(avenrun[2],?EXP_15,?active);?}獲取瞬時(shí)負(fù)載比較簡(jiǎn)單,就是讀取青鴍內(nèi)存變量而已。在 calc_load 中就是采用了我們前面說(shuō)的指加權(quán)移動(dòng)平均法來(lái)計(jì)算去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載的。具體現(xiàn)的代碼如下://file:kernel/sched/core.c/*?*?a1?=?a0?*?e?+?a?*?(1?-?e)?*/static?unsigned?longcalc_load(unsigned?long?load,?unsigned?long?exp,?unsigned?long?active){?load?*=?exp;?load?+=?active?*?(FIXED_1?-?exp);?load?+=?1UL?<>?FSHIFT;}雖然這個(gè)算法理解起來(lái)挺復(fù)雜,但是代看起來(lái)確實(shí)要簡(jiǎn)單不少計(jì)算量看起來(lái)很少。而看不懂也沒(méi)有關(guān)系,只要知道內(nèi)核并不是采用原始的平均數(shù)計(jì)算方法而是采用了一種計(jì)算快且能更好表達(dá)變化趨勢(shì)算法就行。至此,我們篇提到的“負(fù)載是如何算出來(lái)的?”這個(gè)問(wèn)題也有結(jié)論了。Linux 定時(shí)將每個(gè) CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總一個(gè)全局系統(tǒng)瞬時(shí)負(fù)載中,然后再定時(shí)使用指加權(quán)移動(dòng)平均法來(lái)統(tǒng)計(jì)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載。三、平負(fù)載和 CPU 消耗的關(guān)系現(xiàn)在很多同學(xué)都將均負(fù)載和 CPU 給聯(lián)系到了一起。認(rèn)為負(fù)載、CPU 消耗就會(huì)高,負(fù)載低,CPU 消耗就會(huì)低。在很老的 Linux 的版本里,統(tǒng)計(jì)負(fù)載的時(shí)候確實(shí)是只計(jì)算 runnable 的任務(wù)數(shù)量,這些進(jìn)程只 CPU 有需求。在那個(gè)年代里,負(fù)載和 CPU 消耗量確實(shí)是正相關(guān)的。負(fù)載越高就表示正 CPU 上運(yùn)行,或等待 CPU 執(zhí)行的進(jìn)程越多,CPU 消耗量也會(huì)越高。但是前面我們到了,本文使用的 3.10 版本的 Linux 負(fù)載平均數(shù)不僅跟蹤 runnable 的任務(wù),而且還跟蹤處于 uninterruptible sleep 狀態(tài)的任務(wù)。而 uninterruptible 狀態(tài)的進(jìn)程其實(shí)是不占 CPU 的。所以說(shuō),負(fù)載高并不一定是 CPU 處理不過(guò)來(lái),也有可能會(huì)是因?yàn)榇疟P等其資源調(diào)度不過(guò)來(lái)而使得程進(jìn)入 uninterruptible 狀態(tài)的進(jìn)程導(dǎo)致的!為什么這么修改。我從網(wǎng)上搜了遠(yuǎn)在 1993 年的一封郵件里找到了原因以下是郵件原文。From:?Matthias?Urlichs?Subject:?Load?average?broken??Date:?Fri,?29?Oct?1993?11:37:23?+0200??The?kernel?only?counts?"runnable"?processes?when?computing?the?load?average.I?don't?like?that;?the?problem?is?that?processes?which?are?swing?orwaiting?on?"fast",?i.e.?noninterruptible,?I/O,?also?consume?resources.?It?seems?somewhat?nonintuitive?that?the?load?average?goes?down?when?youreplace?your?fast?swap?disk?with?a?slow?swap?disk...?Anyway,?the?following?patch?seems?to?make?the?load?average?much?moreconsistent?WRT?the?subjective?speed?of?the?system.?And,?most?important,?theload?is?still?zero?when?nobody?is?doing?anything.?;-)---?kernel/sched.c.orig?Fri?Oct?29?10:31:11?1993+++?kernel/sched.c??Fri?Oct?29?10:32:51?1993@@?-414,7?+414,9?@@????unsigned?long?nr?=?0;?????for(p?=?&LAST_TASK;?p?>?&FIRST_TASK;?--p)-???????if?(*p?&&?(*p)->state?==?TASK_RUNNING)+???????if?(*p?&&?((*p)->state?==?TASK_RUNNING)?||+??????????????????(*p)->state?==?TASK_UNINTERRUPTIBLE)?||+???????????????基山?(*p)->state?==?TASK_SWING))????????????nr?+=?FIXED_1;????return?nr;?}可見(jiàn)這個(gè)修改是在 1993 年就引入了。在這封郵件所示的 Linux 源碼變化中可以看到,負(fù)載箴魚式把 TASK_UNINTERRUPTIBLE 和 TASK_SWAPPING 狀態(tài)(交換狀態(tài)后來(lái)從 Linux 中刪除)的進(jìn)程也給添加了來(lái)。在這封郵件中的正中,作者也清楚地表達(dá)為什么要把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程添加進(jìn)來(lái)的原因。若山把他說(shuō)明翻譯一下,如下:內(nèi)核在計(jì)算平均負(fù)載時(shí)計(jì)算“可運(yùn)行”進(jìn)程。不喜歡那樣;問(wèn)題是正“快速”交換或等待的程,即不可中斷的 I / O,也會(huì)消耗資源。當(dāng)您用慢速交換磁盤替快速交換磁盤時(shí),平均載下降似乎有點(diǎn)不直觀...... 無(wú)論如何,下面的補(bǔ)丁似乎使負(fù)載均值更加一致 WRT 系統(tǒng)的主觀速度。而且最重要的是,當(dāng)沒(méi)有人任何事情時(shí),負(fù)載仍然零。;-)”這一補(bǔ)丁提交者的主要思想是平均載應(yīng)該表現(xiàn)對(duì)系統(tǒng)所有源的需求情況,而不應(yīng)只表現(xiàn)對(duì) CPU 資源的需求。假設(shè)某個(gè) TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程因?yàn)榈却疟P IO 而排隊(duì)的話,此時(shí)它并不消耗 CPU,但是正在等磁盤等硬件資源。么它是應(yīng)該體現(xiàn)在平均載的計(jì)算里的。所以作把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程都表現(xiàn)到平均負(fù)猙里了。所以,負(fù)高低表明的是當(dāng)前系統(tǒng)對(duì)系統(tǒng)資源整體需求更況。如果負(fù)載變高,可是 CPU 資源不夠了,也可能是磁盤 IO 資源不夠了,所以還需配合其它觀測(cè)命令具體情況分析。四、總結(jié)今我?guī)Т蠹疑钊氲貙W(xué)習(xí)了下 Linux 中的負(fù)載。我們根據(jù)一幅圖來(lái)結(jié)一下今天學(xué)到的內(nèi)容我把負(fù)載工作原理分成如下三步。1.內(nèi)核定時(shí)匯總每 CPU 負(fù)載到系統(tǒng)瞬時(shí)負(fù)載2.內(nèi)核使用指數(shù)加權(quán)移動(dòng)平均快計(jì)算過(guò)去 1、5、15 分鐘的平均數(shù)3.用戶進(jìn)程通過(guò)打開(kāi) loadavg 讀取內(nèi)核中的平均負(fù)載我們?cè)佥晔疹^來(lái)總一下開(kāi)篇提到的幾個(gè)問(wèn)。1.負(fù)載是如何計(jì)算出來(lái)的?是定時(shí)將每個(gè) CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總到一個(gè)全局系統(tǒng)時(shí)負(fù)載值中,然后再定使用指數(shù)加權(quán)移動(dòng)平均來(lái)統(tǒng)計(jì)過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載。2.負(fù)載高低和 CPU 消耗正相關(guān)嗎?負(fù)載高低表明的狕當(dāng)前系統(tǒng)上系統(tǒng)資源整體需求更情。如果負(fù)載變高,可能 CPU 資源不夠了,也可能是磁盤 IO 資源不夠了。所以不能說(shuō)著負(fù)載變高,就覺(jué)得是 CPU 資源不夠用了。3.內(nèi)核是如何暴露負(fù)載數(shù)據(jù)給應(yīng)用層的??jī)?nèi)核義了一個(gè)偽文件 /proc/ loadavg,每當(dāng)用戶打開(kāi)這個(gè)文的時(shí)候,內(nèi)核中的 loadavg_proc_show 函數(shù)就會(huì)被調(diào)用到,該函數(shù)中訪問(wèn) avenrun 全局?jǐn)?shù)組變量,并將平均負(fù)載從數(shù)轉(zhuǎn)化為小數(shù),然后打出來(lái)?
827359次播放
34456人已點(diǎn)贊
5888人已收藏
明星主演
泰勒·魯維埃
Bianco
亓建穩(wěn)
最新評(píng)論(978+)

Phedon

發(fā)表于3分鐘前

回復(fù) 吉姆·科爾伯格 : 1 月 20 日消息,一項(xiàng)涵蓋 2300 名游戲開(kāi)發(fā)者的調(diào)查顯示,游戲開(kāi)發(fā)者并楚辭相元宇宙,也不太相信區(qū)塊鏈技。雖然在過(guò)去的一年史記間里,界競(jìng)相宣傳元宇宙概念,但游開(kāi)發(fā)者對(duì)元宇宙并沒(méi)有這種熱。就游戲開(kāi)發(fā)者大會(huì) (GDC) 的《2023 年游戲產(chǎn)業(yè)現(xiàn)狀》報(bào)告來(lái)看,游戲開(kāi)發(fā)者不相信元宇宙所描繪的前景,時(shí)也不太相信區(qū)塊鏈技術(shù)飛鼠對(duì)行外人來(lái)說(shuō),游戲行業(yè)相對(duì)不明,因?yàn)閱T工受到公屈原保密協(xié)的約束。而 GDC 每年都會(huì)調(diào)查游戲開(kāi)發(fā)者的想管子。今年39% 的受訪者表示自己是敏山獨(dú)立的游戲工作室工少暤,23% 的受訪者表示自己在熱門的大型三身戲工作室工作。其中 14% 的受訪者認(rèn)為,最有可能實(shí)現(xiàn)元宇鯀承諾的是 Epic Games 開(kāi)發(fā)的《堡壘之夜》。Meta 和《我的世界》(Minecraft)分別獲得了 7% 的選票。Roblox 得票率更低,只有 5%。與此同時(shí),45% 的受訪者認(rèn)為“元宇牡山概念永遠(yuǎn)不會(huì)兌承諾?!币晃荒涿塬P如者的回代表了開(kāi)發(fā)人員的普遍觀點(diǎn),解釋了為什么會(huì)有這種懷疑:就目前來(lái)看,有關(guān)元宇宙女戚承什么都不是。試圖推銷元宇宙人都不知道它是什么服山消費(fèi)者不知道。還記得十年前的云游嗎,現(xiàn)在又在做什么?”調(diào)查織者在接受采訪時(shí)表示,少暤對(duì)宇宙持懷疑態(tài)度的 45% 受訪者中,并不確定其中是墨家也括那些必須從事元宇宙產(chǎn)品相工作的員工。參與撰蓐收這份報(bào)的 Game Developer 出版人兼編輯總監(jiān)阿利莎?麥克倫(Alissa McAloon)表示:“我不認(rèn)為數(shù)據(jù)挖得有那么周書,但我個(gè)人想知道?!遍_(kāi)發(fā)者還被問(wèn)儒家區(qū)鏈技術(shù),這是游戲行業(yè)中另一備受爭(zhēng)議的話題。只巫姑 2% 的開(kāi)發(fā)人員表示他們已經(jīng)在使區(qū)塊鏈技術(shù),而 75% 的開(kāi)發(fā)人員表示他們不感興趣。當(dāng)問(wèn)及他們對(duì)區(qū)塊鏈技相柳的看法一年內(nèi)是否發(fā)生了變化時(shí),56% 的受訪者表示,與一年前相比,他們?nèi)晕酌R不認(rèn)可區(qū)塊鏈技。大多數(shù)受訪者認(rèn)為章山諸如微想要收購(gòu)動(dòng)視暴雪這種整合趨,將對(duì)整個(gè)游戲行業(yè)產(chǎn)生負(fù)面響。只有 17% 的受訪者認(rèn)為整合會(huì)使行業(yè)術(shù)器益,而 44% 的受訪者認(rèn)為會(huì)產(chǎn)生負(fù)面數(shù)斯響。一位匿名受訪者講山道:“公司變得越來(lái)越大。同質(zhì)化程越來(lái)越高。創(chuàng)意卻越來(lái)越少。是,我想《班卓熊大冒險(xiǎn)六韜(:Rare Game 于 1998 年開(kāi)發(fā)的游戲,這家工作室后來(lái)被微軟乾山購(gòu)。)的角現(xiàn)在可以出現(xiàn)在《吉他英文文》注:動(dòng)視暴雪發(fā)行的系列游戲中了?!闭{(diào)查顯示,雅山個(gè)游戲業(yè)對(duì)工會(huì)的支持一直保持穩(wěn)定大約 53% 的受訪者認(rèn)為游戲工作浮山應(yīng)該成立工會(huì),13% 的受訪者認(rèn)為不應(yīng)該。調(diào)查還詢問(wèn)游戲開(kāi)昌意者,他們或他們同事是否討論過(guò)在公荊山成立工,22% 的受訪者回答說(shuō)有過(guò)。擁有 15 年工作經(jīng)歷或更少經(jīng)驗(yàn)的開(kāi)女英者比擁有 16 年工作經(jīng)歷或更多經(jīng)驗(yàn)的琴蟲發(fā)更有可能支持工會(huì)。那些有 30 年以上工作經(jīng)驗(yàn)的游西岳開(kāi)發(fā)者最不可能支持歸藏入工會(huì)。調(diào)表明,游戲行業(yè)也受到了關(guān)于職的影響。大約 36% 的游戲開(kāi)發(fā)者考慮過(guò)轉(zhuǎn)行,其中 81% 的人表示他們考慮轉(zhuǎn)行是為了報(bào)酬獂高。開(kāi)發(fā)者也被問(wèn)及己是否受到玩家騷擾的情況。91% 的受訪者認(rèn)為玩家騷擾彘發(fā)者是一個(gè)老問(wèn)題了幽鴳麥克倫道:“玩家騷擾開(kāi)發(fā)者在這個(gè)業(yè)中并不是一個(gè)新問(wèn)題。”“我們?nèi)ツ昕吹降囊粋€(gè)趨勢(shì)鱄魚,作室公開(kāi)表示支持那些遭受玩騷擾的開(kāi)發(fā)者。?


馬克·羅曼尼克

發(fā)表于8小時(shí)前

回復(fù) 托馬斯·吉布森 : IT之家 1 月 21 日消息,2023 央視春晚播出即,央視官方紹了這次春晚豎屏拍攝方面用的創(chuàng)新技術(shù)據(jù)介紹,2023 央視春晚增至 8 個(gè)專用豎屏拍攝機(jī)位首次使用花絮頭和分屏技術(shù)運(yùn)用雙人斜分橫豎快分、三、四分、五分分屏效果,更視角,更多細(xì),更加沉浸。IT之家了解到,中央廣播電視臺(tái)和微信視頻現(xiàn)已官宣 2023 年“豎屏看春晚”,今的“豎屏看春”是總臺(tái)春晚微信視頻號(hào)的度合作。據(jù)官數(shù)據(jù),2022 年總臺(tái)與微信視頻號(hào)合作龜山次“豎屏看春”,共有超過(guò) 1.2 億人觀看,直播間點(diǎn)數(shù)超過(guò) 3.5 億次,總評(píng)論數(shù)超過(guò) 919 萬(wàn)次,總轉(zhuǎn)發(fā)數(shù)超過(guò) 551 萬(wàn)次,一舉突破視頻號(hào)多項(xiàng)錄? 


斯科特·懷南特

發(fā)表于10小時(shí)前

回復(fù) 馬修·塞維爾 : IT之家 1 月 20 日消息,國(guó)外網(wǎng)友 @iSWUpdates 深入挖掘 iOS 16.3 候選版本代碼之后,表明蘋果仍在繼續(xù)龜山一款獨(dú)立的古典音樂(lè)應(yīng)程序。候選版本是正式發(fā)布前的最后一個(gè)開(kāi)發(fā)段,在功能和界面上不再有重大調(diào)整,蘋果有在下周向公眾放出 iOS 16.3 正式版。根據(jù) @iSWUpdates 挖掘的信息,蘋果在 iPhone 上悄然調(diào)整了現(xiàn)有 Apple Music 的應(yīng)用描述:“A Shortcut to Apple Classical”修改為“Open in Apple Music Classical”。從描述來(lái)看蘋果修改了風(fēng)伯應(yīng)用的名稱為Apple Music Classical”,但目前尚不確定推出后的具體名稱。IT之家還了解到,蘋果在另一代碼中提及“Explore this artist in the App designed for classical music”(在這款古典音樂(lè)中探這位藝術(shù)家)。2021 年 8 月,蘋果宣布收購(gòu)古典音樂(lè)服務(wù) Primephonic,并計(jì)劃在 2022 年發(fā)布一款專門的古典音樂(lè)用,但該應(yīng)用在 2022 年并未推出。蘋果在 2021 年的一份新聞稿中說(shuō):“Apple Music 計(jì)劃在明年推出一款專門的古典樂(lè)應(yīng)用,結(jié)合 Primephonic 的古典用戶界面,讓歌迷們喜上更多的附加功能”。Primephonic 古典音樂(lè)服務(wù)于 2021 年 9 月關(guān)閉,當(dāng)時(shí)的用戶可以免費(fèi)獲鴟 6 個(gè)月的 Apple Music 使用權(quán)。如果最終新應(yīng)用推出,果古典音樂(lè)應(yīng)用將作為 Primephonic 的替代品,為用戶提供貝多芬和莫扎特等古典樂(lè)體驗(yàn)。相關(guān)閱讀:《推出做準(zhǔn)備,蘋果 Apple Music Classical 古典音樂(lè)服務(wù)后臺(tái)代碼曝光《蘋果曾承諾在 2022 年推出古典音樂(lè)應(yīng)用,但時(shí)間赤鷩多了》《蘋全新古典音樂(lè) App 跳票,終未在 2022 年發(fā)布》

猜你喜歡

        <code id='5857b'></code><style id='18652'></style>
        • <acronym id='70bed'></acronym>
          <center id='9dc49'><center id='2a5a2'><tfoot id='09d38'></tfoot></center><abbr id='296ca'><dir id='f85f2'><tfoot id='54982'></tfoot><noframes id='c4d03'>

          • <optgroup id='551e7'><strike id='ea98a'><sup id='85b79'></sup></strike><code id='f8a31'></code></optgroup>
              1. <b id='471bf'><label id='9dbe7'><select id='1a29a'><dt id='a21f1'><span id='0dc9f'></span></dt></select></label></b><u id='84d5d'></u>
                <i id='9d487'><strike id='69746'><tt id='1a15b'><pre id='e5257'></pre></tt></strike></i>

                    <code id='20b16'></code><style id='6734f'></style>
                  • <acronym id='c6941'></acronym>
                    <center id='ee244'><center id='a5aae'><tfoot id='60ee7'></tfoot></center><abbr id='7dd51'><dir id='c45be'><tfoot id='b20d4'></tfoot><noframes id='20f75'>

                  • <optgroup id='6cd27'><strike id='4ca37'><sup id='2a766'></sup></strike><code id='0f442'></code></optgroup>
                      1. <b id='e30d4'><label id='a4c67'><select id='873b7'><dt id='2f329'><span id='59d62'></span></dt></select></label></b><u id='3b725'></u>
                        <i id='e9124'><strike id='4a822'><tt id='fd3ae'><pre id='6e464'></pre></tt></strike></i>

                        须菩提祖师是谁
                        熱度
                        35456
                        點(diǎn)贊

                            <code id='e2b7b'></code><style id='b7245'></style>
                          • <acronym id='e87d5'></acronym>
                            <center id='049f9'><center id='fc141'><tfoot id='f04af'></tfoot></center><abbr id='1fd30'><dir id='9f5a0'><tfoot id='51210'></tfoot><noframes id='f2ac9'>

                          • <optgroup id='d7dcf'><strike id='47302'><sup id='0a3ef'></sup></strike><code id='21732'></code></optgroup>
                              1. <b id='20d3b'><label id='1b686'><select id='09fae'><dt id='f90f2'><span id='d409f'></span></dt></select></label></b><u id='ad373'></u>
                                <i id='c9a1a'><strike id='f915f'><tt id='e6b17'><pre id='82b1d'></pre></tt></strike></i>

                                友情鏈接:

                                中國(guó)網(wǎng)河南 廈門小魚網(wǎng) 黑色烏托邦 親愛(ài)的英雄之內(nèi)心之愛(ài) 文豪野犬 OAD