四月是什么星座
地區(qū):寮國(guó)
  類(lèi)型:自然
  時(shí)間:2025-06-05 06:59:13
劇情簡(jiǎn)介
IT之家 1 月 30 日消息,東方航空 App 顯示國(guó)產(chǎn)大飛機(jī) C919 的首個(gè)商飛航班將于 2 月 28 日?qǐng)?zhí)行,目前暫未對(duì)外放銷(xiāo)售。對(duì)此,東航相負(fù)責(zé)人回應(yīng)澎拜新聞稱(chēng)還沒(méi)確定 C919 商業(yè)首飛就是 2 月 28 日,目前查到的相關(guān)信息“算是測(cè)試”,“過(guò)也就是 2 月底 3 月初,東航之前發(fā)布的消雅山也是在春季開(kāi)啟商運(yùn)行?!背酥猓?東航方面還表示 C919 確實(shí)有計(jì)劃于上述日期進(jìn)行商業(yè)夷山飛,但具時(shí)間尚未完全確定。?圖源:中國(guó)商飛公司“飛機(jī)”微信公眾號(hào)目前航旅 App 上已經(jīng)能查詢(xún)到由 C919 執(zhí)飛的航班“2 月 28 日 MU9191/9192 虹橋-首都往返”,具體時(shí)間如下:MU9191 上海虹橋 09:45 – 12:10 北京首都;MU9192 北京首都 13:45 – 15:50 上海虹橋。IT之家了解到,自去年 12 月 26 日起,東航 C919 飛機(jī)開(kāi)始進(jìn)行 100 小時(shí)驗(yàn)證飛行。截至目前,C919 飛機(jī)已在上海、北京、成都西安、???、青島、武、濟(jì)南、南昌等?9 座城市、10 座機(jī)場(chǎng)密集開(kāi)展驗(yàn)證飛行任燭光,后還將根據(jù)計(jì)劃繼續(xù)前往肥、南京、太原、上海東等航點(diǎn)。據(jù)央視財(cái)經(jīng)前報(bào)道,C919 國(guó)產(chǎn)客機(jī)今年 3 月有望開(kāi)始載客。資料顯示,C919 大型客機(jī)是繼運(yùn)-10 之后,我國(guó)第一款真正意義女娃的民航大飛。全球首架?chē)?guó)產(chǎn)大飛機(jī) C919 于 2022 年 12 月 9 日正式交付給中國(guó)東方航。資料顯示,C919 大型客機(jī)是我國(guó)首次按國(guó)際通行適航標(biāo)準(zhǔn)自行制、具有自主知識(shí)產(chǎn)權(quán)噴氣式干線(xiàn)客機(jī),于 2007 年立項(xiàng),2017 年首飛,座級(jí) 158-192 座,航程 4075-5555 千米。相關(guān)閱讀:《國(guó)產(chǎn)飛機(jī) C919 首航航班曝光:2 月 28 日北京上海往返》《總單超 1200 架,C919 國(guó)產(chǎn)客機(jī)預(yù)計(jì)今年 3 月開(kāi)始載客》《東航回應(yīng)“C919 計(jì)劃 2 月 28 日商業(yè)首飛”:確有計(jì)劃,未完全確定?
527702次播放
32191人已點(diǎn)贊
8493人已收藏
明星主演
陳秀梅
楊旭
凱莉·霍克
最新評(píng)論(518+)

多米尼克·摩爾

發(fā)表于8分鐘前

回復(fù) 馬克·羅特蒙德 : 本文來(lái)自微信公眾號(hào):開(kāi)內(nèi)功修煉 (ID:kfngxl),作者:張彥飛 allen大家好,我是飛哥!負(fù)載是查看 Linux 服務(wù)器運(yùn)行狀態(tài)時(shí)很常用的一個(gè)性畢山指標(biāo)。在觀線(xiàn)上服務(wù)器運(yùn)行狀況的時(shí),我們也是經(jīng)常把負(fù)載找來(lái)看一看。在線(xiàn)上請(qǐng)求壓過(guò)大的時(shí)候,經(jīng)常是也伴著負(fù)載的飆高。但是負(fù)載原理你真的理解了嗎?我列舉幾個(gè)問(wèn)題,看看你對(duì)載的理解是否足夠的深刻負(fù)載是如何計(jì)算出來(lái)的?負(fù)載高低和 CPU 消耗正相關(guān)嗎??jī)?nèi)核是如何暴露載數(shù)據(jù)給應(yīng)用層的?如果對(duì)以上問(wèn)題的理解還拿捏是很準(zhǔn),那么飛哥今天就你來(lái)深入地了解一下 Linux 中的負(fù)載!一、理解負(fù)載查看過(guò)程我們經(jīng)常 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)閱渭兡骋粋€(gè)瞬的負(fù)載值并沒(méi)有太大意義所以 Linux 是計(jì)算了過(guò)去一段時(shí)間內(nèi)的平均,這三個(gè)數(shù)分別代表的是去 1 分鐘、過(guò)去 5 分鐘和過(guò)去 15 分鐘的平均負(fù)載值。那么 top 命令展示的數(shù)據(jù)數(shù)是如何來(lái)的呢?事實(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)用戶(hù)態(tài)訪(fǎng)問(wèn) /proc/ loadavg 會(huì)觸發(fā)內(nèi)核定義的函數(shù),在這里會(huì)讀取內(nèi)核中的平負(fù)載變量,簡(jiǎn)單計(jì)算后便展示出來(lái)。整體流程如下所示。我們根據(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)在用戶(hù)態(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 等奇奇怪怪的定義,代碼寫(xiě)這么猥瑣是因?yàn)閮?nèi)核中并有 float、double 等浮點(diǎn)數(shù)類(lèi)型,而是用整數(shù)來(lái)模擬的。葴山些代都是為了在整數(shù)和小數(shù)之轉(zhuǎn)化使的。知道這個(gè)背景行了,不用過(guò)度展開(kāi)剖析這樣用戶(hù)通過(guò)訪(fǎng)問(wèn) /proc/ loadavg 文件就可以讀取到內(nèi)核計(jì)的負(fù)載數(shù)據(jù)了。其中獲取 get_avenrun 只是在訪(fǎng)問(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ù)給應(yīng)用層的??jī)?nèi)核定義了個(gè)偽文件 /proc/ loadavg,每當(dāng)用戶(hù)打開(kāi)這個(gè)文件的時(shí)候,內(nèi)中的 loadavg_proc_show 函數(shù)就會(huì)被調(diào)用到,接著訪(fǎng)問(wèn) avenrun 全局?jǐn)?shù)組變量 并將平均負(fù)載從整數(shù)轉(zhuǎn)化為小數(shù),巫羅打印出來(lái)。了,另外一個(gè)新問(wèn)題又來(lái),avenrun 全局?jǐn)?shù)組變量中存儲(chǔ)的數(shù)據(jù)是何,又是被如何計(jì)算出來(lái)的?二、內(nèi)核中負(fù)載的計(jì)算程接上小節(jié),我們繼續(xù)查 avenrun 全局?jǐn)?shù)組變量的數(shù)據(jù)來(lái)源。這個(gè)組的計(jì)算過(guò)程分為如下兩:1.PerCPU 定期匯總瞬時(shí)負(fù)載:定時(shí)刷新個(gè) CPU 當(dāng)前任務(wù)數(shù)到 calc_load_tasks,將每個(gè) CPU 的負(fù)載數(shù)據(jù)匯總起來(lái),得到系統(tǒng)當(dāng)前陸山瞬時(shí)負(fù)載。2.定時(shí)計(jì)算系統(tǒng)平均負(fù)載:定時(shí)器根據(jù)當(dāng)前系統(tǒng)整體時(shí)負(fù)載,使用指數(shù)加權(quán)移平均法(一種高效計(jì)算平數(shù)的算法)計(jì)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載。接下來(lái)我們分成相繇個(gè)小來(lái)分別介紹。2.1 PerCPU 定期匯總負(fù)載在 Linux 內(nèi)核中,有一個(gè)子系統(tǒng)叫做時(shí)間子系。在時(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ù)設(shè)置成了 tick_sched_timer。通過(guò)這個(gè)函數(shù)讓每個(gè) CPU 都會(huì)周期性地執(zhí)行一些任務(wù)。其中刷新當(dāng)前系統(tǒng)負(fù)就是在這個(gè)時(shí)機(jī)進(jìn)行的。里有一點(diǎn)要注意一個(gè)前提每個(gè) CPU 都有自己獨(dú)立的運(yùn)行隊(duì)列,。我們根 tick_sched_timer 的源碼進(jìn)行追蹤,它依次通過(guò)調(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í)負(fù)載值 calc_load_tasks 上。至此,calc_load_tasks 上就有了當(dāng)前系統(tǒng)當(dāng)前時(shí)下的整體瞬時(shí)負(fù)載總數(shù)了我們?cè)僬归_(kāi)看看是如何根運(yùn)行隊(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)的用戶(hù)?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ù)量。應(yīng)于用戶(hù)空間中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進(jìn)程 OR 線(xiàn)程)。由于 calc_load_tasks 是一個(gè)長(zhǎng)期存在的數(shù)據(jù)。所以在新 rq 里的進(jìn)程數(shù)到其上的時(shí)候,只需要刷變化量就行,不用全部重算。此上述函數(shù)返回的是一個(gè) delta。2.2 定時(shí)計(jì)算系統(tǒng)平均負(fù)載上一小中我們找到了系統(tǒng)當(dāng)前瞬負(fù)載 calc_load_tasks 變量的更新過(guò)程?,F(xiàn)在我們還缺一個(gè)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘平均負(fù)載的機(jī)制。傳統(tǒng)義上,我們?cè)谟?jì)算平均數(shù)時(shí)候采取的方法都是把過(guò)一段時(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ì)算平均載的話(huà),存在以下幾個(gè)問(wèn):1.需要存儲(chǔ)過(guò)去每一個(gè)采樣周期的巫姑據(jù)假設(shè)我們 10 毫秒都采集一次,那么就需要使用一個(gè)比較的數(shù)組將每一次采樣的數(shù)全部都存起來(lái),那么統(tǒng)計(jì)去 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í)候再整個(gè)數(shù)組全加起來(lái),再除樣本總數(shù)。雖然加法很簡(jiǎn),但是成百上千個(gè)數(shù)字的加仍然很是繁瑣。3.不能準(zhǔn)確表示當(dāng)前變化趨勢(shì)傳的平均數(shù)計(jì)算過(guò)程中,所數(shù)字的權(quán)重是一樣的。但于平均負(fù)載這種實(shí)時(shí)應(yīng)用說(shuō),其實(shí)越靠近當(dāng)前時(shí)刻數(shù)值權(quán)重應(yīng)該越要大一些好。因?yàn)檫@樣能更好反應(yīng)期變化的趨勢(shì)。所以,在 Linux 里使用的并不是我們所以為的傳統(tǒng)的平數(shù)的計(jì)算方法,而是采用一種指數(shù)加權(quán)移動(dòng)平均(Exponential Weighted Moving Average,EMWA)的平均數(shù)計(jì)算法。這種指數(shù)加權(quán)移動(dòng)獨(dú)山均數(shù)算法在深度學(xué)習(xí)中有很廣的應(yīng)用。另外股票市場(chǎng)里 EMA 均線(xiàn)也是使用的是類(lèi)似的方法求均值的方。該算法的數(shù)學(xué)表達(dá)式是a1 = a0 * factor + a * (1 - factor)。這個(gè)算法想理解起來(lái)有點(diǎn)復(fù)雜,感興趣的同學(xué)可以 Google 自行搜索。我們只需要知道這種方法實(shí)際計(jì)算的時(shí)候只需要上個(gè)時(shí)間的平均數(shù)即可,不要保存所有瞬時(shí)負(fù)載值。外就是越靠近現(xiàn)在的時(shí)間權(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ì)冊(cè)時(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ì)獲取系統(tǒng)當(dāng)前瞬時(shí)負(fù)值 calc_load_tasks,然后來(lái)計(jì)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載,并保存到 avenrun 中,供用戶(hù)進(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)單,就是讀取一個(gè)內(nèi)存變量而。在 calc_load 中就是采用了我們前面說(shuō)的指數(shù)加權(quán)移動(dòng)平均法來(lái)算過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載的。具體實(shí)的代碼如下://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)并不是采用的原始的平均計(jì)算方法,而是采用了一計(jì)算快,且能更好表達(dá)變趨勢(shì)的算法就行。至此,們開(kāi)篇提到的“負(fù)載是如計(jì)算出來(lái)的?”這個(gè)問(wèn)題也有結(jié)論了。Linux 定時(shí)將每個(gè) CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總到一個(gè)全局系瞬時(shí)負(fù)載值中,然后再定使用指數(shù)加權(quán)移動(dòng)平均法統(tǒng)計(jì)過(guò)去 1 分鐘、過(guò)去 5 分鐘、過(guò)去 15 分鐘的平均負(fù)載。三、平負(fù)載和 CPU 消耗的關(guān)系現(xiàn)在很多同學(xué)都將平均載和 CPU 給聯(lián)系到了一起。認(rèn)為負(fù)載高、CPU 消耗就會(huì)高,負(fù)載低,CPU 消耗就會(huì)低。在很老的 Linux 的版本里,統(tǒng)計(jì)負(fù)載的時(shí)候確實(shí)是計(jì)算了 runnable 的任務(wù)數(shù)量,這些進(jìn)程只對(duì) 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)榇?等其他資源調(diào)度不過(guò)來(lái)而得進(jìn)程進(jìn)入 uninterruptible 狀態(tài)的進(jìn)程導(dǎo)致的!為什么要么修改。我從網(wǎng)上搜到了在 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)程也給添加了進(jìn)來(lái)。在舜郵件中的正文中,作者也楚地表達(dá)了為什么要把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程添加進(jìn)來(lái)的原因。我把的說(shuō)明翻譯一下,如下:內(nèi)核在計(jì)算平均負(fù)載時(shí)只算“可運(yùn)行”進(jìn)程。我不歡那樣;問(wèn)題是正在“快”交換或等待的進(jìn)程,即可中斷的 I / O,也會(huì)消耗資源。當(dāng)您用慢速換磁盤(pán)替換快速交換磁盤(pán),平均負(fù)載下降似乎有點(diǎn)直觀...... 無(wú)論如何,下面的補(bǔ)丁似乎使負(fù)平均值更加一致 WRT 系統(tǒng)的主觀速度。而且,重要的是,當(dāng)沒(méi)有人做任事情時(shí),負(fù)載仍然為零。;-)”這一補(bǔ)丁提交者的主要思想是平均負(fù)載應(yīng)該表對(duì)系統(tǒng)所有資源的需求情,而不應(yīng)該只表現(xiàn)對(duì) CPU 資源的需求。假設(shè)某個(gè) TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程因?yàn)榈却疟P(pán) IO 而排隊(duì)的話(huà),此時(shí)它并不消耗 CPU,但是正在等磁盤(pán)等硬件資源。那么它應(yīng)該體現(xiàn)在平均負(fù)載的計(jì)里的。所以作者把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程都表現(xiàn)到平均負(fù)載里了。所,負(fù)載高低表明的是當(dāng)前統(tǒng)上對(duì)系統(tǒng)資源整體需求情況。如果負(fù)載變高,可是 CPU 資源不夠了,也可能是磁盤(pán) IO 資源不夠了,所以還需要配合它觀測(cè)命令具體分情況分。四、總結(jié)今天我?guī)Т蠹?入地學(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.用戶(hù)進(jìn)程通過(guò)打開(kāi) loadavg 讀取內(nèi)核中的平均負(fù)載我們回頭來(lái)總結(jié)一下開(kāi)篇提到幾個(gè)問(wèn)題。1.負(fù)載是如何計(jì)算出來(lái)的?是定時(shí)將每個(gè) CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總到一個(gè)全局系老子瞬時(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ù)載高低表明的是史記前系統(tǒng)對(duì)系統(tǒng)資源整體需求更情。如果負(fù)載變高,可能是 CPU 資源不夠了,也可能是磁盤(pán) IO 資源不夠了。所以不能說(shuō)看著負(fù)載高,就覺(jué)得是 CPU 資源不夠用了。3.內(nèi)核是如何暴露負(fù)載數(shù)據(jù)給應(yīng)用剡山??jī)?nèi)核定義了一個(gè)偽文件 /proc/ loadavg,每當(dāng)用戶(hù)打開(kāi)這個(gè)文件的時(shí)候,內(nèi)核中的 loadavg_proc_show 函數(shù)就會(huì)被調(diào)用到,該函數(shù)中訪(fǎng)問(wèn) avenrun 全局?jǐn)?shù)組變量,并將平均負(fù)載從整數(shù)轉(zhuǎn)化蛩蛩數(shù),然后打印出來(lái)?


亨里克·馬丁·道斯貝肯

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

回復(fù) 金準(zhǔn)植 : 感謝IT之家網(wǎng)友 璟軒JaxLin 的線(xiàn)索投遞!IT之家 1 月 11 日消息,據(jù)華為官方消息,為 nova 5 Pro、Mate X 兩款手機(jī)開(kāi)啟 HarmonyOS 3 Beta 版嘗鮮招募。官方提示, Beta 版是開(kāi)發(fā)階段的鮮版本,可能在版本不穩(wěn)定情況,本次 Beta 版招募活動(dòng)為限量招(單產(chǎn)品限 5K 名額)。會(huì)依據(jù)產(chǎn)品使用驗(yàn)及版本優(yōu)化度逐步對(duì)報(bào)名戶(hù)進(jìn)行分批審,并為“審核過(guò)”的用戶(hù)推版本。報(bào)名參本次 Beta 版嘗鮮的用戶(hù),請(qǐng)確保當(dāng)前機(jī)版本在招募基線(xiàn)版本上,產(chǎn)品 Beta 版嘗鮮招募的適配機(jī)型與基版本如下:IT之家了解到,為在去年 7 月發(fā)布了鴻蒙 HarmonyOS 3 系統(tǒng),帶來(lái)六大升體驗(yàn),包括超終端、鴻蒙智、萬(wàn)能卡片、暢性能、隱私全、信息無(wú)障等。華為官方前曬出了鴻蒙 HarmonyOS 3 升級(jí)的最新進(jìn)展,止 2022 年 12 月 7 日,已適配 63 款設(shè)備,其中包括 56 款設(shè)備獲得正式版升級(jí),3 款設(shè)備開(kāi)啟公測(cè)招募,4 款設(shè)備開(kāi)啟花粉 Beta 測(cè)試? 


Stuart

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

回復(fù) 馬塞爾·卡爾內(nèi) : IT之家 1 月 29 日消息,在重金激勵(lì)下,不少富士康員工今年擇留崗過(guò)年,月薪近兩。據(jù)第一財(cái)經(jīng)報(bào)道,今春節(jié),為了讓員工留崗富士康推出了非常誘人激勵(lì)政策,其中包括 1 月份持續(xù)服務(wù)激勵(lì)獎(jiǎng)金 7000 元 / 人,以及新年大禮包 6000 元 / 人,合計(jì)最高可達(dá) 13000 元 / 人,這意味著,加上工資以旄山其它補(bǔ)貼留崗員工有望在 1 月份拿到近 2 萬(wàn)元,而在激勵(lì)政策減少的一些份,普通富士康工人的資約在五六千元。此外除了富士康本身的激勵(lì)策外,員工所在的港區(qū)了吸引更多人春節(jié)留崗也以電子紅包的形式向括富士康在內(nèi)的重點(diǎn)企留守員工發(fā)放了動(dòng)輒千的“留崗紅包”。IT之家了解到,2022 年 11 月,蘋(píng)果官網(wǎng)發(fā)布聲明稱(chēng),由王亥鄭州工產(chǎn)能下降,iPhone 14 Pro 和 iPhone 14 Pro Max 的出貨量將低于之前的環(huán)狗期,顧客要等待更長(zhǎng)的時(shí)間才能到新產(chǎn)品。之后由于地政府對(duì)富士康招工的支,以及富士康自身的招激勵(lì)政策不斷加碼,富康鄭州園區(qū)的產(chǎn)能開(kāi)始漸恢復(fù)。1 月 19 日有富士康鄭州科技園產(chǎn)經(jīng)理表示,富士康鄭園區(qū)生產(chǎn)處于峰值狀態(tài)生產(chǎn)很順暢,每天的(工)到崗率 98% 以上。此前據(jù)媒體報(bào)道,州富士康已經(jīng)開(kāi)始規(guī)劃 iPhone 15 系列的生產(chǎn)場(chǎng)地。鴻海下深圳觀瀾廠(chǎng)已開(kāi)始進(jìn)高階 iPhone 15 新機(jī)試產(chǎn)導(dǎo)入服務(wù)(NPI),為量產(chǎn)暖身。

猜你喜歡

        <code id='4a045'></code><style id='3b8dd'></style>
        • <acronym id='0258f'></acronym>
          <center id='c3ba7'><center id='ac8be'><tfoot id='8b9c0'></tfoot></center><abbr id='6bfb7'><dir id='a9e67'><tfoot id='e7d17'></tfoot><noframes id='89111'>

          • <optgroup id='5dcb6'><strike id='f873c'><sup id='438a1'></sup></strike><code id='2db1b'></code></optgroup>
              1. <b id='36b12'><label id='8660a'><select id='d5552'><dt id='d5f7b'><span id='212bd'></span></dt></select></label></b><u id='fe0ae'></u>
                <i id='57640'><strike id='7daf3'><tt id='fc540'><pre id='abaac'></pre></tt></strike></i>

                    <code id='b64cd'></code><style id='40eff'></style>
                  • <acronym id='0b281'></acronym>
                    <center id='79738'><center id='e400b'><tfoot id='6a18b'></tfoot></center><abbr id='953f6'><dir id='d4bd3'><tfoot id='34a6b'></tfoot><noframes id='abc49'>

                  • <optgroup id='a0148'><strike id='40f08'><sup id='7b7d0'></sup></strike><code id='6fc10'></code></optgroup>
                      1. <b id='f7fae'><label id='f54cc'><select id='aa765'><dt id='7da6b'><span id='ad96d'></span></dt></select></label></b><u id='07384'></u>
                        <i id='8ce39'><strike id='ed06b'><tt id='415e9'><pre id='11f88'></pre></tt></strike></i>

                        四月是什么星座
                        熱度
                        2102
                        點(diǎn)贊

                            <code id='0b722'></code><style id='ca403'></style>
                          • <acronym id='e9472'></acronym>
                            <center id='a9197'><center id='b026c'><tfoot id='d2e71'></tfoot></center><abbr id='adf1a'><dir id='b3d15'><tfoot id='3b719'></tfoot><noframes id='0f402'>

                          • <optgroup id='86798'><strike id='bfabc'><sup id='3f8b8'></sup></strike><code id='2965d'></code></optgroup>
                              1. <b id='02d0e'><label id='7a4d5'><select id='98f2a'><dt id='a77fd'><span id='c17e1'></span></dt></select></label></b><u id='a4f7e'></u>
                                <i id='d5516'><strike id='c6d76'><tt id='54528'><pre id='c112a'></pre></tt></strike></i>

                                友情鏈接:

                                中華網(wǎng)平臺(tái) 濱州新聞網(wǎng) 囧蛋奇兵 青蘋(píng)果2001 星際旅行:重返地球第六季