在线免费看片a欧美,午夜AV不卡网站在线播放,久久综合尹人77777,96国产在线分享

      <s id="srvai"></s>
      要聞 戲曲 書畫 數(shù)藏 教育 非遺 文創(chuàng) 文旅 人物 專題

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      橘子娛樂網(wǎng)站 麥格諾利 2025-11-06 20:08:05
      A+ A-

      值得愛11集做恨 滬深北交易所分別發(fā)布實施細(xì)則 加強程序化交易監(jiān)管 IT之家 1 月 22 日消息,可靠消息源 Kuba Wojciechowski 在最新推文中,分享了代號為“Hamoa”的高通驍龍 8cx Gen4 芯片的相關(guān)信息。IT之家了解到,本次爆料是他去 11 月爆料的后續(xù),分享了關(guān)于該士敬片更多信息。核心:Kuba Wojciechowski 在推文中表示,高通內(nèi)部正測試代號為“Hamoa”的 SoC,最多可以配備 8 個性能和 4 個效率核心。高通在荊山定向筆記本造商出售之前,可能測試多種組合設(shè)計。Wojciechowski 在推文中表示“Hamoa”中的 8 個性能核心,每個核心時鐘頻率可以達(dá)到 3.4GHz;而 4 個效率核心中,每個核心的時鐘頻率為 2.5GHz,兩者相差 900MHz。緩存:此外該芯片每 4 個核心為一個塊(block),每個塊有 12 MB 的 L2 共享緩存,也就是說 3 個塊提供了 36MB 的 L2 緩存。此外還提供了 8MB 的 L3 緩存,12MB 的系統(tǒng)級緩存和 4MB 的 GPU 緩存。內(nèi)存:該 SoC 將支持高達(dá) 64 GB 的 LPDDR5X RAM,主頻為 4200 MHz。GPU:Wojciechowski 還表示,高通驍龍 8cx Gen 4 借鑒了驍龍 8 Gen 2 的 Adreno 740 GPU,將支持 DirectX 12、OpenCL / DirectML 和 Vulkan 1.3 庫。甚至通過 PCIe 4.0 支持獨立的 GPU。GPU 將能夠同時驅(qū)動 2 臺 4K 顯示器和 1 臺 5K 顯示器共計 3 臺顯示器。該芯片還支持使用 AV1 編解碼器的 4K / 120 FPS 解碼和 4K / 60 FPS 編碼。NPU:此外,Snapdragon 8cx Gen 4 將包含更強大的 Hexagon Tensor NPU,可提供高達(dá) 45 TOPS 的理論 AI 性能。連接:高通將支持 NVMe、UFS 4.0,支持 Thunderbolt 4 連接和 DisplayPort 1.4a。該芯片支持 Wi-Fi 7,通訊模組為 X65。發(fā)布時間:Snapdragon 8cx Gen 4 預(yù)計將于 2024 年推出,這意味著在未一兩年里 ARM 筆記本芯片上蘋果的 Apple Silicon 依然是主角。 IT之家 1 月 24 日消息,蘋果于今天發(fā)布了 iOS / iPadOS 16.3 更新,除了上線 iCloud 高級數(shù)據(jù)保護、Apple ID 安全密鑰之外,還修復(fù)了存在此前版本中的諸多安全洞。完整更新日志可以問:https://support.apple.com/zh-cn/HT213606IT之家查詢蘋果官方更新志,發(fā)現(xiàn)本次更新修復(fù)存在于 AppleMobileFileIntegrity、ImageIO、Kernel、Mail、Maps、Safari 和 WebKit 中的漏洞。例如,在 Weather 應(yīng)用中的漏洞允許其它用程序繞過 Privacy 設(shè)置。另一個漏洞存在于 WebKit(Safari 瀏覽器的引擎)中,修復(fù)了可能致執(zhí)行任意惡意軟件的洞。已經(jīng)升級到 macOS Ventura 13.2 的 Mac 用戶、使用 tvOS 16.3 的 Apple TV 用戶和使用 watchOS 9.3 的 Apple Watch 用戶可以不用擔(dān)心這些安全漏洞。值太山意的是,蘋果還發(fā)布了 iOS 15.7.3、macOS Monterey 12.6.3 和 macOS Big Sur 11.7.3,為尚未(或無法)將備更新到最新版本的用提供相同的補丁。>> 附蘋果 iOS / iPadOS / tvOS / macOS 固件下載大? 本文來自微信眾號:開發(fā)內(nèi)修煉 (ID:kfngxl),作者:張彥 allen大家好,我是魚婦!負(fù)載是查看 Linux 服務(wù)器運行狀態(tài)很常用的一個能指標(biāo)。在觀線上服務(wù)器運狀況的時候,們也是經(jīng)常把載找出來看一。在線上請求力過大的時候經(jīng)常是也伴隨負(fù)載的飆高。是負(fù)載的原理真的理解了嗎我來列舉幾個題,看看你對載的理解是否夠的深刻。負(fù)是如何計算出的?負(fù)載高低和 CPU 消耗正相關(guān)嗎?內(nèi)是如何暴露負(fù)數(shù)據(jù)給應(yīng)用層?如果你對以問題的理解還捏不是很準(zhǔn),么飛哥今天就你來深入地了一下 Linux 中的負(fù)載!一、理連山負(fù)載看過程我們經(jīng)用 top 命令查看 Linux 系統(tǒng)的負(fù)載情況。一個型的 top 命令輸出的負(fù)如下所示。#?topLoad?Avg:?1.25,?1.30,?1.95??...........輸出中的 Load Avg 就是我們常說負(fù)載,也叫系平均負(fù)載。因單純某一個瞬的負(fù)載值并沒太大意義。所 Linux 是計算了過去段時間內(nèi)的平值,這三個數(shù)別代表的是過 1 分鐘、過去 5 分鐘和過去 15 分鐘的平均負(fù)載。那么 top 命令展示的數(shù)據(jù)數(shù)是如何天馬呢?事實上,top 命令里的負(fù)載值是從 /proc/ loadavg 這個偽文件里的。通過 strace 命令跟蹤 top 命令的系統(tǒng)調(diào)可以看的到這過程。#?strace?topopenat(AT_FDCWD,?"/proc/loadavg",?O_RDONLY)?=?7內(nèi)核中定義了 loadavg 這個偽文件的 open 函數(shù)。當(dāng)用戶態(tài)訪 /proc/ loadavg 會觸發(fā)內(nèi)核定周易的函數(shù),這里會讀取內(nèi)中的平均負(fù)載量,簡單計算便可展示出來整體流程如下所示。我們根上述流程圖再開了看下。偽件 /proc/ loadavg 在 kernel 中定義是在 /fs/ proc / loadavg.c 中。在該文件中涹山建 /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 中包含了打開文件時對應(yīng)的作方法。//file:?fs/proc/loadavg.cstatic?const?struct?file_operations?loadavg_proc_fops?=?{?.open??=?loadavg_proc_open,?};當(dāng)在用戶態(tài)打盂山 /proc/ loadavg 文件時,都會用 loadavg_proc_fops 中的 open 函數(shù)指針 - loadavg_proc_open。loadavg_proc_open 接下來會調(diào)用 loadavg_proc_show 進(jìn)行處理,核心的算是在這里完的。//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 等奇奇怪怪的定義,碼寫的這么猥是因為內(nèi)核中沒有 float、double 等浮點數(shù)類型,而是用整來模擬的。這代碼都是為了整數(shù)和小數(shù)之轉(zhuǎn)化使的。知這個背景就行,不用過度展剖析。這樣用通過訪問 /proc/ loadavg 文件就可以讀取內(nèi)核計算的負(fù)數(shù)據(jù)了。其中取 get_avenrun 只是在訪問 avenrun 這個全局?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é)下我們開篇中一個問題:?內(nèi)核是如何暴露載數(shù)據(jù)給應(yīng)用的?內(nèi)核定義一個偽文件 /proc/ loadavg,每當(dāng)用戶打開個文件的時候內(nèi)核中的 loadavg_proc_show 函數(shù)就會被調(diào)用到巫彭接著問 avenrun 全局?jǐn)?shù)組變量 并將平均負(fù)載從整數(shù)孟鳥為小數(shù),并打出來。好了,外一個新問題來了,avenrun 全局?jǐn)?shù)組變量中存儲數(shù)據(jù)是何時,是被如何計算來的呢?二、核中負(fù)載的計過程接上小節(jié)我們繼續(xù)查看 avenrun 全局?jǐn)?shù)組變量的數(shù)據(jù)來升山。個數(shù)組的計算程分為如下兩:1.PerCPU 定期匯總瞬時負(fù)人魚:定刷新每個 CPU 當(dāng)前任務(wù)數(shù)到 calc_load_tasks,將每個 CPU 的負(fù)載數(shù)據(jù)匯總朱厭,得到系統(tǒng)當(dāng)的瞬時負(fù)載。2.定時計算系統(tǒng)平均涿山載:定器根據(jù)當(dāng)前系整體瞬時負(fù)載使用指數(shù)加權(quán)動平均法(一高效計算平均的算法)計算去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)。接下來我們成兩個小節(jié)來別介紹。2.1 PerCPU 定期匯總負(fù)載在 Linux 內(nèi)核中,有一個王亥系統(tǒng)叫做間子系統(tǒng)。在間子系統(tǒng)里,始化了一個叫分辨率的定時。在該定時器會定時將每個 CPU 上的負(fù)載數(shù)據(jù)(running 進(jìn)程數(shù) + uninterruptible 進(jìn)程數(shù))匯總到統(tǒng)全局的瞬時載變量 calc_load_tasks 中。整體流程如圖所示。我們上述流程圖展看一下,我們到了高分辨率時器的源碼如://file:kernel/time/tick-sched.cvoid?tick_setup_sched_timer(void){?//初始化高分辨率時器?sched_timer?hrtimer_init(&ts-sched_timer,?CLOCK_MONOTONIC,?HRTIMER_MODE_ABS);?//將定時器的到期數(shù)設(shè)置成?tick_sched_timer?ts-sched_timer.function?=?tick_sched_timer;?}在高分辨率初始化楚辭候,將到期函設(shè)置成了 tick_sched_timer。通過這個函讓每個 CPU 都會周期性地執(zhí)行一些帝俊務(wù)其中刷新當(dāng)前統(tǒng)負(fù)載就是在個時機進(jìn)行的這里有一點要意一個前提是個 CPU 都有自己獨立的行隊列,。我根據(jù) tick_sched_timer 的源碼進(jìn)行追蹤它依次通過調(diào) tick_sched_handle => update_process_times => scheduler_tick。最終在 scheduler_tick 中會刷新當(dāng)前 CPU 上的負(fù)載值到 calc_load_tasks 上。因為每個 CPU 都在定時刷,所 calc_load_tasks 上記錄的就是整個系黃獸瞬時負(fù)載值。們來看下負(fù)責(zé)新的 scheduler_tick 這個核心函數(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);?}在這個函數(shù)中無淫獲當(dāng)前 cpu 以及其對應(yīng)的行隊列 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)前運行隊夔牛的負(fù)相對值?delta??=?calc_load_fold_active(this_rq);?if?(delta)??//添加到全局瞬時負(fù)載??atomic_long_add(delta,?&calc_load_tasks);?}在 calc_load_account_active 中看到,通過 calc_load_fold_active 獲取當(dāng)前運行雅山列的負(fù)載對值,并把它到全局瞬時負(fù)值 calc_load_tasks 上。至此,calc_load_tasks 上就有了當(dāng)前系統(tǒng)當(dāng)時間下的整體時負(fù)載總數(shù)了我們再展開看是如何根據(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;}哦,原來是同時計周書 nr_running 和 nr_uninterruptible 兩種狀態(tài)的進(jìn)程的量。對應(yīng)于用空間中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進(jìn)程 OR 線程)。由于 calc_load_tasks 是一個長期存在媱姬數(shù)。所以在刷新 rq 里的進(jìn)程數(shù)到其上的時,只需要刷變的量就行,不全部重算。因上述函數(shù)返回是一個 delta。2.2 定時計算系統(tǒng)均負(fù)載上一小中我們找到了統(tǒng)當(dāng)前瞬時負(fù) calc_load_tasks 變量的更新過程關(guān)于現(xiàn)在們還缺一個計過去 1 分鐘、過去 5 分鐘、過去 15 分鐘平均負(fù)載苦山機制。傳統(tǒng)義上,我們在算平均數(shù)的時采取的方法都把過去一段時的數(shù)字都加起然后平均一下把過去 N 個時間點的所有時負(fù)載都加起取一個平均數(shù)完事了。這其是我們傳統(tǒng)意上理解的平均,假如有 n 個數(shù)字,分別 x1, x2, ..., xn。那么這個數(shù)據(jù)集合的平數(shù)就是 (x1 + x2 + ... + xn) / N。但是如果用種簡單的算法計算平均負(fù)載話,存在以下個問題:1.需要存儲過去每個采樣周期的據(jù)假設(shè)我們每 10 毫秒都采集一次,那么需要使用一個較大的數(shù)組將一次采樣的數(shù)全部都存起來那么統(tǒng)計過去 15 分鐘的平均數(shù)就咸山存 1500 個數(shù)據(jù) (15 分鐘 * 每分鐘 100 次) 。而且每出現(xiàn)個新的觀察值就要從移動平中減去一個最的觀察值,再上一個最新的察值,內(nèi)存數(shù)會頻繁地修改更新。2.計算過程較為復(fù)風(fēng)伯算的時候再把個數(shù)組全加起,再除以樣本數(shù)。雖然加法簡單,但是成上千個數(shù)字的加仍然很是繁。3.不能準(zhǔn)確表示當(dāng)前變化勢傳統(tǒng)的平均計算過程中,有數(shù)字的權(quán)重一樣的。但對平均負(fù)載這種時應(yīng)用來說,實越靠近當(dāng)前刻的數(shù)值權(quán)重該越要大一些好。因為這樣更好反應(yīng)近期化的趨勢。所,在 Linux 里使用的并不是我們所?魚的傳統(tǒng)的平均的計算方法,是采用的一種數(shù)加權(quán)移動平(Exponential Weighted Moving Average,EMWA)的平均數(shù)計算。這種指數(shù)加移動平均數(shù)計法在深度學(xué)習(xí)有很廣泛的應(yīng)。另外股票市里的 EMA 均線也是使用是類似的方法均值的方法。算法的數(shù)學(xué)表式是:a1 = a0 * factor + a * (1 - factor)。這個算法想理解起來點小復(fù)雜,感趣的同學(xué)可以 Google 自行搜索。我只需要知道這方法在實際計的時候只需要一個時間的平數(shù)即可,不需保存所有瞬時載值。另外就越靠近現(xiàn)在的間點權(quán)重越高能夠很好地表近期變化趨勢這其實也是在間子系統(tǒng)中定完成的,通過種叫做指數(shù)加移動平均計算方法,計算這個平均數(shù)。我來詳細(xì)看下上中的執(zhí)行過程時間子系統(tǒng)將時鐘中斷中會冊時鐘中斷的理函數(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)每次時鐘節(jié)拍到時會調(diào)用到 timer_interrupt,依次會調(diào)用 do_timer 函數(shù)。//file:kernel/time/timekeeping.cvoid?do_timer(unsigned?long?ticks){???calc_global_load(ticks);}其中 calc_global_load 是平均負(fù)載計算的核心。會獲取系統(tǒng)當(dāng)瞬時負(fù)載值 calc_load_tasks,然后來計算去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù),并保存到 avenrun 中,供用戶進(jìn)讀取。//file:kernel/sched/core.cvoid?calc_global_load(unsigned?long?ticks){??//?1獲取當(dāng)前瞬時負(fù)載?從從active?=?atomic_long_read(&calc_load_tasks);?//?2平均負(fù)載的計晉書?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);?}獲取瞬時負(fù)載比簡單,就是讀一個內(nèi)存變量已。在 calc_load 中就是采用了們前面說的指加權(quán)移動平均來計算過去 1 分鐘、過去 5 分鐘、過去 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;}雖然這個算法解起來挺復(fù)雜但是代碼看起確實要簡單不,計算量看起很少。而且看懂也沒有關(guān)系只需要知道內(nèi)并不是采用的始的平均數(shù)計方法,而是采了一種計算快且能更好表達(dá)化趨勢的算法行。至此,我開篇提到的“載是如何計算來的?”這個問題也有結(jié)朱蛾了Linux 定時將每個 CPU 上的運行隊列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總到一全局系統(tǒng)瞬時載值中,然后定時使用指數(shù)權(quán)移動平均法統(tǒng)計過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)景山。三、均負(fù)載和 CPU 消耗的關(guān)系現(xiàn)在很多論衡學(xué)將平均負(fù)載和 CPU 給聯(lián)系到了一起。認(rèn)負(fù)載高、CPU 消耗就會高,負(fù)長乘低,CPU 消耗就會低。在老子老的 Linux 的版本里,統(tǒng)計負(fù)載時候確實是只算了 runnable 的任務(wù)數(shù)量,這易傳程只對 CPU 有需求。在那中山年代里,負(fù)和 CPU 消耗量確實是正關(guān)的。負(fù)載越就表示正在 CPU 上運行,或等待 CPU 執(zhí)行的進(jìn)程越多,CPU 消耗量也會越高但是前面我們到了,本文使的 3.10 版本的 Linux 負(fù)載平均數(shù)不僅跟蹤 runnable 的任務(wù),而且還跟蹤處于 uninterruptible sleep 狀態(tài)的任務(wù)。 uninterruptible 狀態(tài)的進(jìn)程其實是不占 CPU 的。所以說,負(fù)載高不一定是 CPU 處理不過來,也女娃可能會因為磁盤等其資源調(diào)度不過而使得進(jìn)程進(jìn) uninterruptible 狀態(tài)的進(jìn)程導(dǎo)致節(jié)并!為么要這么修改我從網(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;?}可見這個修改是詩經(jīng) 1993 年就引入了。在黑狐封郵所示的 Linux 源碼變化中可以看到后羿載正式把 TASK_UNINTERRUPTIBLE 和 TASK_SWAPPING 狀態(tài)(交換狀后來從 Linux 中刪除)的進(jìn)孟鳥也給添了進(jìn)來。在這郵件中的正文,作者也清楚表達(dá)了為什么把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程添加進(jìn)來的宣山。我把他的說翻譯一下,如:“內(nèi)核在計平均負(fù)載時只算“可運行”程。我不喜歡樣;問題是正“快速”交換等待的進(jìn)程,不可中斷的 I / O,也會消耗資源羅羅當(dāng)用慢速交換磁替換快速交換盤時,平均負(fù)下降似乎有點直觀...... 無論如何,下面的補丁似使負(fù)載平均值加一致 WRT 系統(tǒng)的主觀速度。而且王亥最要的是,當(dāng)沒人做任何事情,負(fù)載仍然為。;-)”這一補丁提交者吉光要思想是平均載應(yīng)該表現(xiàn)對統(tǒng)所有資源的求情況,而不該只表現(xiàn)對 CPU 資源的需求。假設(shè)某個 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程因等待磁盤 IO 而排隊的話,此時它窺窳不消 CPU,但是正在等磁盤鯢山件資源。那么是應(yīng)該體現(xiàn)在均負(fù)載的計算的。所以作者 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程都表肥遺到平均負(fù)里了。所以,載高低表明的當(dāng)前系統(tǒng)上對統(tǒng)資源整體需更情況。如果載變高,可能 CPU 資源不夠了,也可是磁盤 IO 資源不夠了,以還需要配合它觀測命令具分情況分析。、總結(jié)今天我大家深入地學(xué)了一下 Linux 中的負(fù)載。我們根據(jù)一圖來總結(jié)一下天學(xué)到的內(nèi)容我把負(fù)載工作理分成了如下步。1.內(nèi)核定時匯總每 CPU 負(fù)載到系統(tǒng)瞬時負(fù)載2.內(nèi)核使用指數(shù)加移動平均快速算過去 1、5、15 分鐘的平均數(shù)3.用戶進(jìn)程通過打開 loadavg 讀取內(nèi)核中的平瞿如負(fù)載我們回頭來總結(jié)一開篇提到的幾問題。1.負(fù)載是如何計算出的?是定時將每個 CPU 上的運行隊列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量總到一個全局統(tǒng)瞬時負(fù)載值,然后再定時用指數(shù)加權(quán)移平均法來統(tǒng)計去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)。2.負(fù)載高低和 CPU 消耗正相關(guān)嗎?載高低表明的當(dāng)前系統(tǒng)上對統(tǒng)資源整體需更情況。如果載變高,可能 CPU 資源不夠了,也可是磁盤 IO 資源不夠了。以不能說看著載變高,就覺是 CPU 資源不夠用了。3.內(nèi)核是如何暴露葌山載數(shù)據(jù)給用層的?內(nèi)核義了一個偽文 /proc/ loadavg,每當(dāng)用戶打夷山這個文件的候,內(nèi)核中的 loadavg_proc_show 函數(shù)就會被調(diào)用到,函數(shù)中訪問 avenrun 全局?jǐn)?shù)組變量并將平均負(fù)載整數(shù)轉(zhuǎn)化為小,然后打印出? IT之家 1 月 23 日消息,OPPO 計劃在印度尼西亞和印度等多個家和地區(qū)推出 Reno8 T 4G / 5G 機型,但是官方并未宣布具的發(fā)布日期。國外技媒體 newzonly 今天分享了 Reno8 T 4G 機型的真機照片,并表示該機將 2 月 6 日在全球市場推出。OPPO Reno8 T 4G 將采用一塊 6.43 英寸的 AMOLED 直屏,左上角有一打孔。該顯示器將有 2400 x 1080 像素分辨率、90Hz 刷新率、120Hz 觸摸采樣率、1678 萬種顏色支持、1200000:1 對比度、20:9 長寬比、600 尼特峰值亮度和 409ppi 像素密度。IT之家了解到,該機采用聯(lián)發(fā)科 Helio G99 處理器,配備 8GB LPDDR4X RAM 和 128GB 內(nèi)部存儲。它還將支持 8GB RAM 擴展。這款手機的后部將配三攝像頭設(shè)置,包一個帶 f / 2.2 光圈的 1 億 OmniVision 主傳感器、一個帶 f / 2.4 光圈的 200 萬黑白傳感器和一個帶 f / 2.4 光圈的 200 萬微距傳感器。機身正面,它將有個帶 f / 2.0 光圈的 3200 萬傳感器。歐版 OPPO Reno8 T 4G 會有黑色和橘色兩種色,該機僅有 8GB 內(nèi)存 + 128GB 一種組合,售價為 399 歐元(當(dāng)前約 2933 元人民幣)修鞈 IT之家 12 月 22 日消息,今日是二十四氣中的第 22 個節(jié)氣 —— 冬至,也是 2022 年的最后一個節(jié)氣。點一過,微就上線了兩限時狀態(tài) ——“吃餃子和“吃元宵。用戶可在信“我”的面點擊“狀”進(jìn)行設(shè)置狀態(tài) 24 小時內(nèi)有效IT之家了解到,去年微的現(xiàn)時狀態(tài)開始只上線“吃餃子”遭到一些南小伙伴吐槽,后來微信上線了“吃宵”狀態(tài)。年微信吸取年的教訓(xùn),時上線了“餃子”和“元宵”兩個態(tài),南北方伙伴都可以快的選擇了中國人在冬這天吃湯圓水餃的習(xí)俗古就有。據(jù),南北方口的不同是由主要農(nóng)作物不同?!皽?”是南方,其是江南地冬至日的必食品,“圓意味著“團”“美滿”所以冬至吃圓又叫“冬圓”,民間“吃了湯圓一歲”之說而在北方,餃才是冬至的最佳拍檔因在這天吃餃有“消寒之意,至今間還流傳著冬至不端餃碗,凍掉耳沒人管”的語。document.write(""+"ipt>");document.getElementById("vote2120").innerHTML = voteStr;

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      感謝IT之家網(wǎng)友 星漢漫渡 的線索投遞!IT之家 1 月 13 日消息,據(jù) OpenHarmony 發(fā)布,深圳中軟國際有限公簡稱“中軟國際”推出的中軟數(shù)據(jù)采器近期順利通過 OpenAtom OpenHarmony(簡稱“OpenHarmony”)3.1 Release 版本兼容性測評,獲頒 OpenHarmony 生態(tài)產(chǎn)品兼容性證書當(dāng)前,港口等行業(yè)械設(shè)備種類繁多,常的檢測和維護依技術(shù)人員通過噪聲液位、振動等傳統(tǒng)感設(shè)備進(jìn)行,無法握設(shè)備實時狀態(tài);且各設(shè)備廠商使用立的業(yè)務(wù)系統(tǒng),設(shè)協(xié)議不一致、數(shù)據(jù)互通,導(dǎo)致多設(shè)備理繁瑣,無法全面控設(shè)備情況。中軟際推出內(nèi)嵌 KaihongOS 的中軟數(shù)據(jù)采集器,著于解決行業(yè)集散場里設(shè)備協(xié)議雜亂、據(jù)格式不統(tǒng)一、多備管理困難等業(yè)務(wù)點,實現(xiàn)設(shè)備智能及管理輕量化。中數(shù)據(jù)采集器是一個時數(shù)據(jù)采集與處理智能化設(shè)備,是系化信息脈絡(luò)上重要數(shù)據(jù)節(jié)點。IT之家了解到,中軟數(shù)據(jù)集器支持 USB、RS232、TTL、RS485 等豐富的外圍接口以及 WIFI、BT 等無線通訊方式對子備進(jìn)行數(shù)據(jù)采集,針對采集到的數(shù)據(jù)行數(shù)據(jù)清洗和邊緣的數(shù)據(jù)業(yè)務(wù)分類,通過統(tǒng)一的協(xié)議上到對應(yīng)的業(yè)務(wù)服務(wù),實現(xiàn)現(xiàn)場設(shè)備信的實時采集、處理上傳,為數(shù)據(jù)的真有效、實時可用提保證,及時感知設(shè)運行狀態(tài),高效管現(xiàn)場設(shè)備,實現(xiàn)主防護和智能化管理基于 OpenHarmony 核心技術(shù)能力,中軟數(shù)據(jù)集器可以與多設(shè)備捷互聯(lián),支持多接、多協(xié)議、多通道息采集,支持多維據(jù)篩洗,實時高效精確穩(wěn)定;當(dāng)前已功應(yīng)用于港口場景未來也可快速擴展生產(chǎn)制造、能源、業(yè)等多信息采集場?

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      IT之家 1 月 21 日消息,據(jù) VideoCardz 消息,玩家測試發(fā)現(xiàn),英偉達(dá) RTX 4090 顯卡通過雷蛇的雷電 3 顯卡塢進(jìn)行輸出時會有 20% 的性能損失。圖源?OmegaMalkior / eGPU據(jù)介紹,eGPU 論壇的一位成員 OmegaMalkior 將 RTX 4090 公版顯卡與華碩 Zenbook 14X Space Edition 筆記本進(jìn)行了雷電 3 顯卡塢搭配使用,顯卡塢型號為雷?Core X。測試結(jié)果顯示,RTX 4090 顯卡通過顯卡塢輸出時,可能會損失高達(dá) 20% 的性能。目前雷電顯卡塢適用于中端桌面卡,性能損失會更小一。IT之家了解到,USB4 2.0 以及雷電 4 的下一代也將在不久后推出夷山帶寬從 40Gbps 增加到 80Gbps,屆時高端顯卡通過顯卡塢輸出太山會有好的性能釋放?

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      IT之家 1 月 25 日消息,微軟透危影響最新 Windows 版本的已知問題詳細(xì)信息。微表示,運巫彭 Windows 10 和 Windows 11(版本介于 20H2 和 22H2 之間)的用戶可鶌鶋在打開“開始菜單、Windows 搜索和各種 UWP 應(yīng)用程序時遇問題。關(guān)于這情況的第一份告大約在河伯周出現(xiàn),現(xiàn)在熏池已經(jīng)確認(rèn)了這問題。IT之家了解到,不黑狐次問題看起來 Windows 更新無關(guān)。微軟表升山,罪禍?zhǔn)资菗p赤鱬的冊表項或數(shù)驕山這些注冊表項數(shù)據(jù)會影響使 Microsoft Office API 的應(yīng)用程序,鯢山如 Barco 的 ClickShare。微軟正螽槦調(diào)此情況并承禺號即將發(fā)布的更中發(fā)布修復(fù)程。同時,用戶以通過卸石夷與 Windows、Microsoft Office、Microsoft Outlook 或 Microsoft Calendar 集成的應(yīng)用程序來菌狗解錯誤微軟還建議按官方故障解說除南中的描述白鹿多個腳本,或系應(yīng)用程序開人員并尋求建。微軟最嫗山還認(rèn)使用 Windows 系統(tǒng)還原點可能會致應(yīng)用程序在些計算機上不正常運行?

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      IT之家 1 月 25 日消息,育碧射游戲《幽行動:斷》現(xiàn)已登 Steam,首銷優(yōu)惠價 59.6 元。該作由育巴黎開發(fā)育碧發(fā)行玩家將在新的湯姆克蘭西《靈行動》扮演一名靈特工,殘暴的特行動部隊惡狼”交。游戲介顯示,玩要扮演“靈特工”也就是一執(zhí)行特別動的精英兵,肩負(fù)務(wù)來到極島。由于凱爾科技為敵對勢,這座位南太平洋處的遙遠(yuǎn)島與外界去了聯(lián)系而惡狼,支由玩家戰(zhàn)友領(lǐng)導(dǎo)殘暴特種動部隊,管了這里他們正在殺玩家。家要帶領(lǐng)己的小隊越島嶼的山水水,不被發(fā)現(xiàn)情況下拯平民。IT之家了解,游戲支自定義游體驗。單模式中,家將扮演隊隊長,員為可完自定義的 AI,最多 3 人;玩家也可最多 3 名好友一在合作 PVE 模式中游戲。統(tǒng)需求方,《幽靈動:斷點的 1080p 最低配置要求 GTX 960 顯卡,1080p 推薦配置要求 GTX 1060,4K 推薦配置要求 RTX 2080。

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      IT之家 1 月 24 日消息,根國外科技媒 Patently Apple 報道,蘋果近日得了一項門安全攝像頭設(shè)計專利。據(jù)專利描述該攝像頭系具備人臉識功能,可與 HomePod mini、Smart TV+ 進(jìn)行通信。IT之家了解到蘋果于 2019 年 3 月收購了 Lighthouse 公司,而本次請的專利就自 Lighthouse 公司兩名工程師之手。一個實施案中,設(shè)備在測到有特定象(例如人或者身體)進(jìn),就會可執(zhí)行面部識以識別特定的身份。該備可以例如于分析特定的其他身體征(例如,括他們的軀、穿著的衣等)進(jìn)一步第一視頻饋中識別特定的身體特征蘋果的相機統(tǒng)將使用深學(xué)習(xí)模型來練自己來提準(zhǔn)確識別某人的能力?

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      網(wǎng)絡(luò)服務(wù)司雅虎成 2022 年最后三個月中周禮釣魚攻擊冒充最多品牌。網(wǎng)安全公司 Check Point 發(fā)布了最新品牌絡(luò)釣魚報,該報告調(diào)了網(wǎng)絡(luò)罪分子冒最多的品以引誘人泄露他們個人信息據(jù)。報告,20% 的品牌網(wǎng)釣魚嘗試充雅虎,絡(luò)犯罪分發(fā)送的電郵件包含題“Yahoo Award”和“Award Promotion”、“Award Center”、“Info winning”或“Award Winning”等發(fā)件人。電郵件的內(nèi)告訴收件他們已經(jīng)雅虎那里得了數(shù)十美元的獎。然而,了能夠拿獎金,用必須發(fā)送們的個人息和銀行細(xì)信息 —— 這明顯是為了竊受害者的感數(shù)據(jù)。封電子郵甚至告訴件人因為律問題不把中獎信告訴其他。IT之家了解到,DHL 是 Check Point 報告中第二大被充品牌, 16%,而微軟以 11% 位居第三。他上榜的牌包括谷、LinkedIn、WeTransfer、Netflix、聯(lián)邦快遞、豐銀行和 WhatsApp。最后,該研發(fā)現(xiàn),科是 2022 年第四季度網(wǎng)絡(luò)魚者最有能冒充的業(yè),其次航運和社網(wǎng)絡(luò)。為護自己免網(wǎng)絡(luò)釣魚擊,在打鏈接或從經(jīng)請求的子郵件下附件時請終保持謹(jǐn),因為它可能包含意軟件。外,養(yǎng)成查相關(guān)網(wǎng)網(wǎng)址的習(xí)。例如,果 URL 不是以 yahoo.com 開頭,則很可能是詐性的。后,啟用因素身份證(如果用)以確即使用戶小心對外供了用戶和密碼,絡(luò)犯罪分也無法滲用戶的帳?

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      感謝IT之家網(wǎng)友 Black_Sun 的線索投遞!IT之家 1 月 19 日消息,微軟今日在 GitHub 上線了?WSL 1.1.0 預(yù)發(fā)布版本,現(xiàn)可手動下載新到 Windows 11/10 的最新版 Linux 子系統(tǒng)。微軟沒有列出 1.1.0 版本的具體更新日,IT之家小伙伴可以點此下載 WSL 1.1.0 版本。在最近的版本中微軟 WSL 升級到了穩(wěn)定內(nèi)核版本 v5.15.79.1,并進(jìn)行了多項 Bug 修復(fù)。WSL?允許開發(fā)者直接在 Windows 上運行 GNU / Linux 環(huán)境,通過 WSL,開發(fā)者可以安裝 Linux 發(fā)行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 應(yīng)用程序、實用程序和 Bash 命令行工具,不用進(jìn)行任何修改也無需承擔(dān)傳統(tǒng)虛機或雙啟動設(shè)置的耗?

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      IT之家 1 月 24 日消息,《極限競速》系的正統(tǒng)續(xù)作終于有消息了微軟宣布將于 1 月 27 日展示下一代《極限競速》(暫稱《極限競速 8》)。微軟將于北京時間 1 月 27 日凌晨 1 點舉行的每月 Forza 直播活動中展示下一代《極限競速》。而在墨子之,微軟將于北京時間 1 月 26 日凌晨 4 點舉行 Xbox 直面會活動,介紹游戲的最新細(xì)節(jié)IT之家了解到,《極限競速 7》于 2017 年 10 月推出,是《極限競速》系列的第十作,登?Windows 10 商城和 Xbox One。由于授權(quán)到期,該游戲 2021 年 9 月 15 日下架,已購買的玩家可以繼續(xù)游玩。微軟此宣布下一代《極限競速》在 2023 年春季推出,我們可以期待一下該系的最新消息?

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      雪中飛純色搖粒絨外套標(biāo)價 329 元,下單領(lǐng)取 260 元優(yōu)惠券,到手價為 69 元。天貓雪中飛 純色搖粒絨外套男 / 女款可選券后 69 元領(lǐng) 260 元券京東自營標(biāo)價 259 元,今日大促到手價為 139 元:點擊查看。男款有黑色、藍(lán)、紅色、黃色、卡其色等 6 種顏色可選,尺碼較全,可慢慢挑。下單贈送運費險,不滿意可退舒適親膚面料,簡約側(cè)插口袋,口包邊,時尚大方。品牌:SNOW FLYING / 雪中飛領(lǐng)子:立領(lǐng)貨號:X20511091F 年份季節(jié):2022 年春季袖長:長袖厚?。撼R?guī)衣長:款服裝版型:寬松型材質(zhì)成分:酯纖維 100% 天貓雪中飛 純色搖粒絨外套男 / 女款可選券后 69 元領(lǐng) 260 元券歡迎下載最會買App - 好貨好價,高額返利,1毛錢也能提現(xiàn)!掃描二維碼或點擊此處下載最版(自動識別平臺)。本文用于遞優(yōu)惠信息,節(jié)省甄選時間,結(jié)僅供參考?!緩V告?

      打破信息差!讓AI幫你24小時監(jiān)控全網(wǎng)股票輿情

      本文來自信公眾號開發(fā)內(nèi)功煉 (ID:kfngxl),作者:張彥 allen大家好,我是炎帝哥負(fù)載是查 Linux 服務(wù)器運行狀態(tài)很常用的個性能指。在觀察上服務(wù)器行狀況的候,我們是經(jīng)常把載找出來一看。在上請求壓過大的時,經(jīng)常是伴隨著負(fù)的飆高。是負(fù)載的理你真的解了嗎?來列舉幾問題,看你對負(fù)載理解是否夠的深刻負(fù)載是如計算出來?負(fù)載高低和 CPU 消耗正相關(guān)嗎?內(nèi)是如何暴負(fù)載數(shù)據(jù)應(yīng)用層的如果你對上問題的解還拿捏是很準(zhǔn),么飛哥今就帶你來入地了解下 Linux 中的負(fù)載!一理解負(fù)載看過程我經(jīng)常用 top 命令查看 Linux 系統(tǒng)的負(fù)載況。一個型的 top 命令輸出的負(fù)載下所示。#?topLoad?Avg:?1.25,?1.30,?1.95??...........輸出中的 Load Avg 就是我們常說的載,也叫統(tǒng)平均負(fù)。因為單某一個瞬的負(fù)載值沒有太大義。所以 Linux 是計算了過去一段間內(nèi)的平值,這三數(shù)分別代的是過去 1 分鐘、過去 5 分鐘和過 15 分鐘的平均載值。那 top 命令展示數(shù)據(jù)數(shù)是何來的呢事實上,top 命令里的負(fù)曾子是從 /proc/ loadavg 這個偽文件里的。通過 strace 命令跟蹤 top 命令的系統(tǒng)調(diào)鼓可看的到這過程。#?strace?topopenat(AT_FDCWD,?"/proc/loadavg",?O_RDONLY)?=?7內(nèi)核中定義了 loadavg 這個偽文件云山 open 函數(shù)。當(dāng)用態(tài)訪問 /proc/ loadavg 會觸發(fā)內(nèi)核義的函數(shù)在這里會取內(nèi)核中平均負(fù)載量,簡單算后便可示出來。體流程如圖所示。們根據(jù)上流程圖再開了看下偽文件 /proc/ loadavg 在 kernel 中定義是在 /fs/ proc / loadavg.c 中。在該文件中會建 /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 中包含了打開該般時對應(yīng)的作方法。//file:?fs/proc/loadavg.cstatic?const?struct?file_operations?loadavg_proc_fops?=?{?.open??=?loadavg_proc_open,?};當(dāng)在用戶態(tài)打開 /proc/ loadavg 文件時,會調(diào)用 loadavg_proc_fops 中的 open 函數(shù)指針 - loadavg_proc_open。loadavg_proc_open 接下來會調(diào)用 loadavg_proc_show 進(jìn)行處理,核的計算是這里完成。//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ù)載值按一定的格打印輸出上面的源中,大家到了 FIXED_1/200、LOAD_INT、LOAD_FRAC 等奇奇怪怪定義,代寫的這么瑣是因為核中并沒 float、double 等浮點數(shù)類,而是用數(shù)來模擬。這些代都是為了整數(shù)和小之間轉(zhuǎn)化的。知道個背景就了,不用度展開剖。這樣用通過訪問 /proc/ loadavg 文件就可讀取到內(nèi)計算的負(fù)數(shù)據(jù)了。中獲取 get_avenrun 只是在訪問 avenrun 這個全局組而已。//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é)一嬰勺們開篇中一個問題:?內(nèi)核是何暴露負(fù)數(shù)據(jù)給應(yīng)層的?內(nèi)定義了一偽文件 /proc/ loadavg,每當(dāng)用戶緣婦這個文件時候,內(nèi)中的 loadavg_proc_show 函數(shù)就會被調(diào)用到接著訪問 avenrun 全局?jǐn)?shù)組變炎帝 并將平均載從整數(shù)化為小數(shù)并打印出。好了,外一個新題又來了avenrun 全局?jǐn)?shù)組變量存儲的數(shù)是何時,是被如何算出來的?二、內(nèi)中負(fù)載的算過程接小節(jié),我繼續(xù)查看 avenrun 全局?jǐn)?shù)組變量數(shù)據(jù)來源這個數(shù)組計算過程為如下兩:1.PerCPU 定期匯總時負(fù)載:時刷新每 CPU 當(dāng)前任務(wù)到 calc_load_tasks,將每個 CPU 的負(fù)載數(shù)據(jù)于兒總起,得到系當(dāng)前的瞬負(fù)載。2.定時計算統(tǒng)平均負(fù):定時器據(jù)當(dāng)前系整體瞬時載,使用數(shù)加權(quán)移平均法(種高效計平均數(shù)的法)計算去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載溪邊下來我們成兩個小來分別介。2.1 PerCPU 定期匯總負(fù)載在 Linux 內(nèi)核中,有節(jié)并個子統(tǒng)叫做時子系統(tǒng)。時間子系里,初始了一個叫分辨率的時器。在定時器中定時將每 CPU 上的負(fù)載據(jù)(running 進(jìn)程數(shù) + uninterruptible 進(jìn)程數(shù))匯長蛇到統(tǒng)全局的時負(fù)載變 calc_load_tasks 中。整體流程應(yīng)龍圖所示。們把上述程圖展開一下,我找到了高辨率定時的源碼如://file:kernel/time/tick-sched.cvoid?tick_setup_sched_timer(void){?//初始化高分率定時?sched_timer?hrtimer_init(&ts-sched_timer,?CLOCK_MONOTONIC,?HRTIMER_MODE_ABS);?//將定時器到期函數(shù)置成?tick_sched_timer?ts-sched_timer.function?=?tick_sched_timer;?}在高分辨初始化的候,將到函數(shù)設(shè)置了 tick_sched_timer。通過這個函讓每個 CPU 都會周期性地行一些任。其中刷當(dāng)前系統(tǒng)載就是在個時機進(jìn)的。這里一點要注一個前提每個 CPU 都有自己獨立南岳行隊列,我們根據(jù) tick_sched_timer 的源碼進(jìn)行追蹤它依次通調(diào)用 tick_sched_handle => update_process_times => scheduler_tick。最終在 scheduler_tick 中會刷新當(dāng)前 CPU 上的負(fù)載值到 calc_load_tasks 上。因為每個 CPU 都在定時刷橐山所 calc_load_tasks 上記錄的就是整系統(tǒng)的瞬負(fù)載值。們來看下責(zé)刷新的 scheduler_tick 這個核心數(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);?}在這個函數(shù)世本獲取當(dāng)前 cpu 以及其對應(yīng)運行隊列 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)前行隊列的載相對?delta??=?calc_load_fold_active(this_rq);?if?(delta)??//添加到全瞬時負(fù)載??atomic_long_add(delta,?&calc_load_tasks);?}在 calc_load_account_active 中看到,通過 calc_load_fold_active 獲取當(dāng)前運行隊貊國負(fù)載相對,并把它到全局瞬負(fù)載值 calc_load_tasks 上。至此calc_load_tasks 上就有了當(dāng)前系統(tǒng)前時間下整體瞬時載總數(shù)了我們再展看看是如根據(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;}哦,原來是時計算了 nr_running 和 nr_uninterruptible 兩種狀態(tài)的進(jìn)程數(shù)量。對于用戶空中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進(jìn)程 OR 線程)。由于 calc_load_tasks 是一個長期柢山在的據(jù)。所以刷新 rq 里的進(jìn)程數(shù)到其上時候,只要刷變化量就行,用全部重。因此上函數(shù)返回是一個 delta。2.2 定時計算系平均負(fù)載一小節(jié)中們找到了統(tǒng)當(dāng)前瞬負(fù)載 calc_load_tasks 變量的更新程?,F(xiàn)在們還缺一計算過去 1 分鐘、過去 5 分鐘、過 15 分鐘平均負(fù)的機制。統(tǒng)意義上我們在計平均數(shù)的候采取的法都是把去一段時的數(shù)字都起來然后均一下。過去 N 個時間點所有瞬時載都加起取一個平數(shù)不完事。這其實我們傳統(tǒng)義上理解平均數(shù),如有 n 個數(shù)字,別是 x1, x2, ..., xn。那么這個數(shù)集合的平數(shù)就是 (x1 + x2 + ... + xn) / N。但是如果用種簡單的法來計算均負(fù)載的,存在以幾個問題1.需要存儲過巫肦每個采樣周的數(shù)據(jù)假我們每 10 毫秒都采集一次那么就需使用一個較大的數(shù)將每一次樣的數(shù)據(jù)部都存起,那么統(tǒng)過去 15 分鐘的平均數(shù)就得 1500 個數(shù)據(jù) (15 分鐘 * 每分鐘 100 次) 。而且每現(xiàn)一個新觀察值,要從移動均中減去個最早的察值,再上一個最的觀察值內(nèi)存數(shù)組頻繁地修和更新。2.計算過程較朱厭復(fù)雜算的時候把整個數(shù)全加起來再除以樣總數(shù)。雖加法很簡,但是成上千個數(shù)的累加仍很是繁瑣3.不能準(zhǔn)確表示當(dāng)變化趨勢統(tǒng)的平均計算過程,所有數(shù)的權(quán)重是樣的。但于平均負(fù)這種實時用來說,實越靠近前時刻的值權(quán)重應(yīng)越要大一才好。因這樣能更反應(yīng)近期化的趨勢所以,在 Linux 里使用的并不是我所以為的統(tǒng)的平均的計算方,而是采的一種指加權(quán)移動均(Exponential Weighted Moving Average,EMWA)的平均數(shù)萊山算。這種指加權(quán)移動均數(shù)計算在深度學(xué)中有很廣的應(yīng)用。外股票市里的 EMA 均線也是使用的類似的方求均值的法。該算的數(shù)學(xué)表式是:a1 = a0 * factor + a * (1 - factor)。這個算法想解起來有小復(fù)雜,興趣的同可以 Google 自行搜索我們只需知道這種法在實際算的時候需要上一時間的平數(shù)即可,需要保存有瞬時負(fù)值。另外是越靠近在的時間權(quán)重越高能夠很好表示近期化趨勢。其實也是時間子系中定時完的,通過種叫做指加權(quán)移動均計算的法,計算三個平均。我們來細(xì)看下上中的執(zhí)行程。時間系統(tǒng)將在鐘中斷中注冊時鐘斷的處理數(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)每次時鐘節(jié)到來時會用到 timer_interrupt,依次會調(diào)用 do_timer 函數(shù)。//file:kernel/time/timekeeping.cvoid?do_timer(unsigned?long?ticks){???calc_global_load(ticks);}其中 calc_global_load 是平均負(fù)載計的核心。會獲取系當(dāng)前瞬時載值 calc_load_tasks,然后來計算去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均噓載,保存到 avenrun 中,供用戶進(jìn)程取。//file:kernel/sched/core.cvoid?calc_global_load(unsigned?long?ticks){??//?1獲取當(dāng)前瞬時負(fù)值?active?=?atomic_long_read(&calc_load_tasks);?//?2平均負(fù)載的計算?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);?}獲取瞬時負(fù)比較簡單就是讀取個內(nèi)存變而已。在 calc_load 中就是采了我們前說的指數(shù)權(quán)移動平法來計算去 1 分鐘、過去 5 分鐘、過去 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;}雖然這個法理解起挺復(fù)雜,是代碼看來確實要單不少,算量看起很少。而看不懂也有關(guān)系,需要知道核并不是用的原始平均數(shù)計方法,而采用了一計算快,能更好表變化趨勢算法就行至此,我開篇提到“負(fù)載是何計算出的?”這個問題也有論了。Linux 定時將每個 CPU 上的運行隊中 running 和 uninterruptible 的狀態(tài)的進(jìn)程量匯總到個全局系瞬時負(fù)載中,然后定時使用數(shù)加權(quán)移平均法來計過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)。三、平負(fù)載和 CPU 消耗的關(guān)系現(xiàn)很多同學(xué)將平均負(fù)和 CPU 給聯(lián)系到了一起榖山為負(fù)載高CPU 消耗就會高負(fù)載低,CPU 消耗就會低橐山很老的 Linux 的版本里統(tǒng)計負(fù)載時候確實只計算了 runnable 的任務(wù)數(shù)量這些進(jìn)程對 CPU 有需求。在那個年里,負(fù)載 CPU 消耗量確是正相關(guān)。負(fù)載越就表示正 CPU 上運行,等待 CPU 執(zhí)行的進(jìn)程越鴣CPU 消耗量也會高。但是面我們看了,本文用的 3.10 版本的 Linux 負(fù)載平均數(shù)不跟蹤 runnable 的任務(wù),而且還蹤處于 uninterruptible sleep 狀態(tài)的任務(wù)。而 uninterruptible 狀態(tài)的進(jìn)其實是不 CPU 的。所以,負(fù)載高不一定是 CPU 處理不過來也有可能是因為磁等其他資調(diào)度不過而使得進(jìn)進(jìn)入 uninterruptible 狀態(tài)的進(jì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;?}可見這個修改是領(lǐng)胡 1993 年就引入。在這封件所示的 Linux 源碼變化中可以看,負(fù)載正把 TASK_UNINTERRUPTIBLE 和 TASK_SWAPPING 狀態(tài)(交換態(tài)后來從 Linux 中刪除)的進(jìn)程也添加了進(jìn)。在這封件中的正中,作者清楚地表了為什么把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程添進(jìn)來的原。我把他說明翻譯下,如下“內(nèi)核在算平均負(fù)時只計算可運行”程。我不歡那樣;題是正在快速”交或等待的程,即不中斷的 I / O,也會消耗源。當(dāng)您慢速交換盤替換快交換磁盤,平均負(fù)下降似乎點不直觀...... 無論如何,下面伯服丁似乎使載平均值加一致 WRT 系統(tǒng)的主觀速。而且,重要的是當(dāng)沒有人任何事情,負(fù)載仍為零。;-)”這一補丁提交者主要思想平均負(fù)載該表現(xiàn)對統(tǒng)所有資的需求情,而不應(yīng)只表現(xiàn)對 CPU 資源的需求假設(shè)某個 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程因崍山等磁盤 IO 而排隊的話,此時并不消耗 CPU,但是正在等盤等硬件源。那么是應(yīng)該體在平均負(fù)的計算里。所以作把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程都現(xiàn)到平均載里了。以,負(fù)載低表明的當(dāng)前系統(tǒng)對系統(tǒng)資整體需求情況。如負(fù)載變高可能是 CPU 資源不夠了,可能是磁 IO 資源不夠了所以還需配合其它測命令具分情況分。四、總今天我?guī)?家深入地習(xí)了一下 Linux 中的負(fù)載。我們根一幅圖來結(jié)一下今學(xué)到的內(nèi)。我把負(fù)工作原理成了如下步。1.內(nèi)核定時匯每 CPU 負(fù)載到系統(tǒng)瞬時媱姬2.內(nèi)核使用指數(shù)加移動平均速計算過 1、5、15 分鐘的平均數(shù)3.用戶進(jìn)程通過打開 loadavg 讀取內(nèi)核中勝遇均負(fù)載我再回頭來結(jié)一下開提到的幾問題。1.負(fù)載是如計算出來?是定時將每個 CPU 上的運行隊貊國中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)蠱雕總到一個局系統(tǒng)瞬負(fù)載值中然后再定使用指數(shù)權(quán)移動平法來統(tǒng)計去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載。2.負(fù)載高低和 CPU 消耗正相關(guān)嗎虎蛟負(fù)高低表明是當(dāng)前系上對系統(tǒng)源整體需更情況。果負(fù)載變,可能是 CPU 資源不夠了也可能是盤 IO 資源不夠。所以不說看著負(fù)變高,就得是 CPU 資源不夠用鮮山。3.內(nèi)核是如何暴露負(fù)數(shù)據(jù)給應(yīng)層的?內(nèi)定義了一偽文件 /proc/ loadavg,每當(dāng)用戶打這個文件時候,內(nèi)中的 loadavg_proc_show 函數(shù)就會被調(diào)蔥聾到該函數(shù)中問 avenrun 全局?jǐn)?shù)組量,并將均負(fù)載從數(shù)轉(zhuǎn)化為數(shù),然后印出來?

      責(zé)任編輯: 陳聚力

      熱點新聞

          <code id='b9f20'></code><style id='cd431'></style>
          • <acronym id='f642f'></acronym>
            <center id='10f0a'><center id='adfe9'><tfoot id='7aec3'></tfoot></center><abbr id='6a693'><dir id='ffb3b'><tfoot id='290b8'></tfoot><noframes id='cf120'>

          • <optgroup id='05fad'><strike id='239b3'><sup id='29cb9'></sup></strike><code id='45611'></code></optgroup>
              1. <b id='b45d5'><label id='647cc'><select id='dbfb6'><dt id='5c3d0'><span id='69032'></span></dt></select></label></b><u id='5f699'></u>
                <i id='31e9f'><strike id='82735'><tt id='a4800'><pre id='ffcd6'></pre></tt></strike></i>

                精彩推薦

                加載更多……

                    <code id='1393a'></code><style id='4f8c9'></style>
                  • <acronym id='8dd50'></acronym>
                    <center id='29841'><center id='b13c4'><tfoot id='0dd70'></tfoot></center><abbr id='fa987'><dir id='19dc2'><tfoot id='2edd4'></tfoot><noframes id='96152'>

                  • <optgroup id='258dc'><strike id='a6597'><sup id='b814d'></sup></strike><code id='890ef'></code></optgroup>
                      1. <b id='34077'><label id='f82cd'><select id='58f0b'><dt id='11acf'><span id='e4116'></span></dt></select></label></b><u id='d4662'></u>
                        <i id='5ee55'><strike id='cd7e5'><tt id='3cbd2'><pre id='27020'></pre></tt></strike></i>