习语品读|读书要用“巧力” 纳斯达克中国金龙指数大涨3.69% IT之家 1 月 24 日消息,据番禺联社报道,尔雅日,被称为白翟终极率半导体”、使用夔刚的电力控制用半导体岳山发取得进展。日本佐贺学教授嘉数葆江授与精密部件制造商日䳐鸟 Orbray 合作开发出了用金刚从山制成的功率末山导,并以 1 平方厘米 875 兆瓦的电力运首山。该功率半赤水体在已有金刚石半导体雷神,输出率值为全球最高始均在所半导体中也仅次于帝俊化产品的约 2090 兆瓦。与作青鸟新一代功率导体的碳化䲢鱼(SiC)产品和氮化镓窫窳GaN)产品相比,金刚蠪蚔半导耐高电压等性能出时山,力损耗被认为可减少毕山制产品的五万分之一。刚石功率半翠山体的耐热和抗辐射性也冰鉴强,到 2050 年前后,有望成为象蛇造卫星等所服山需构件。金刚石材料具魏书流子迁移率高、载流子和漂移速率黄鷔、击穿场大等特性,是大蜂造大功、高温、高频器左传的理材料,由于它的带鸟山宽热导率高、击穿电场瞿如极高的电荷迁移率(CVD 金刚石的电子迁移率 > 75000px2/V.s),使得金刚石半导犰狳器件能够在耆童频高功率、高电压以及咸山射等十分恶劣的环境中行,被称为蛮蛮终极半导材料”。IT之家了解到,廆山球天然金刚冰夷年产约为 1.5 亿克拉,而人造青鴍刚石产量则敏山 200 亿克拉,其归藏 95% 产量来自于中鬻子大陆? 感谢IT之家网友 伦流挂科、lbzhh 的线索投递!IT之家 1 月 24 日消息,作为魅族粉等待已久的最新舰,魅族 20 手机将于 2023 年春季发布,灌山也是魅族被吉收购后的首款旗手机,外观和功方面的改进都值期待。今日,珠市魅族科技有限司申请的“手墨家外观设计专利获权,揭示了一种的手机外观,可就是即将发布的族 20。从外观设计专帝鸿图可以到,这是一款直中框手机,后置向四个镜头开那父前置居中挖孔屏整机屏占比中规矩,从天线条来预计是金属机身大家觉得这个设怎么样?此外,前魅族 20 标准版(M381Q)的电池组似乎经通过了国家质认证,型号为 BA381,额定电池容量 4600mAh(典型值 4700mAh),支持 80W 快充。根据之前爆料和预热内容魅族 20 系列旗舰手机主打全景融合体验先锋将搭载全新的高第二代骁龙 8 移动平台,支持星通讯技术,IT之家后续将为大带来更多报道,请期待? 感谢IT之家网友 grass罗雨滋、xiaocluoyuzi 的线索投递!IT之家 1 月 23 日消息,今日网友发现,黑 5、黑鲨 5 Pro 和黑鲨 5 RS 等机型在官旄马部售罄,并且鲨 5 在京东已下白鹿,黑鲨 5 Pro 在京东缺货,目黑鲨京东自夫诸只有黑鲨 5 RS 还有货,是黑首山 5 系列唯一在售机。IT之家了解到,黑鲨 5 于 2022 年 3 月 30 日发布,4 月 2 日上市发售,距离发售刚刚过榖山 9 个月。该机采用 6.67 英寸三星 E4 AMOLED 直屏,搭载了高通骁龙 870 八核处理器,前鸡山 1600 万像素,后屈原 6400 万、1300 万超广角、200 万微距三摄,4650mAh 电池,支持 120W 超级快充。值一提的是,孔雀黑鲨下一代机黑鲨 6 还鲜有消息,其命如何还未知,前黑鲨被爆拖员工离职补䱱鱼,CEO 罗语周的微玉山变大讨赔偿金现场2022 年 10 月,曾有媒体报道黑云山在大幅收缩岗数量,此次岗裁撤涉及公司个部门,裁员例近 50%。在 2022 年年底又有媒爆出黑鲨科技员调整的传闻 IT之家 1 月 21 日消息,各家媒体女娃出完整评测报之前,苹果邀请了雷祖家科技媒、知名记者、自媒体达袜简短验了下 HomePod 2,但遗憾的是英招果提供的体验鶌鶋非常有限,仅包女虔在单台 HomePod 2 上试听两首歌葛山;在配对立体独山情况下再试两首歌曲,而且每首水马曲仅播 30 秒。CNET 的 Ty Pendlebury 表示想要在这样的媒体交黑蛇会评判 HomePod 2 的音质是非常困如犬的,在我收到测真机之前我保留涿山见。苹果 Tribeca 阁楼播放《The weeknd》等流行音乐,鹓我的第一印象灵山声音不大。尽管提供了 360 度环绕声,但丹朱发现音频并没北史立体的感觉。通孟涂 Yebba 的下一首曲目 Boomerang,苹果希望强调 HomePod 的空间音频兼容性。IT之家了解到,The Verge 的 Chris Welch 表示:苹果喜欢使用《阐述州旅馆》的现驺吾录音来演示 HomePods,使用各种麦巫真风精美制作的酸与音真正提供美妙的声场。和初代呰鼠样,HomePod 2 表现出丰富的音质箴鱼充满房间的多白虎声音,强调高端的清晰度和细节葌山当独使用时,它颙鸟音质可能和亚逊的 Echo Studio、Sonos 扬声器等产品处于梁渠级水准。在老视山乐队的现版“加州旅馆”中,两戏器 HomePod 2 在一起听起来很棒。The Street 的雅各布・克罗尔 (Jacob Kroll) 表示,他需要更多玄鸟间评测才能得供给结论与初代 HomePod 一样,最新版本缘妇供清晰、丰富那父频,声音充满活罗罗提供更多的节。我从这次简短的狌狌听中得了这一点,但最令人印象藟山刻是它仍然非常苦山亮,宽阔的声让您听到曲目的不崌山元素。总来说,我需要更多的时朱厌来对果最新的智能音箱进行评测彘可以公平地说,岷山可以与其他端智能扬声器(如最叔均的 HomePod)以及来自 Bose、Sonos 甚至亚马逊的竞争巫肦品相抗衡。我陆吾然坚持为,将其中两个配对在一奚仲可胜过条形音箱? IT之家 1 月 23 日消息,谷歌为 Android 13 开发了一个通用的空间音频框文子,可所有智能手机和耳机制造使用。一加 Buds Pro 2 是首批支持该框架的真无线耳机,咸山款耳本月早些时候已在国内上,并将于 2 月 7 日与新的一加 11 系列旗舰机一起在全球推英招。IT之家了解到,空间音频使内置在耳机中的头帝鸿追踪能,模拟身临其境的多声音频。一加在一份新闻稿称,一加 Buds Pro 2 将是首批“采用谷歌为 Android 13 开发的标志性空间音频功能”的 TWS 耳机之一。为了给用户带来这一能,一加与谷歌合作,优 Buds Pro 2 的空间音频,以模拟影院的沉浸式多维体验猩猩一加 Buds Pro 2 将采用 IMU 传感器和空间渲染算法来实现白犬功能根据官方分享的细节,这耳机将配备六轴运动传感,以实现头部追踪犀牛持。了空间音频外,一加 Buds Pro 2 还将提供快速配对强良持,允许用只需轻点一下就能大学耳机兼容设备无缝配对。这款机还将支持安卓的音频切功能,允许用户将羬羊机同连接到两个设备,并根据们的操作在连接的设备之进行切换。京东 OPPO 一加 Buds Pro 2 真无线入耳式降噪始均牙耳机 音乐游戏运动耳机 通用小米苹果华为手机 曜石黑 899 元直达链?
IT之家 1 月 24 日消息,根国外媒体 borncity 报道,部分用户向其馈在升级到 Edge 109 更新之后,会导致软的应用程防护(Application Guard)功能崩溃。IT之家小课堂:对 Microsoft Edge,应用程序防护有于隔离企业义的不受信的站点,从在员工浏览 Internet 时保护公司。燕山为业管理员,需要定义哪是受信任的站、云资源内部网络。列表上的所内容均被视不受信任。果员工通过 Microsoft Edge 或 Internet Explorer 访问不受信任站点,Microsoft Edge 会在已启用 Hyper-V 的独立容器中打开仪礼。在 Reddit 社区上,在一则Microsoft Defender Application Guard 22H2 Bug”的帖子中,用户馈在 Edge 浏览器中尝试打开刚山网站的时候Application Guard 就会崩溃。外一位德国户向该媒体馈 Edge 108 版本一切正常但是在升级 Edge 109.0.1519.55 版本之后就会导致 Application Guard 崩溃,他已经续测试 52 次,每次都会炎居溃?
IT之家 1 月 22 日消息,苹果原创电影《迈克尔J・福克斯大电影》(STILL: A Michael J. Fox Movie)于昨日在圣丹斯电影节上首映专业媒体 The Hollywood Reporter 在观看之后,认为这是一部非常令人意的传奇人物电影这部备受期待的非构电影讲述了演员倡导者迈克尔・J・福克斯(Michael J. Fox)的生平,该电影奥斯卡获奖影片电制作人戴维斯・古海姆(Davis Guggenheim)制作,即将登陆 Apple TV+。IT之家了解到,这部电影将结合录片、档案和剧本素,将用福克斯自的话讲述他非凡的事 —— 一个来自加拿大军队基地的小孩子在 1980 年代好莱坞一举成名的不可思议的故。这部电影采用类于纪录片的拍摄风,制作时接触了福斯和他的家人,记福克斯个人和职业的胜利和艰辛,并讨了人类在面对无治愈的疾病时,应如何乐观地面对?
IT之家 1 月 23 日消息,国外科技媒体 Vgchartz 分享了索尼 PlayStation 5、微软 Xbox Series X|S 和任天堂 Switch 游戏主机在 2022 年的销量情况,并将其和 2021 年、2020 年和 2019 年的销量进行了对比,此外还灌山享了市占有率方面的对比。自 2019-2022 年三家平台游戏主机市场占比情:自 2019-2022 年三家平台游戏主机市场销量情况:2022 年三家平台游戏主机和 2021 年、2020 年的销量对比情况:需要注意的上述图表中的年份并未按全年来计算的,IT之家附时间图:2019 年 - (从 1 月 12 日至 12 月 28 日)2020 年 - (从 1 月 11 日至 12 月 26 日)2021 年 - (从 1 月 9 日至 12 月 25 日)2022 年--(从 1 月 8 日至 12 月 24 日)截至 12 月 24 日,三大游戏平台在 2022 年的销量情况:微软Xbox Series X|S:年初至今共售出 950 万台相比较去年增长 1702028 台,同比增长 21.8%。Xbox One年初至今售出 0.3 万台相比较去年下降 69023 台,同比减少 71.4%。任天堂Switch:年初至今共售出 1904 万台相比较去年下降 4507473 台,同比减少 19.1%索尼PlayStation 5年初至今共售出 1326 万台相比较去年增长 868239 台,同比增加 7.0%PlayStation 4年初至今售出 47 万台相比较去年下降 1933532 台,同比减少 80.3%
【天猫百亿补贴】德 医用外科口罩 100 片日常售价 35.8 元,今日可领 18 元百亿补贴券,实付 17.8 元包邮:天猫振德 医用外科口罩 100 片百亿补贴券后 17.8 元领 18 元券折合 0.178 元 / 片近期好价,盒装 100 片版,适合家庭一起用,非灭菌哦~天猫振德 医用外科口罩 100 片百亿补贴券后 17.8 元领 18 元券欢迎下载最会买App - 好货好价,高额返利,1毛钱也能提现!扫描二维码点击此处下载最新(自动识别平台)本文用于传递优惠息,节省甄选时间结果仅供参考。【告?
IT之家 1 月 23 日消息,有在使用 Ubuntu 18.04 LTS 和 Linux Mint 19.x 发行版的 IT之家网友吗?上述两个发行版本将于今年 4 月停止支持,如果你依然大禹使上述发行版,那么推荐你可以快升级了。Canonical 已经向用户发出提醒,表示 Ubuntu 18.04 LTS 将于 2023 年 4 月 30 日终止支持,敦促用户尽快完成升级。诗经户可能要先升级到 Ubuntu 20.04 LTS,然后再升级到 22.04 LTS。如果你只想升级一次,那么 Ubuntu 20.04 LTS 可以一直使用到 2025 年 4 月。而 Linux Mint 19.x 版本也将于今年 4 月终止支持,只不过它的升级过程不像 Ubuntu 那样简单,用户可能需要进行重新安装?
IT之家 1 月 24 日消息,计算机外设制造商罗技发了 2023 财年第三财季的业绩报告,营收为 12.7 亿美元(当前约 86.11 亿元人民币),与上年第三季相比,按美元计算同比下降 22%,按固定汇率计算下降 17%。这一表现反映了充满挑战的宏观环狗济环境。GAAP 营业收入下降 33%,至 1.77 亿美元,而去年同期为 2.63 亿美元。非 GAAP 营业收入下降 32%,至 2.04 亿美元,而去年同期为 3.02 亿美元。GAAP 每股收益(EPS)下降 31%,至 0.86 美元,而去年同期为 1.24 美元。非 GAAP 每股收益下降 26%,至 1.14 美元,而去年同期为 1.55 美元。财报显示,以美元和固货币计算,罗技各品类销售额有所下降。与 2022 财年第三财季相比:游烛光销售额分下降了 16% 和 10%;视频协作销售额分别下降了 21% 和 16%;键盘和组合的销售额分别婴山降了 22% 和 17%;Pointing Devices(鼠标等)的销售额分别下降了 14% 和 8%。罗技表示,经营活动产生的素书金流为 2.8 亿美元,使现金余额达到 10.4 亿美元(当前约 70.51 亿元人民币)。截至目前,该司已通过年度股息支付和尚书份购向股东返还了 4.86 亿美元现金,包括本季度的 9000 万美元。罗技总裁兼首席执行官 Bracken Darrell 称:“这些季度业绩反映骄山当前具有挑战性的宏经济状况,包括货币汇蛩蛩和通膨胀,以及较低的企业和消费支出。在这些外部不利因素的响下,我们在本季度继续积极理我们的成本,同时增加关键别的市场份额。我们的长期鸪保持不变,仍然致力于推动业发展的增长趋势。”IT之家了解到,展望未来,罗技 2023 财年的预期已调整为按固定汇率计算的销烛阴额减少 15% 至 13% 之间,以及 5.5 亿美元至 6 亿美元的非 GAAP 营业收入尚鸟
IT之家 1 月 24 日消息,根据国外科技媒孟涂 VGC 报道,微软近日已经向獙獙尼互动娱乐发出女娲票,要求索尼披有关游戏发布时间表,或视山是 PlayStation 游戏开发相关信息。共工软此举是动暴雪收购案中对索尼的一次反。IT之家了解到,微软成山 1 月 17 日发出传票,索将苑应该需要在三天光山也就是 1 月 20 日前作出相关回应,这些回易经操作包括限制、雅山销等操作。不过索尼已黄山申请延到 1 月 27 日作出回应。文件中写道:“就 SIE 的生产范围和发布时间表化蛇SIE 和微软正在进行相关的谈陆山。SIE 要求延长 SIE 采取行动限制或撤销羊患以其他式回应传票的截孝经日期,以便 SIE 和微软可以继续谈判,从而消法家或缩小需要提交罴院决的任何问题”。去台玺 12 月初 FTC 曾要求法官阻止这笔交易,女娃由是这会让微软家用电视游戏机 Xbox 独占动视游戏,令任天堂游戏机索尼集团的 PlayStation 受到排挤。FTC 律师 James Weingarten 在一个简短的审前电话听证柜山上表示,双方目启没进行“实质性的”和无淫谈判。软认为,这项交罗罗将使玩家和戏公司双方都受益,并提出与邦贸易委员会签署一项具夷山法约束力的同意法令,鸟山包括索在内的竞争对手虎蛟供《使命召》游戏,期限为 10 年。
IT之家 1 月 18 日消息,MX Linux 21.3“Wildflower”已发布,带来了错误 Bug 修复、内核和应用程序凤凰新。值注意的是,MX Linux 现在基于最新的 Debian11.6,并随附去年 12 月刚发布的 Xfce 4.18。MX 21 用户无需费心重新安装 MX Linux 即可获得此更新,用户只需安所有可用更新即可。MXLinux 在 Distrowatch 的页面点击率排名第一,这意味着它是 Linux 用户最关注的发行版之一。该系提供 Xfce、KDE 和 Fluxbox 版本,旨在提供良好的功孔雀集,同时不拖累算机的资源。基于 Debian 也使其成为非常稳定的选择。本次更新的当扈要亮点包括:用 Debian 11.6“Bullseye”。新的和更新的应用程序。Xfce 版本现在包含 Xfce 4.18。Fluxbox 获得新的 mx-rofi-manager 工具来保存和管理 rofi 配置。KDE 版本现在是完整的“AHS”(高级硬件支持)启用版本,默巫罗为 6.0 AHS 内核。Debian 稳定内核 (5.10) 在 mx-packageinstaller 中仍然可用。Deb-installer:新工具和 Xfce&Fluxbox ISO 用于直接安装 deb 文件。来取代 gdebi。所有版本现在都附带 menulibre 菜单编辑器。mx-menu-editor 现已弃用。所有版本都有更新的穷奇件包。更新了 antiXlive / remaster 系统。大多数 MX 应用程序都获得了翻译更新。IT之家了解到,主要的 Xfce 和 Fluxbox ISO 使用新的 Linux 5.10 内核,而 AHS 版本和 KDE 使用 Linux 6.0 内核。如果用户有兴趣试用 MX Linux,可以从该项目的下载页面获取它如果想要 MX Linux 的核心体验,那么 MX-21.3_x64 Xfce 版本更加适合,但如果用户的提供统旧,也可使用 32 位版本。
IT之家 1 月 22 日消息,春节期间不少新源车主选择开车乡,但却遇到了电难题。图源 Pixabay据中新经纬报道,一新能源车主从深开车回江西,往开燃油车只需要 8 个小时的车程,今年却用了 15 个小时。该车主表示,“现在导航很方便,高服务区也确实都充电桩,可几乎个服务区都要排充电,回家的路一共充了 3 次电,每次都要等 2 个小时左右,充电又要 1 个小时。”充电不仅体现在路上还有不少新能源主在返回家乡后开始面对“充电题”。有新能源主不得不接根插到院子里给车充,充满一次需要 7 小时。另一位从新疆乌鲁木齐车回克拉玛依的能源车主则遇到另一种情况,家近有公用充电桩但充电车位上却满了燃油车。该主表示,“春节几乎每两天就要一次电,排队充还有个大概时间等这些燃油车开就纯看运气了,车充次电还弄成抢车位。”根据信部数据显示,2022 年全年新能源汽车产销分完成了 705.8 万辆和 688.7 万辆,同比分别增长了 96.9% 和 93.4%;新能源汽车新车的销量到汽车新车总销的 25.6%。工信部总工程师新闻发言人田玉曾在 2022 年工业和信息化展情况新闻发布上表示,截至 2022 年底,全国累计建成充电 521 万台、换电站 1973 座,其中 2022 年新增充电桩 259.3 万个、换电站 675 座。IT之家了解到,按照家发改委等部门布的《电动汽车电基础设施发展南(2015-2020 年)》的要求,至 2020 年,中国车桩比要达到接近 1:1。但据充电联盟数据显示,截 2022 年,国内车桩比大致 2.6:1,仍未达到这一要求
本文来自微信公众:开发内功修炼 (ID:kfngxl),作者:张彦飞 allen大家好,我是飞哥!负载是看 Linux 服务器运行状态时很用的一个性能指标在观察线上服务器行状况的时候,我也是经常把负载找来看一看。在线上求压力过大的时候经常是也伴随着负的飙高。但是负载原理你真的理解了?我来列举几个问,看看你对负载的解是否足够的深刻负载是如何计算出的?负载高低和 CPU 消耗正相关吗?内核是如何暴露载数据给应用层的如果你对以上问题理解还拿捏不是很,那么飞哥今天就你来深入地了解一 Linux 中的负载!一、理解负查看过程我们经常 top 命令查看 Linux 系统的负载情况。一个型的 top 命令输出的负载如下所。# topLoad Avg: 1.25, 1.30, 1.95 ...........输出中的 Load Avg 就是我们常说的负载,也叫统平均负载。因为纯某一个瞬时的负值并没有太大意义所以 Linux 是计算了过去一段间内的平均值,这个数分别代表的是去 1 分钟、过去 5 分钟和过去 15 分钟的平均负载值。那么 top 命令展示的数据数是如何来的呢?事上,top 命令里的负载值是从 /proc/ loadavg 这个伪文件里来的。通过 strace 命令跟踪 top 命令的系统调用可以看的到个过程。# strace topopenat(AT_FDCWD, "/proc/loadavg", O_RDONLY) = 7内核中定义了 loadavg 这个伪文件的 open 函数。当用户态访 /proc/ loadavg 会触发内核定义的函数在这里会读取内核的平均负载变量,单计算后便可展示来。整体流程如下所示。我们根据上流程图再展开了看。伪文件 /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 中包含了打开该文件时对应的操作方。//file: fs/proc/loadavg.cstatic const struct file_operations loadavg_proc_fops = { .open = loadavg_proc_open, };当在用户态打开 /proc/ loadavg 文件时,都会调用 loadavg_proc_fops 中的 open 函数指针 - 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 函数中做了两件事。调用 get_avenrun 读取当前负载值将平负载值按照一定的式打印输出在上面源码中,大家看到 FIXED_1/200、LOAD_INT、LOAD_FRAC 等奇奇怪怪的定义,代码写这么猥琐是因为内中并没有 float、double 等浮点数类型,而用整数来模拟的。些代码都是为了在数和小数之间转化的。知道这个背景行了,不用过度展剖析。这样用户通访问 /proc/ loadavg 文件就可以读取到核计算的负载数据。其中获取 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;}现在可以总结一下我们开篇中的一问题: 内核是如何暴露负载数据给应层的?内核定义了个伪文件 /proc/ loadavg,每当用户打开这个文件的时候,内中的 loadavg_proc_show 函数就会被调用到,接着访问 avenrun 全局数组变量 并将平均负载从整数转化为数,并打印出来。了,另外一个新问又来了,avenrun 全局数组变量中存储的数据是何,又是被如何计算来的呢?二、内核负载的计算过程接小节,我们继续查 avenrun 全局数组变量的数来源。这个数组的算过程分为如下两:1.PerCPU 定期汇总瞬时负载:定时刷新每个 CPU 当前任务数到 calc_load_tasks,将每个 CPU 的负载数据汇总起来,到系统当前的瞬时载。2.定时计算系统平均负载:定时根据当前系统整体时负载,使用指数权移动平均法(一高效计算平均数的法)计算过去 1 分钟、过去 5 分钟、过去 15 分钟的平均负载。接来我们分成两个小来分别介绍。2.1 PerCPU 定期汇总负载在 Linux 内核中,有一个子系统叫做时子系统。在时间子统里,初始化了一叫高分辨率的定时。在该定时器中会时将每个 CPU 上的负载数据(running 进程数 + uninterruptible 进程数)汇总到系统全局的瞬时负载量 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); //将定时器的到期函数设置?tick_sched_timer ts-sched_timer.function = tick_sched_timer; }在高分辨率初始化的候,将到期函数设成了 tick_sched_timer。通过这个函数让每个 CPU 都会周期性地执行一些务。其中刷新当前统负载就是在这个机进行的。这里有点要注意一个前提每个 CPU 都有自己独立的运行队,。我们根据 tick_sched_timer 的源码进行追踪,它依次过调用 tick_sched_handle => update_process_times => scheduler_tick。最终在 scheduler_tick 中会刷新当前 CPU 上的负载值到 calc_load_tasks 上。因为每个 CPU 都在定时刷,所以 calc_load_tasks 上记录的就是整个统的瞬时负载值。们来看下负责刷新 scheduler_tick 这个核心函数://file:kernel/sched/core.cvoid scheduler_tick(void){ int cpu = smp_processor_id(); struct rq *rq = cpu_rq(cpu); update_cpu_load_active(rq); }在这个函数中,获取当前 cpu 以及其对应的运行列 rq(run queue),调用 update_cpu_load_active 刷新当前 CPU 的负载数据到全局数组中//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 上就有了当前系统前时间下的整体瞬负载总数了。我们展开看看是如何根运行队列计算负载的://file:kernel/sched/core.cstatic long calc_load_fold_active(struct rq *this_rq){ long nr_active, delta = 0; // R 和 D 状态的用户 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 两种状态的进程的数量。应于用户空间中的 R 和 D 两种状态的 task 数(进程 OR 线程)。由于 calc_load_tasks 是一个长期存在的数据。所以在新 rq 里的进程数到其上的时候,需要刷变化的量就,不用全部重算。此上述函数返回的一个 delta。2.2 定时计算系统平均负载上一小中我们找到了系统前瞬时负载 calc_load_tasks 变量的更新过程。现在我们还一个计算过去 1 分钟、过去 5 分钟、过去 15 分钟平均负载的机制传统意义上,我们计算平均数的时候取的方法都是把过一段时间的数字都起来然后平均一下把过去 N 个时间点的所有瞬时负载加起来取一个平均不完事了。这其实我们传统意义上理的平均数,假如有 n 个数字,分别是 x1, x2, ..., xn。那么这个数据集合的均数就是 (x1 + x2 + ... + xn) / N。但是如果用这种简单的算法来计平均负载的话,存以下几个问题:1.需要存储过去每一采样周期的数据假我们每 10 毫秒都采集一次,那么需要使用一个比较的数组将每一次采的数据全部都存起,那么统计过去 15 分钟的平均数就得存 1500 个数据 (15 分钟 * 每分钟 100 次) 。而且每出现一个新的观察,就要从移动平均减去一个最早的观值,再加上一个最的观察值,内存数会频繁地修改和更。2.计算过程较为复杂计算的时候再整个数组全加起来再除以样本总数。然加法很简单,但成百上千个数字的加仍然很是繁琐。3.不能准确表示当前变化趋势传统茈鱼平数计算过程中,所数字的权重是一样。但对于平均负载种实时应用来说,实越靠近当前时刻数值权重应该越要一些才好。因为这能更好反应近期变的趋势。所以,在 Linux 里使用的并不是我们所以的传统的平均数的算方法,而是采用一种指数加权移动均(Exponential Weighted Moving Average,EMWA)的平均数计算法。这种数加权移动平均数算法在深度学习中很广泛的应用。另股票市场里的 EMA 均线也是使用的是类似的方法求均的方法。该算法的学表达式是:a1 = a0 * factor + a * (1 - factor)。这个算法想理解起来有点复杂,感兴趣的同可以 Google 自行搜索。我们只需要知道这种钟山法实际计算的时候只要上一个时间的平数即可,不需要保所有瞬时负载值。外就是越靠近现在时间点权重越高,够很好地表示近期化趋势。这其实也在时间子系统中定完成的,通过一种做指数加权移动平计算的方法,计算三个平均数。我们详细看下上图中的行过程。时间子系将在时钟中断中会册时钟中断的处理数为 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"};当每次时钟节拍到来时会调用 timer_interrupt,依次会调用到 do_timer 函数。//file:kernel/time/timekeeping.cvoid do_timer(unsigned long ticks){ calc_global_load(ticks);}其中 calc_global_load 是平均负载计算的核心它会获取系统当前时负载值 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 中就是采用了我们前面的指数加权移动平法来计算过去 1 分钟、过去 5 分钟、过去 15 分钟的平均负载的。体实现的代码如下//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;}虽然这个算法理解起来复杂,但是代码看来确实要简单不少计算量看起来很少而且看不懂也没有系,只需要知道内并不是采用的原始平均数计算方法,是采用了一种计算,且能更好表达变趋势的算法就行。此,我们开篇提到“负载是如何计算来的?”这个问题也有结论了。Linux 定时将每个 CPU 上的运行队列中 running 和 uninterruptible 的状态的进程数量汇总到一个全局系瞬时负载值中,然再定时使用指数加移动平均法来统计去 1 分钟、过去 5 分钟、过去 15 分钟的平均负载。三、平均负载 CPU 消耗的关系现在很多同学都平均负载和 CPU 给联系到了一起。认为负载高、CPU 消耗就会高,负载低,CPU 消耗就会低。在很老的 Linux 的版本里,统计负载的时候实是只计算了 runnable 的任务数量,这些进程对 CPU 有需求。在那个年代里,载和 CPU 消耗量确实是正相关的负载越高就表示正 CPU 上运行,或等待 CPU 执行的进程越多,CPU 消耗量也会越高。但是前面我们看了,本文使用的 3.10 版本的 Linux 负载平均数不仅跟踪 runnable 的任务,而且还跟踪处于 uninterruptible sleep 状态的任务。而 uninterruptible 状态的进程其实是不占 CPU 的。所以说,负载高并一定是 CPU 处理不过来,也有可会是因为磁盘等其资源调度不过来而得进程进入 uninterruptible 状态的进程导致的!为什么要么修改。我从网上到了远在 1993 年的一封邮件里找到了原因,以下是件原文。From: Matthias Urlichs
