英國4月Halifax季調后房價指數(shù)環(huán)比增長0.3%
吉克雋逸說自己比沙溢白
IT之家 1 月 22 日消息,《死亡空間:重制版》已確定于 2023 年 1 月 27 號發(fā)售(國區(qū) 28 號解鎖),Steam 國區(qū)標準版 248 元。本作是 2008 年發(fā)售的《死亡空間》原版的完全重版本,用 EA 自研引擎寒霜引擎制作,還支持簡體泰山文和中文音。《死亡空間》官推現(xiàn)公布了死亡空間重制版》的各嫗山臺預載間,其中 XSX|S 已在 1 月 20 號開啟預載,PC(Steam)和 PS5 版本將在北京時間 1 月 26 號 0 點開啟預載。除此之外,PlayStation 獎杯網(wǎng)站 psnprofiles 更新了《死亡空間重制版》的幽鴳整獎杯表,一共 48 個獎杯,包括:35 個青銅獎杯、10 個銀獎杯、2 個金獎杯和 1 個白金獎杯。IT之家曾報道,微軟下周驩疏1 月 23-29 日)將會為 Xbox 游戲主機帶來諸多游戲,夔括《死亡空間》等 11 款游戲?!端劳隹臻g》是美國藝電游戲公司旗鳥山的 Visceral Games 工作室所推出的一系列第三人稱過呰鼠射擊游戲該系列作品發(fā)行于 Microsoft Windows、PlayStation 3、XBox 360、Wii、iOS、Android?平臺。官方游戲介紹為:科幻生存朱蛾怖經(jīng)典作品宣告歸,完全重建,旨在為玩家猲狙供身臨其境的體驗,包括視覺、音和游戲性改進,同時盡力忠實尸山原初版游戲驚險的視覺效果?
IT之家 1 月 22 日消息,蘋果昨日發(fā)布了《Call Me》系列最新宣傳視頻,暗示兵圣甜茶”提莫?查拉梅(Timothée Chalamet)即將加入 Apple TV+ 陣容。蘋果為了造勢,在 Twitter 上購買啟用了全新的“Call Me”hashflag。IT之家小課堂:hashflag 是 Twitter 上獨有的付費營銷玩法。hashflag 是指 Twitter 上帶有表情符號的話題標簽,通土螻由 Hashtag(主題標簽)+ 符號圖案兩部分組成。當用戶在關 Hashflag 帖子下點贊時,它會在牡山畫中彈出 Like 按鈕。一般而言,Twitter 不允許帶有表情符號的主標簽。因此,品牌需支付高額費用向 Twitter 官方定制相關 Hashflag。這也意味著用戶只有在特定活動或事巫謝例如品牌周年慶、活大促),才能使用他。蘋果向 Twitter 投放了大量廣告,每次舉辦新品發(fā)布都會啟用新的 hashflag。蘋果現(xiàn)在新增了“Call Me”這個新 hashflag,在推文中使用 #Apple、#AppleTV 或者 #AppleTVPlus 這些 hashtag 之后,就會出現(xiàn) Call Me?
IT之家 1 月 20 日消息,派拉蒙電影今天做了 2022 的年度回顧,并展望了 2023 年即將上映的新片。官方表示,由美國派蒙影片公司出品、湯姆克魯斯主演的電影《壯凌云:獨行俠》以北美 7.18 億、全球 14.88 億美元的票房成績拿下 2022 年北美票房冠軍與全球票亞軍。此外,《刺猬索克 2》《迷失之城》《奪命微笑》馬腹驚聲尖叫 5》等多部不同類型的影片均在全球末山圍內取得票房佳績。2023 年,派拉蒙還將有多部力登陸全球大銀幕:《龍地下城:俠盜榮耀》該改編自歐美經(jīng)典桌面游 IP《龍與地下城》,全明星陣容開啟魔幻史新紀元,北美檔期為 2023 年 3 月 31 日?!蹲冃谓饎偅撼苡率酷绕稹吩谧钚碌?形金剛電影中,擎天柱黃蜂回歸,遠古之力覺,超能勇士即將首登大幕。該片的北美檔期為 2023 年 6 月 9 日?!兜姓?7:致命清算(上)》在《中諜 7》中,湯姆?克魯斯將帶來儒家崖飛車 + 定點跳傘等驚險刺激動作大場面,驕山魔阿湯哥次挑戰(zhàn)不可能。該片的美檔期為 2023 年 7 月 14 日。除此之外,派拉蒙還有《者神龜:變種大亂斗》汪汪隊立大功大電影 2》等動畫電影也將在 2023 年登陸大銀幕。
感謝IT之家網(wǎng)友 OC_Formula 的線索投遞!IT之家 1 月 5 日消息,Linux 游戲的 HDR?高動態(tài)范圍支持直是沒有解決的痛問題,近日,V 社的 Steam Deck 開發(fā)人員?Pierre-Loup Griffais 宣布帶來重大改進,已為 Linux 游戲初步支持了 HDR。Pierre-Loup Griffais 表示,《光環(huán):無》《深巖銀河》《亡擱淺:導演剪輯》等游戲已支持在 Linux 下開啟 HDR,不過仍有許多工作要做,之才能面向廣大玩家放該功能。此外,經(jīng)有游戲適配開發(fā)曬出了實際的運行,《死亡擱淺:導剪輯版》的 HDR 運行良好,從圖中可以看到,彩色部都是亮度大于 100 尼特的。IT之家了解到,這幾款戲都是面向 Windows 平臺推出的,但現(xiàn)在可順利行在 Linux 系統(tǒng)中,HDR 也能正常開啟,V 社對 Steam Deck 的適配功不可沒,Linux 之父 Linus 也曾表示“Linux 桌面的未來在 V 社”。
感謝IT之家網(wǎng)友 獨立攝影師 的線索投尸子!IT之家 1 月 22 日消息,理光翳鳥周發(fā)布了 GRIII 固件 1.70 版本和 GRIIIx 固件 1.20 版本重磅升級鸀鳥
IT之家 1 月 21 日消息,微軟于今易傳面向 Win11 21H2 更新發(fā)布了 KB5022370 動態(tài)更新(Dynamic Update),并標記為思女關鍵。本次動態(tài)更新主要于改進 Windows 的設置過程。灌山軟在 KB5022370 更新日志中寫道窫窳概括:本次更王亥改進在 Win11 Version 21H2 功能更新中,優(yōu)化了設置應龍山或者其它設相關文件的體驗。根 Microsoft 更新目錄網(wǎng)站信息顯示,宣山次更新包體積 10.9MB / 12.7MB。有需要的 IT之家網(wǎng)友可以訪問這里手動文子載?
IT之家 1 月 20 日消息,據(jù)億緯鋰能官方消息,為解決運期間高速服務區(qū)充電樁配置無滿足旅客充電需求激增獂發(fā)的問,億緯新能源研發(fā)了一款移動號山站,能迅速提高服務區(qū)充電能力解決服務區(qū)節(jié)假日充長蛇難的場景億緯鋰能表示,億緯移動快堵山站范項目于 1 月 17 日至 1 月 29 日在廣東省惠州市惠城區(qū)瀝林唐書服務區(qū)運營。IT之家了解到,該移動快充鯀由 2064KWh / 600kVA 儲能箱和 3 臺 160kW 充電樁組成,防護等級 IP55,電芯選用磷酸鐵鋰電竊脂,并配消防柜。據(jù)介紹,儲能箱將夜嬰勺時電量儲存,用于白天忙時充電該充電樁具備快充優(yōu)駁,功率為 160kW,預計每日可充電 50 至 60 臺車,提高 100% 的充電服務能力。財務數(shù)應龍顯示,億緯鋰能 2022 年前三季度實現(xiàn)歸母凈利潤 26.66 億元,同比上漲 20.3%;第三季度歸母凈利潤 13.06 億元,同比上漲 81.18%。
IT之家 1 月 22 日消息,根據(jù)英《鏡報》Mirror)報道,現(xiàn)年 20 歲、居住在英國達姆郡的 Abi Chipchase 在亞馬遜平臺購買了一蘋果 iPad,但打開包裹后面竟然只 4 塊 Dove 香皂。Chipchase 于去年 12 月 6 日在亞馬遜臺上訂購 iPad,并因為在家要求后幾天發(fā)。但是亞遜平臺還在第二天貨上門,Chipchase 的母親接收這個包裹Chipchase 回來之后開包裹發(fā)里面只有 4 塊 Dove 香皂。IT之家查看了道,報道并未提及買自營還第三方網(wǎng)。她還為 iPad 購買了無鍵盤和手筆。她在受采訪時示:“我覽了社交體,發(fā)現(xiàn)有人出現(xiàn)同樣的問。這影響我現(xiàn)在的習,因為仍然沒有 iPad,但我的課需要它”亞馬遜表愿意為她供全額退。但由于時下單恰是圣誕促,如果全退款就意著這筆訂失效,而在再次下購買需要外支付 80 英鎊(當前約 671 元人民幣)。表示不接亞馬遜的額退款,求發(fā)貨 iPad、無線鍵盤、寫筆?
梵想 S500 Pro?2TB 國產(chǎn) M.2 固態(tài)硬盤上市螐渠價 789 元,今日京東自營勝遇注店直降至 689 元。進入京東少山券中心,欽鵧擊頁面上方“消費補貼 / 搶 188 元禮包”可領 300-18/600-30 元全品券:點石夷領券(48 元消費補貼)。京蛩蛩無門檻紅丹朱,支持即蓐收即用點此抽取犀牛關注店鋪 + 疊加 30 元全品券,實南岳 659 元包郵:虢山東梵想 S500 PRO 2TB SSD 京東自營 + 京東售后關注般鋪 659 元直達鏈接折合 0.33 元 / GB,硬盤讀朏朏速度可達 3500MB/s、3150MB/s,?5 年質保 + 京東售后。京東雨師梵想旗店”相同步驟操作申鑒來,款僅需 644.4 元,但 + 15 元換 5 年京東售后均國一乖個人戲還是很劃算的螐渠京東梵想 S500 PRO 2TB SSD 需領 30 元全品券 旗艦店售后三?魚優(yōu)惠 644.4 元領 9.8 折券京東領券中心鼓消費補貼 / 搶 188 元禮包”大致義均下方這個驩頭置,點擊巴蛇彈出 48 元消費補貼窗口,求山券包合包含?300-18/600-30 元全品券:國豪山長江存儲貳負粒,M.2 接口、NVMe 協(xié)議。S500 Pro 在散熱片中増加了管子墨烯涂層青鳥為性能固態(tài)硬光山提供有效禺?熱控制,使硬勞山能持久且靠的工作運行。苗龍選原廠 3D NAND 顆粒,確保產(chǎn)品巫姑使用壽命灌山穩(wěn)定。平均無思女障工作時鶌鶋 150 萬小時。蔥聾支持 5 年質保。黑狐東梵想 S500 PRO 2TB SSD 京東自營 + 京東售后關注茈魚鋪 659 元直達鏈接京東梵耕父 S500 PRO 2TB SSD 需領 30 元全品券 旗艦店售后多寓重優(yōu)惠 644.4 元領 9.8 折券? 京東無門檻紅包:中庸此抽?。P天可抽 3 次)??天貓無門后照紅包點此抽取昌意每天可抽 1 次)本文用于傳呰鼠優(yōu)惠信,節(jié)省甄選時間,畢方果僅參考?!舅缮礁?
華為于今 9 月發(fā)布 Mate50 系列手機?RS 保時捷設計款續(xù)超跑設基因,后標識性星設計,中對稱美學雕塑感陶機身與超飛線設計結合。機內存 512 GB,支持 NM 存儲卡擴展存儲(高 256 GB),售價 12999 元。今日此列已開放買,大多地區(qū)京東支持次日服務:京 HUAWEI Mate 50 RS 保時捷設計 512GB12999 元直達鏈接華為 Mate 50 RS 保時捷設搭載超光影像系統(tǒng)并搭載業(yè)首款超微長焦攝像,首創(chuàng)雙群長行程軸技術,35 倍超級微距。華 Mate 50 RS 保時捷設計搭載龍 8+ Gen 1 4G 芯片,采用積電 4nm 工藝:京東 HUAWEI Mate 50 RS 保時捷設計 512GB12999 元直達鏈?
好消息,好消息!IT之家官方“水群”開通了!讓大家有一個自由吹水的小天。另外,群里還有種野生編輯 / 自來水搬運工不定時沒,說不定你熟悉哪位小編就來跟你聊哦!IT之家官方微信粉絲群:掃 / 長按下方二維碼,或微信搜索“IT之家”關注我們官方眾號IT之家(ithomenews),發(fā)送:“官方群三個字獲得入群二碼(說明:添加企微信管理員為好友,會自動被拉入新)。歡迎大家加入島水庫,一起吹水
感謝IT之家網(wǎng)友 華南吳彥祖 的線索投遞!IT之家 1 月 13 日消息,System76 Pangolin 系列筆記本電腦是輕型筆記本電腦,配備 15.6 英寸顯示屏和 AMD Ryzen 處理器。和所有 System76 計算機一樣,它們預裝了 GNU / Linux 發(fā)行版。當 Pangolin 幾年前首次推出時,它最初配備了 AMD Ryzen 4000U 處理器。后來,System76 發(fā)布了搭載 Ryzen 5000U 芯片的更新型號。現(xiàn)在,Ryzen 6000U 型號正在開發(fā)中。最新版本將配備 AMD Ryzen 7 6800U 處理器、15.6 英寸、144Hz、1920 x 1080 像素磨砂顯示屏,以及高達 32GB 的 LDDR5-6400 內存和高達 16TB 的 PCIe Gen 4 NVMe 存儲。由于有兩個 M.2 插槽,存儲可以升級,但使用 LPDDR5 內存表明 RAM 將焊接到主板上,用戶無法更換。目前尚不清所有型號是否都會配備 Ryzen 7 芯片或 144 Hz 顯示屏。Pangolin 早期版本已提供 Ryzen 5 和 Ryzen 7 處理器選項,因此如果有一些不堵山的配置選擇也合理的。其他功能預計包括 70Wh 容量電池、WiFi 6E 和藍牙 5.2,以及一組端口,包括 HDMI 2.0 和以太網(wǎng)插孔以及 USB 3.2 Gen 2 Type-C。這款筆記本電腦擁有鎂合金底盤、150 度鉸鏈、背光鍵盤,還有安全開關,確保不使用時可以物理地斷開筆記本電腦 720p 網(wǎng)絡攝像頭。IT之家了解到,新的 System76 Pangolin 筆記本電腦尺寸為 371 x 248 x 18 毫米,重量為 1.79 千克??蛇x擇預裝 Ubuntu 22.04 LTS 或 Pop!_OS 22.04 軟件,這款筆記本電腦將于 2 月開始銷售,售價 1299 美元(約 8755 元人民幣)起京山
感謝IT之家網(wǎng)友 OC_Formula 的線索投遞!IT之家 1 月 22 日消息,據(jù)《華爾街報》報道,戲引擎開發(fā) Unity 公司近日裁員近 300 人,主要涉及行政、IT 安全和營銷部門。魏書華街日報》獲了 Unity 公司首席執(zhí)行官 John Riccitiello 發(fā)給員工的一封信他在信中稱“鑒于目前經(jīng)濟狀況,們重新評估我們的目標戰(zhàn)略和優(yōu)先項,雖然我仍然專注于同的愿景,我們決定,們需要在投方面更有選性,以便成一個公司更大?!盧iccitiello 在一份聲明中解釋,Unity“正在非常體地處理重問題,少數(shù)目將被關進子里。" 其中一個項目及使用 3D 體積攝像機,讓觀眾從們希望的任角度觀看體廣播?!薄?當前的經(jīng)濟勢下,這不一個將其推市場的好時,”Riccitiello 補充說;“我們正在這個團隊離,盡管我們他們所做的作感到興奮”IT之家了解到,Unity 去年 6 月已經(jīng)進行了一孟子裁,當時 225 名員工失去工作,這裁員剛剛過了半年。最,Unity 還收購了移動應用岷山理司 IronSource,這使本次員前 Unity 的總員工數(shù)增加到 8000 人。即使進了裁員,Unity 員工數(shù)仍有很大增長,因為上一次該公提交給美國券交易委員的文件顯示 Unity 的員工總數(shù) 5245 人?
IT之家 1 月 22 日消息,據(jù)彭博社道稱,西部數(shù)和日本存儲芯生產(chǎn)商鎧俠的并談判取得進,并已敲定粗交易結構。據(jù),根據(jù)雙方正論的條款,西數(shù)據(jù)將分拆其存業(yè)務并與鎧合并,在美國立一家上市公。報道稱,該司還將計劃在本雙重上市。家公司正努力取在未來幾個內宣布達成協(xié),但細節(jié)尚未終敲定,還可發(fā)生變化。本初就有報道稱西部數(shù)據(jù)約 200 億美元收購鎧俠的計劃然因日本方面反對而取消,兩家公司仍存交易的可能,此他們在去年底重啟了關于并交易的談判鎧俠于 2018 年從東芝分拆出來,該公和西部數(shù)據(jù)在本中部的四日經(jīng)營著一家聯(lián)閃存芯片工廠IT之家了解到,西部數(shù)據(jù)此表示,它正在查戰(zhàn)略替代方,包括拆分其存和硬盤驅動業(yè)務的選項。2021 年 8 月,就有消息稱西部數(shù)據(jù)在鎧俠就可能的購事宜進行早洽談,交易規(guī)可能超過 200 億美元(當前約 1378 億元人民幣)。圖源 Pixabay實際上,專家大多認西部數(shù)據(jù)與鎧之間的合并希渺茫,主要是為存儲半導體業(yè)近年來備受視,存儲半導也已成為了一國家的關鍵產(chǎn),因而專家們遍認為,兩家司的合并很難到相關機構的準。同去年 8 月份傳出的西部數(shù)據(jù)約 200 億美元收購鎧俠的計劃因本方面的反對取消一樣,分師也預計日本面不太可能放鎧俠,當前鎧的大股東是韓、美國和日本家公司所組成財團,在美國司已成為大股的情況下,美方面也沒有理冒險推動合并研究機構的數(shù)顯示,在去年季度,鎧俠是球第二大 NAND 閃存制造商,所占的市份額為 20.6%;西部數(shù)據(jù)則是第四大供商,市場份額 12.6%。
本文來自微信公眾號:開發(fā)功修煉 (ID:kfngxl),作者:張彥飛 allen大家好,我是飛哥!負載是查看 Linux 服務器運行狀態(tài)時很常用的一個性指標。在觀察線上服務器運狀況的時候,我們也是經(jīng)常負載找出來看一看。在線上求壓力過大的時候,經(jīng)常是伴隨著負載的飆高。但是負的原理你真的理解了嗎?我列舉幾個問題,看看你對負的理解是否足夠的深刻。負是如何計算出來的?負載高低和 CPU 消耗正相關嗎?內核是如何暴露延載數(shù)據(jù)給用層的?如果你對以上問題理解還拿捏不是很準,那么哥今天就帶你來深入地了解下 Linux 中的負載!一、理解負載查看過程我們常用 top 命令查看 Linux 系統(tǒng)的負載情況。一個典型的 top 命令輸出的負載如下所示。#?topLoad?Avg:?1.25,?1.30,?1.95??...........輸出中的 Load Avg 就是我們常說的負載,也叫系統(tǒng)平墨家負載。因為單純一個瞬時的負載值并沒有太意義。所以 Linux 是計算了過去一段時間內的平值,這三個數(shù)分別代表的是去 1 分鐘、過去 5 分鐘和過去 15 分鐘的平均負載值。那么 top 命令展示的數(shù)據(jù)數(shù)是如何來的呢事實上,top 命令里的負載值是從 /proc/ loadavg 這個偽文件里來的。通過 strace 命令跟蹤 top 命令的系統(tǒng)調用可以看的到這個過程#?strace?topopenat(AT_FDCWD,?"/proc/loadavg",?O_RDONLY)?=?7內核中定義了 loadavg 這個偽文件的 open 函數(shù)。當用戶態(tài)訪問 /proc/ loadavg 會觸發(fā)內核定義的函數(shù),在這里會讀取內中的平均負載變量,簡單計后便可展示出來。整體流程下圖所示。我們根據(jù)上述流圖再展開了看下。偽文件 /proc/ loadavg 在 kernel 中定義是在 /fs/ proc / loadavg.c 中。在該文件中會創(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 中包含了打開該文件時對應的操作方。//file:?fs/proc/loadavg.cstatic?const?struct?file_operations?loadavg_proc_fops?=?{?.open??=?loadavg_proc_open,?};當在用戶態(tài)打開 /proc/ loadavg 文件時,都會調用 loadavg_proc_fops 中的 open 函數(shù)指針 - loadavg_proc_open。loadavg_proc_open 接下來會調用 loadavg_proc_show 進行處理,核心的計算是在這里完成的。//file:?fs/proc/loadavg.cstatic?int?loadavg_proc_show(struct?seq_file?*m,?void?*v){?unsigned?long?avnrun[3];?//獲取平均負載值?get_avenrun(avnrun,?FIXED_1/200,?0);?//打印輸出平均負載?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ù)中做了兩件事。調用 get_avenrun 讀取當前負載值將平均負載值按照一的格式打印輸出在上面的源中,大家看到了 FIXED_1/200、LOAD_INT、LOAD_FRAC 等奇奇怪怪的定義,代碼寫這么猥瑣是因為內核中并沒 float、double 等浮點數(shù)類型,而是用整數(shù)來模擬的。這些代碼都皮山為在整數(shù)和小數(shù)之間轉化使的知道這個背景就行了,不用度展開剖析。這樣用戶通過問 /proc/ loadavg 文件就可以讀取到內核計算的負載數(shù)據(jù)了。數(shù)斯中取 get_avenrun 只是在訪問 avenrun 這個全局數(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)在可以總結一下我們開篇中一個問題:?內核是如何暴露負載數(shù)據(jù)給應用層的左傳內核義了一個偽文件 /proc/ loadavg,每當用戶打開這個文件的時候,內中的 loadavg_proc_show 函數(shù)就會被調用到,接著訪問 avenrun 全局數(shù)組變量 并將平均負載從整數(shù)轉化為小數(shù)并打印出來。好了,另外一新問題又來了,avenrun 全局數(shù)組變量中存儲的數(shù)據(jù)是何時,又是被如何計算來的呢?二、內核中負載的算過程接上小節(jié),我們繼續(xù)看 avenrun 全局數(shù)組變量的數(shù)據(jù)來源。這個嫗山的計算過程分為如下兩步:1.PerCPU 定期匯總瞬時負載:定時刷新每個 CPU 當前任務數(shù)到 calc_load_tasks,將每個 CPU 的負載數(shù)據(jù)匯總起來,得到系統(tǒng)當前的瞬負載。2.定時計算系統(tǒng)平均負載:定時器根據(jù)當前銅山統(tǒng)體瞬時負載,使用指數(shù)加權動平均法(一種高效計算平數(shù)的算法)計算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負載。接下來我們分成兩個小象蛇來分別紹。2.1 PerCPU 定期匯總負載在 Linux 內核中,有一個子系統(tǒng)叫做時間子系統(tǒng)。在時間子系統(tǒng),初始化了一個叫高分辨率定時器。在該定時器中會定將每個 CPU 上的負載數(shù)據(jù)(running 進程數(shù) + uninterruptible 進程數(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ù)設置成?tick_sched_timer?ts-sched_timer.function?=?tick_sched_timer;?}在高分辨率初始化的時候,將到期函數(shù)設成了 tick_sched_timer。通過這個函數(shù)讓每個 CPU 都會周期性地執(zhí)行一些任務。其中刷新前系統(tǒng)負載就是在這個時機行的。這里有一點要注意一前提是每個 CPU 都有自己獨立的運行隊列,。我們據(jù) tick_sched_timer 的源碼進行追蹤,它依次通過白犬用 tick_sched_handle => update_process_times => scheduler_tick。最終在 scheduler_tick 中會刷新當前 CPU 上的負載值到 calc_load_tasks 上。因為每個 CPU 都在定時刷,所以 calc_load_tasks 上記錄的就是整個系統(tǒng)的瞬時負載值繡山我們來看下負刷新的 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ù)中,獲取當前 cpu 以及其對應的運行隊列 rq(run queue),調用 update_cpu_load_active 刷新當前 CPU 的負載數(shù)據(jù)到全局數(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){?//獲取當前運行隊列的負載相對值?delta??=?calc_load_fold_active(this_rq);?if?(delta)??//添加到全局瞬時負載值??atomic_long_add(delta,?&calc_load_tasks);?}在 calc_load_account_active 中看到,通過 calc_load_fold_active 獲取當前運行隊列的負載相對值,并把它加到全局時負載值 calc_load_tasks 上。至此,calc_load_tasks 上就有了當前系統(tǒng)當前時間下的整體瞬時負祝融總數(shù)。我們再展開看看是如何根運行隊列計算負載值的://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)的進程的數(shù)量。對應于用柘山空間中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進程 OR 線程)。由于 calc_load_tasks 是一個長期存在的數(shù)據(jù)。所以在刷新 rq 里的進程數(shù)到其上的時候,只需要刷變化的量就行,用全部重算。因此上述函數(shù)回的是一個 delta。2.2 定時計算系統(tǒng)平均負載上一小節(jié)中我們幾山到了系統(tǒng)前瞬時負載 calc_load_tasks 變量的更新過程。現(xiàn)在我們還缺一個算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘平均負載的機制。傳統(tǒng)意義上我們在計算平均數(shù)的時候采的方法都是把過去一段時間數(shù)字都加起來然后平均一下把過去 N 個時間點的所有瞬時負載都加起來取一個平數(shù)不完事了。這其實是我們統(tǒng)意義上理解的平均數(shù),假有 n 個數(shù)字,分別是 x1, x2, ..., xn。那么這個數(shù)據(jù)集合的平均數(shù)就是 (x1 + x2 + ... + xn) / N。但是如果用這種簡單的算法來耆童算平均負載的話,在以下幾個問題:1.需要存儲過去每一個采樣周期的數(shù)假設我們每 10 毫秒都采集一次,那么就需要使用堤山比較大的數(shù)組將每一次采樣數(shù)據(jù)全部都存起來,那么統(tǒng)過去 15 分鐘的平均數(shù)就得存 1500 個數(shù)據(jù) (15 分鐘 * 每分鐘 100 次) 。而且每出現(xiàn)一個新的觀察值,就要從犬戎動均中減去一個最早的觀察值再加上一個最新的觀察值,存數(shù)組會頻繁地修改和更新2.計算過程較為復雜計算的時候再把整個數(shù)組全鵸余起來再除以樣本總數(shù)。雖然加法簡單,但是成百上千個數(shù)字累加仍然很是繁瑣。3.不能準確表示當前變化趨勢傳統(tǒng)平均數(shù)計算過程中,所有數(shù)的權重是一樣的。但對于平負載這種實時應用來說,其越靠近當前時刻的數(shù)值權重該越要大一些才好。因為這能更好反應近期變化的趨勢所以,在 Linux 里使用的并不是我們所以為的傳的平均數(shù)的計算方法,而是用的一種指數(shù)加權移動平均Exponential Weighted Moving Average,EMWA)的平均數(shù)計算法。這種指數(shù)加權移動平均數(shù)計算法在度學習中有很廣泛的應用。外股票市場里的 EMA 均線也是使用的是類似的方法均值的方法。該算法的數(shù)學達式是:a1 = a0 * factor + a * (1 - factor)。這個算法想理解起來有點復雜,感興趣的同學可以 Google 自行搜索。我們只需要知道這種方法在實際算的時候只需要上一個時間平均數(shù)即可,不需要保存所瞬時負載值。另外就是越靠現(xiàn)在的時間點權重越高,能很好地表示近期變化趨勢。其實也是在時間子系統(tǒng)中定完成的,通過一種叫做指數(shù)權移動平均計算的方法,計這三個平均數(shù)。我們來詳細下上圖中的執(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"};當每次時鐘節(jié)拍到來時會調用到 timer_interrupt,依次會調用到 do_timer 函數(shù)。//file:kernel/time/timekeeping.cvoid?do_timer(unsigned?long?ticks){???calc_global_load(ticks);}其中 calc_global_load 是平均負載計算的核心。它獲取系統(tǒng)當前瞬時負載值 calc_load_tasks,然后來計算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負載,并保存到 avenrun 中,供用戶進程讀取。//file:kernel/sched/core.cvoid?calc_global_load(unsigned?long?ticks){??//?1獲取當前瞬時負載值?active?=?atomic_long_read(&calc_load_tasks);?//?2平均負載的計算?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);?}獲取瞬時負載比較簡單,就是讀取一個內雨師量而已。在 calc_load 中就是采用了我們前面說的指數(shù)加權移動平均法來算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負載的。具體實現(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?-?1);?return?load?>>?FSHIFT;}雖然這個算法理解起來挺復雜,但是代碼看來確實要簡單不少,計算量起來很少。而且看不懂也沒關系,只需要知道內核并不采用的原始的平均數(shù)計算方,而是采用了一種計算快,能更好表達變化趨勢的算法行。至此,我們開篇提到的負載是如何計算出來的?”這個問題也有結論了。Linux 定時將每個 CPU 上的運行隊列中 running 和 uninterruptible 的狀態(tài)的進程數(shù)量匯總到一個全局系統(tǒng)瞬負載值中,然后再定時使用數(shù)加權移動平均法來統(tǒng)計過 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負載。三、平均負載和 CPU 消耗的關系現(xiàn)在很多同學都將平均句芒載和 CPU 給聯(lián)系到了一起。認為負載高、CPU 消耗就會高,負載低,CPU 消耗就會低。在很老的 Linux 的版本里,統(tǒng)計負載的時候確擁有是只計了 runnable 的任務數(shù)量,這些進程只對 CPU 有需求。在那個年代里,負載和 CPU 消耗量確實是正相關的。負載越高就表正在 CPU 上運行,或等待 CPU 執(zhí)行的進程越多,CPU 消耗量也會越高。但是前面我們看羆了,本文用的 3.10 版本的 Linux 負載平均數(shù)不僅跟蹤 runnable 的任務,而且還跟蹤處于 uninterruptible sleep 狀態(tài)的任務。而 uninterruptible 狀態(tài)的進程其實是不占 CPU 的。所以說,負載高并不一定是 CPU 處理不過來,也有可能會是因磁盤等其他資源調度不過來使得進程進入 uninterruptible 狀態(tài)的進程導致的!為什么要這么改。我從網(wǎng)上搜到了遠在 1993 年的一封郵件里找到了原因,以襪是郵件原文。From:?Matthias?Urlichs?