LWN: 更加不对称的Arm系统上如何调度?

Linux 5.18内核更新:C11迁移、AMD调度优化与Btrfs增强 Linux内核作为开源操作系统的核心组件,其版本迭代持续推动着系统性能与兼容性的演进。从技术原理看,内核更新通常涉及编译器优化、处理器调度算法改进及文件系统增强等基础架构升级。Linux 5.18版本的技术价值主要体现在三个方面:首次将代码标准从C89迁移至C11,提升了代码可维护性与类型安全性;针对AMD Zen架构设计了多LLC缓存感知调度机制,显著提升内存敏感型应用的性能;Btrfs文件系统新增编码I/O和跨挂载点去重功能,优化了存储密集型场景的效率。这些改进使该版本特别适用于云计算环境、嵌入式设备及 阅读详情

关注了就能看到更多这么棒的文章哦~

Scheduling for asymmetric Arm systems

By Jonathan Corbet
November 30, 2020
DeepL assisted translation
https://lwn.net/Articles/838339/

Arm 处理器架构在很多方面都在推陈出新,其中有一些功能就需要对内核进行重大改变。例如,big.LITTLE 架构,把快的(但同时也会更耗电的)和慢的(但更省电的)CPU 放在同一个 System-on-chip(SoC)中。为了让 Linux 能够在这种系统上正确地对任务进行调度,就需要对调度器进行大的改动。尽管 big.LITTLE 有很多看起来很奇怪的地方,但它们的 CPU 在某种意义上来说仍然是相同的:系统中的任何任务都可以在这些 CPU 上运行。不过,如果调度器面临的是一个不再能保证这一点的系统时,调度器该怎么做呢?

Linux 上的多处理器(Multiprocessor)支持诞生于对称多处理(symmetric multiprocessing)的时代。在这种系统中,从名字就可以看出,所有的 CPU 都是基本上相同的。任一个 CPU 都可以以基本相同的性能来运行任务。在 SMP 系统上,调度器主要关注的是让所有的 CPU 都忙起来。虽然 cache effect 和 NUMA locality 这两点决定了调度器不应该鼓励在 CPU 之间进行任务迁移,但任一个任务选择具体哪一个 CPU 来执行,这通常是一个无所谓的问题。

Big.LITTLE 将具有不同性能特征的 CPU 捆绑在一起,这样一来就改变了这个假设。因此,为每个任务选择哪个 CPU 就变得更加重要了。如果把任务放在错误的 CPU 上,可能会导致性能不佳或功耗过高,因此在 big.LITTLE 系统上对工作负载分配进行优化,这已经有了大量的工作了。不过当调度器出错的时候,虽然性能会受到影响,但任务还是可以能正常执行下去的。

不过未来的 Arm 设计中,系统中可能有一些 CPU 可以同时运行 64 位和 32 位任务。而其他 CPU 则只能运行 64 位任务。这种设计的优点是可以减少 32 位运算相关的那部分芯片面积,毕竟许多系统中可能永远不会真正使用 32 位程序。同时,偶尔需要运行 32 位程序的话,系统仍然有这个能力。不过,这个代价是在我们建立的系统中,有一些 CPU 根本无法运行某些(也就是 32 位程序)任务。调度器如果选择不正确的话,结果不再仅仅是性能影响了,而是会对涉及到的工作负载产生灾难性的后果。

Qais Yousef 在 10 月份发出一组 patch 来试图解决这个问题,随后的讨论焦点主要集中在如果一个 32 位任务试图在一个只有 64 位的 CPU 上运行时,应该有什么后果。Yousef 最初打算让内核直接 kill 这样的任务,但是也准备了一个 patch 作为备选,其中会重新计算任务的 CPU affinity mask(一个用户可以设置的 bitmask,表示任务可以在哪些 CPU 上运行),改为只允许在 32 位的那些 CPU 上执行。他说,如果用户空间能够被信任的话,只要它正确设置了 32 位任务的 CPU affinity,那么最后这个 patch 就没有必要了。

Scheduler 的维护者 Peter Zijlstra 回应说,这种调整 affinity-mask 的改动 "不会发生"。他说,这个 bitmask 是在 user-space 的控制下,不应该被内核来直接修改。Will Deacon 补充说,内核不应该试图把自己系统的不对称特征向用户空间隐瞒。"我更乐意让调度器做自己的事情,如果这些 32 位任务的某一个最终出现在一个无法处理它的内核上,那算它倒霉,会直接被 kill"。

10 月底,Deacon 发布了一套自己的 patch,解决了他在 Yousef 的实现中看到的一些问题。它去掉了 affinity-mask 的操作,而是直接 kill 那些试图在无法支持自己的 CPU 上运行的任务。为了帮助用户空间正确设置 affinity masks,该 patch 还增加了一个 sysfs 文件,用来公告哪些 CPU 可以运行 32 位任务。

不过到 11 月中旬这个系列的 patch 演进到第 3 版时,这个行为已经发生了变化。如果一个 32 位任务试图在一个只有 64 位的 CPU 上运行,它的 affinity mask 会像 Yousef 的第一个补丁一样被修改。区别在于,如果原来的 affinity mask 中没有 32 位的 CPU,那么这时 bitmask 会被完全归零,使得此任务没有 CPU 可以运行。在这种情况下,将使用一个 fallback mask,具体的定义是根据不同体系架构来定的,但在 Arm 上(这是目前唯一需要此功能的架构),fallback mask 包含所有可以运行 32 位任务的 CPU。这可以起到使任务能在其原来的 affinity mask 之外的 CPU 上运行的效果。

Zijlstra 质疑这个改动,为什么不直接 kill 掉那些错误任务。"我以为我们可以接受… … 用户做了蠢事,那么就直接被 SIGKILL。有什么原因导致这里又改变了?" 后来了解到,这样修改的原因在于这种场景:当一个 64 位任务在 64 位 CPU 上运行并且调用 execve()来运行一个 32 位程序时应该如何处理。64 位的程序代码很可能不知道新的可执行文件与当前 CPU 不兼容,所以很难指望这个 64 位任务能正确地设置 CPU affinity。新运行的程序甚至没有机会运行 sched_setaffinity()来解决问题,即使它知道自己应该是只能在那些 32 位 CPU 上运行。事实上,当人们发现问题的时候,它甚至无法处理 SIGKILL 信号。Deacon 不打算去支持这种情况,而是决定在有必要的时候直接覆盖 affinity mask。

这样做的结果可以说是违反了内核的 ABI 规则,因为它明明说了 CPU-affinity mask 应该在 execve()调用中得到继承(而不是被内核自己修改掉)。正如 Marc Zyngier 所指出的,另一种改法"一定会导致系统不可靠"。修改 ABI rule 应该是比起让系统变得不可靠来说更合适的解决方案了,哪怕其他问题可以得到解决。

所以,有可能的最终合入 mainline 的会是这种改法的一些变体。Yousef 赞同 Deacon 的做法,他说。"我唯一担心的是,这种方法太棒了,会导致采用这种 design 的 SoC 很快变得越来越多"。这种硬件最终能普及到什么程度还有待观察,但等它出现的时候,Linux 应该已经准备好了。请继续关注 CPU 设计者们想象出来的下一个有趣的不对称方案会是什么。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

KIBANA可视化管理界面说明 更说明转自https://blog.youkuaiyun.com/IT_ZRS/article/details/125496588 1 主要结构功能 使用浏览器访问 ip:5601 默认端口,进入首页 Discover:日志管理视图 主要进行搜索和查询 Visualize:统计视图 构建可视化的图表 Dashboard:仪表视图 将构建的图表组合形成图表盘 Timelion:时间轴视图 随着时间流逝的数据 APM:性能管理视图 应用程序的性能管理系统 Canvas:大屏展示 阅读详情

相关推荐

深度强化学习研究笔记(1)——入门(马尔科夫决策过程,贝尔曼方程,价值迭代和策略迭代)

1. 强化学习(Reinforcement learning)概述 强化学习(Reinforcement learning)的基本内涵是将问题用代理和环境进行建模。其中代理能够对环境执行一些特定的动作a∈Aa \in Aa∈A,从而到达某个状态s∈Ss \in Ss∈S,然后我们就可以根据该状态为代理赋予特定的奖励rrr。强化学习的基本思想如下图所示: 代理的目标是最大化未来的奖励总和,它通过将...

越野者的博客 5280

ARM设计: 简化版任务调度器的实现和应用(2)

简化版任务调度器的实现和应用(2) 背景 再上一文简化版任务调度器的实现和应用(1)中简单介绍了如何实现简化版的任务调度器,这里再做一些回忆: 该任务调度器基于链表,即将待执行的task函数指针以tle(链表元素)的形式上下串联。在调度器被激活以后依次执行所链表内的task(没有优先级) 该任务调度器基于systick中断作为节拍器,中断函数用于激活任务调度器。 支持sleep,delay以及定...

老王的博客 1446

星辰超级智能体TeleClaw桌面版深度体验:央企出品的本地AI生产力助手

中国电信星辰超级智能体TeleClaw桌面版是一款本地化AI生产力助手,主打数据安全、自主高效和深度协同。作为程序员,作者实测其核心功能包括本地数据处理、长期记忆、定时任务和代码开发辅助,特别适合敏感数据处理和日常办公自动化。相比在线AI工具,TeleClaw在数据安全、合规性和自动化能力方面优势明显,但技能生态和响应速度仍有提升空间。总体评价为务实高效的本地AI助手,尤其适合对数据安全有要求的企业用户。

研究中.... 1348

LWN: Linux desktop环境下的资源管理!

关注了就能看到更多这么棒的文章哦~Resource management for the desktopBy Jonathan CorbetAugust 27, 2020LPC原文来自:...

Linux News搬运工 308

CAN通信:EB中配置CAN驱动,配置参数解析

以S32K314芯片说明,其他芯片不同,参数配置也有差异。

zhangxiaio1的博客 2166

深入解析Unity3D中PostLateUpdate突然占用大量时间的原因

在Unity3D的生命周期中,是一个在LateUpdate之后被调用的方法。它通常用于处理一些需要在所有更新(包括物理更新和动画更新)之后进行的逻辑。由于它在游戏循环的后期阶段被调用,因此它通常用于处理与渲染直接相关的任务,如相机调整、UI更新等。突然占用大量时间的问题可能由多种原因引起,包括复杂的逻辑处理、频繁的资源加载、不恰当的渲染优化、插件或第三方库的副作用以及内存泄漏或垃圾回收等。为了解决这个问题,开发者需要仔细审查和优化中的代码,同时利用Unity提供的工具来监控和分析游戏性能。

Yori_22的博客 979

Arm-linux的进程调度(1)

1、大家应该都知道到Linux内核的用于进程调度的主要函数就是schedule函数,当然要进行进程调度,有许多条件需要满足,现在假设所有的条件都已经满足,要进行调度了。 /*  * schedule() is the main scheduler function.  */ asmlinkage void __sched schedule(void) { struct task_str

思考的智慧,知识源于思考 2318

Android 集成 Google 与 Facebook 第三方登录实战详解(2024版)

本文详细介绍了2024年Android应用集成Google与Facebook第三方登录的完整实战指南。通过分步教程和代码示例,帮助开发者快速实现一键登录功能,提升用户体验和注册转化率,同时涵盖隐私合规和常见错误处理的最佳实践。

blue的专栏 822

linux内核时间片调度实现详解(基于ARM处理器)

本文基于linux-4.5.3对内核公平调度之时间片相关函数主要流程做了详细介绍,其他细节请参考其他书籍或源码。

arm7star的博客 9957

OFDM时频脉冲形状与子载波正交性的理解

从多载波调制的角度来理解子载波间正交,首先要明确OFDM默认的脉冲成型是时域矩形窗,时域上每个子载波 ej2πfnte^{j2πf_nt}ej2πfn​t 都被一个矩形窗脉冲gT(t)g_T(t)gT​(t)成型。其次,OFDM子载波间隔 等于 OFDM符号周期的倒数,这是子载波正交的条件。 ​ 根据时频脉冲形状,可以从时域上理解如左图(注意是矩形脉冲 乘 复指数),从频域上理解如右图(sinc脉冲 卷 频点)。 ​

weixin_43803202的博客 2213

告别手动复制粘贴!用Python脚本+pywinauto实现PC微信消息自动发送(附完整源码)

本文详细介绍了如何利用Python和pywinauto实现PC微信消息的自动化发送,告别繁琐的手动操作。从环境搭建、UI控件定位到构建健壮的发送流程,再到高级功能扩展和项目打包部署,全面解析了自动化办公的实现方案,显著提升工作效率。

weixin_30315723的博客 583

LWN:在deadline调度器中支持CPU capacity!

关注了就能看到更多这么棒的文章哦~Capacity awareness for the deadline schedulerMay 29, 2020This article was co...

Linux News搬运工 549

Qt Creator 下载和安装

在线安装程序是一个小型的安装程序,它将在您的计算机上下载和安装 Qt Creator。离线安装程序是一个较大的安装包,您可以将其保存在本地,并在没有网络连接的情况下安装 Qt Creator。在 Qt 官方网站上,您可以找到 Qt Creator 的下载页面。Qt Creator 是一款跨平台的集成开发环境(IDE),用于开发基于 Qt 框架的应用程序。在这一步中,您可以选择是否安装 Qt Creator 的附加组件。一旦您完成了组件的选择,安装程序将开始将 Qt Creator 安装到您的计算机上。

HackLogic的博客 6817

LWN:Arm Linux 内核的第一次Linaro 论坛!

关注了就能看到更多这么棒的文章哦~The first Linaro Forum for Arm Linux kernel topicsApril 9, 2024This article was contributed by Tom Gall, Bill Fletcher, and Arnd BergmannChatGLM translationhttps://lwn.net/Articles/96...

Linux News搬运工 1101

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LWN:hybrid scheduling更加复杂了!

关注了就能看到更多这么棒的文章哦~Hybrid scheduling gets more complicatedBy Jonathan CorbetSeptember 30, 2022LPCDeepL assisted translationhttps://lwn.net/Articles/909611/10 多年前新出现的 Arm big.LITTLE 架构给内核的 CPU 调度器(schedu...

Linux News搬运工 414

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LWN: OSPM会议讨论如何测试scheduler行为

点击上方蓝色字关注我们~Scheduler behavioral testingJuly 10, 2019OSPM译者注:OSPM是刚刚结束的第三届Operating-S...

Linux News搬运工 711

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LWN: 5.17 合并窗口第一部分!

关注了就能看到更多这么棒的文章哦~5.16 Merge window, part 1By Jonathan CorbetNovember 4, 2021DeepL assisted tra...

Linux News搬运工 367

LWN:Zephyr四年啦!

关注了就能看到更多这么棒的文章哦~Four years of ZephyrJune 29, 2020This article was contributed by Martí Bolív...

Linux News搬运工 637

LWN: OSPM会议上讨论SCHED_DEADLINE和SCHED_RT的路线图

点击上方蓝色字关注我们~The future of SCHED_DEADLINE and SCHED_RT for capacity-constrained and as...

Linux News搬运工 821

LWN:在kernel中实现完整的task-isolation!

关注了就能看到更多这么棒的文章哦~A full task-isolation mode for the kernelApril 6, 2020This article was contr...

Linux News搬运工 2566

LWN:5.14合并周期的第一部分!

关注了就能看到更多这么棒的文章哦~The first half of the 5.14 merge windowBy Jonathan CorbetJuly 2, 2021DeepL as...

Linux News搬运工 396

操作系统工程师成长:从兴趣到创新的四重境界

操作系统作为计算机系统的核心,承担着硬件资源管理和应用服务支撑的关键角色。其技术栈涵盖从芯片架构到系统调用的完整抽象层实现,是现代云计算、物联网等场景的基础设施。优秀的操作系统工程师需要建立硬件层(寄存器/总线协议)、内核层(调度/内存管理)、系统层(编译器/调试工具)、应用层(系统库/守护进程)的全栈认知。通过参与Linux内核开发、分析GCC/LLVM编译器实现等实践,可以培养对系统级问题的诊断能力(如使用perf/ebpf定位性能瓶颈)。在金融、汽车等行业场景中,这种技术深度能转化为商业价值,例如通过

weixin_32047493的博客 453

LWN:6.3 合并窗口第一部分!

关注了就能看到更多这么棒的文章哦~The first half of the 6.3 merge windowBy Jonathan CorbetFebruary 23, 2023DeepL assisted translationhttps://lwn.net/Articles/923846/截至目前,已经有 5776 个 non-merge 的 changeset 被拉入 6.3 版本的 ma...

Linux News搬运工 1001

单片机开发者转型Linux:从裸机到操作系统的实战指南

嵌入式开发领域中,单片机与Linux系统代表了两种不同的技术范式。单片机开发以直接硬件控制和确定性执行为特点,而Linux操作系统则引入了进程调度、虚拟内存等现代计算机科学概念。理解Linux的系统架构(如内核空间/用户空间隔离、设备驱动模型)是开发复杂嵌入式系统的关键。在工业物联网和智能硬件快速发展的背景下,掌握Linux开发能力能显著提升设备的多任务处理、网络通信和安全性。通过构建交叉编译工具链、学习字符设备驱动开发等实践,开发者可将单片机积累的硬件知识转化为Linux环境下的底层控制优势。典型应用场景

weixin_34326429的博客 369

LWN:7.1 合并窗口的前半部分

向内核添加 代理执行 (proxy execution) 的项目仍在继续,合并了 捐赠者迁移 (donor migration) 补丁集的一部分,这最终将实现 捐赠者任务 (donor tasks) 在 per-CPU 之间的移动,以便于向 锁持有者 (lock holder) 捐赠 CPU 时间。BPF 验证器 (BPF verifier) 中跟踪 栈存活性 (stack liveness) 的方式发生了变化,从而为许多程序带来了更快的验证速度。在 7.1 中,它将失去“实验性”状态,成为通用可用功能。

Linux News搬运工 126

LWN:6.8 合并窗口的剩余内容!

关注了就能看到更多这么棒的文章哦~The rest of the 6.8 merge windowBy Jonathan CorbetJanuary 22, 2024Gemini translationhttps://lwn.net/Articles/958178/尽管 Linus Torvalds 在一周的大部分时间里都处于停电状态,但他还是成功地发布了 6.8-rc1 并按时关闭 6.8 合并...

Linux News搬运工 289
上一篇: LWN: Mutt 2.0版本发布!
下一篇: LWN: epoll_pwait2(), close_range(), and encoded I/O
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值