LWN:把软中断锁放到更底层去!

泛微Ecology9单点登录实战指南:从Token获取到页面跳转 本文提供了一份详尽的泛微Ecology9单点登录实战指南,重点解析了Token跳转式SSO的核心流程。内容涵盖从理解关键参数(如appid、loginid)与一次性Token机制,到通过代码示例演示如何正确调用接口获取Token,并详细说明了拼接不同场景跳转地址的完整规则与安全实践,旨在帮助开发者高效、稳定地实现业务系统与OA门户的无缝集成。 阅读详情

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

Beginning the software-interrupt lock pushdown

By Jonathan Corbet
August 4, 2023
ChatGPT assisted translation
https://lwn.net/Articles/939973/

大内核锁(BKL)现在已经成为了一个遥远的记忆,但在那么多年里,它都是内核开发社区面临的一项棘手问题。然而 BKL 的终结并不意味着内核没有其他有问题的锁。近来,已经有一些关注转向了软中断锁(software-interrupt lock)或“下半部锁”(bottom half lock),因为它可能会在实时系统上导致延迟。Frederic Weisbecker 正在采取最新行动来减小这个锁的影响范围,该方法就是基于移除 BKL 时所采取的方法。

最初,Linux 内核是在单处理器系统上开发的 —— 当然可以理解,因为那时我们手头只有这种系统 —— 因此,代码在很大程度上基于这样的假设:它在 CPU 上运行,完全不存在其他的 CPU。于是 BKL 最终需要被引入,才能让 Linux 能够运行在那些产业分析师向我们保证的未来将会大行其道的多处理器机器上。它确保了只有一个 CPU 在任何给定时间内运行内核代码,从而避免了各种并发问题,但是显著地牺牲了性能,尤其是随着 CPU 数量的增加而更加明显。人们很快意识到 BKL 必须被移除。

在许多子系统中采取的方法(在 https://lwn.net/Articles/283066/ 一文中有更深入地描述)是将 BKL 下移至系统的更底层级别。不再是在调用每个驱动程序的 open()函数时就申请持有 BKL,而是修改每个驱动程序来自行获取 BKL。然后,open()函数可以在不持有 BKL 的情况下安全地得到调用了,每个驱动程序可以在需要时进行独立的审查(audit)和修复,之后可以删除其对 BKL 的使用。这种把 BKL 下移的动作将一个大问题分解成了许多较小且更易处理的问题。经过多年的努力,BKL 终于在 2011 年被移除了。

软中断(software interrupt)是一种延后执行的方法,用于执行一些是紧急但又无法直接在硬件中断上下文中执行的工作。当有这种工作要做时,子系统会通过设置一个 flag 来触发软中断;这会使得在下一个合适的时机会调用其处理程序,通常是在硬件中断处理完成后就立即调用,或在从系统调用返回到用户空间之前调用。如果处理时间过长,相关处理也可以推送到专门的 ksoftirqd 线程中。有关此机制的更详细讨论,请参见这篇文章 https://lwn.net/Articles/779738/ 以及 Weisbecker 为改进它所做的另一次尝试。

软中断有许多使用者,包括 tasklets、网络、块设备子系统、读-拷贝-更新(RCU)以及内核定时器。在某些工作场景中,软中断处理可能成为 CPU 总负载的一个重要部分;它可能会运行相当长的时间,从而对运行在用户空间中的软件导致延迟。会禁用软中断处理的那些内核代码(为了避免与处理程序的产生 race condition)会变成不可抢占的,这也会导致出现不太愉快的延迟。总之,与 BKL 一样,软中断反映了几十年前很适用但是现在存在问题的一种设计。

其中一个设计上的决策是,软中断处理程序需要互斥;在任何给定的 CPU 上,只能执行一个软中断处理程序。因此,如果块设备的软中断处理程序运行时间很长,那么网络和定时器处理程序可能就会被无限期地延迟。即使不同类型的软中断处理程序之间很少出现竞争,情况仍然是如此。没有确切的方法可以确定同时运行两个处理程序是否安全,因此人们不会这样做。

Weisbecker 的 patch set 旨在通过在定时器子系统中采用 BKL 方式的迁移到更底层实现的方法来解决这个问题。定时器函数会在内核的各个地方被放到队列里等待调用;它们往往是互相独立的,与其他软中断处理程序并不会产生并发问题。几乎所有的定时器函数都可以与其他软中断处理完全并发地运行 —— 但是这里说的是“几乎”。在没有确定每个定时器函数的安全性的情况下,使定时器处理完全独立于软中断处理可能会引入很难调试的问题。

相反,Weisbecker 采取了分成两步的方法来增加定时器处理的并发性。第一步是允许单个软中断向量在不完全禁用软中断处理的情况下被禁用。这个 patch set 的目的是允许定时器函数与其他软中断并发运行,但它们仍然不会跟彼此并发运行。通过禁用定时器事件的处理(在本地 CPU 上),定时器处理程序可以安全地重新启用软中断处理,而无需担心会再次调用它。

第二步是允许单个 timer 函数来通知到定时器(timer)子系统,说它们可以跟其他软中断处理并发运行。任何不会与软中断处理程序竞争、或者在需要时得执行自己的软中断禁用代码的定时器函数,都可以在设置其定时器事件时添加 TIMER_SOFTINTERRUPTIBLE flag 来标记。当定时器子系统看到此标志时,就会在该定时器函数运行时重新启用软中断处理。因此,如果出现更重要的工作的话,这个 timer 函数就可以被抢占。

在 patch set 中只有一个定时器函数 process_timeout()是以这种方式标记的。然而,Weisbecker 期待着“几年后”的一天内核的所有定时器函数都已经过 audit,并可以安全地与软中断处理程序并发运行;在那时,将可以完全从软中断机制中移除定时器处理。这样以来就是朝着最终消除软中断的一个小步骤。

显然,需要进行相当多的工作才能达到这一点。即使这个 patch set 也需要“更多微调”,以使可以中断的 timer 函数能够抢占其他软中断处理程序,这是解决问题的重要部分。但是,如果这项工作能够进入 mainline 的话,它可能就能代表着朝着这个方向迈出了一步。Weisbecker 现在已经尝试了几次解决软中断的问题,但没有取得太大的成功。然而最终,就像 BKL 一样,正确的方法将会被找到,长期存在的问题终将得到解决。

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

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

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

format,png

MIPI RFFE 信号完整性与硬件设计 MIPI RFFE信号完整性设计关键点 摘要:MIPI RFFE作为射频前端控制总线,其信号完整性设计需平衡速率、驱动能力与抗干扰性。核心挑战在于确保接收端在52Mb/s速率下保持足够的电压和时序裕量。关键设计考量包括: 驱动能力优化:过强导致过冲/振铃和射频杂散,过弱则恶化时序裕量,需与总线负载匹配。 波形质量指标:严格控制上升/下降时间(兼顾EMC和时序要求),抑制过冲/振铃幅度,管理VIO电源纹波和耦合噪声。 阅读详情

相关推荐

电力现货市场出清机制解析:从理论到实践(附节点电价计算实例)

本文深入解析电力现货市场的核心出清机制,重点阐述了节点边际电价的计算原理与实践方法。通过对比系统边际电价、节点边际电价和分区边际电价三种模式,揭示了市场出清价格如何反映电力供需与网络阻塞。文章结合IEEE 30节点系统,提供了基于MATLAB和最优潮流模型的计算实例,详细展示了从构建模型到求解对偶变量以获取节点电价的全过程,为理解电力市场定价机制提供了从理论到实践的完整路径。

whisky的博客 755

LWN:Linux图形栈简介,第一部分!

关注了就能看到更多这么棒的文章哦~The Linux graphics stack in a nutshell, part 1December 19, 2023This article was contributed by Thomas ZimmermannChatGPT translationhttps://lwn.net/Articles/955376/Linux 图形开发者经常提到“现代”L...

Linux News搬运工 916

R语言实战:5分钟搞定GEO单细胞数据(scRNA-seq)下载与整理(附完整代码)

本文详细介绍了如何使用R语言快速下载和整理GEO单细胞数据(scRNA-seq),提供完整的自动化处理代码。从环境准备、数据获取到文件整理和质量检查,涵盖10X Genomics标准格式及非标准数据的处理技巧,帮助生物信息学研究者高效完成数据预处理工作。

weixin_29054399的博客 600

LWN:Linux早期岁月!

关注了就能看到更多这么棒的文章哦~The early days of LinuxApril 12, 2023This article was contributed by Lars WirzeniusDeepL assisted translationhttps://lwn.net/Articles/928581/我的名字是 Lars Wirzenius,Linux 最开始的时候我就参与其中。Li...

Linux News搬运工 1337

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3789

Debian下Rust环境极速安装指南:国内镜像+避坑配置(附清华/中科大源对比)

本文详细介绍了在Debian系统上快速安装和配置Rust开发环境的完整指南。针对国内网络环境,重点对比评测了清华大学、中国科学技术大学等主流镜像源,提供了详细的安装配置步骤、Cargo优化技巧以及常见问题排查方案,帮助开发者显著提升依赖下载和编译效率。

s8t9u0v1w的博客 1161

LWN:Linux图形栈简介,第二部分!

关注了就能看到更多这么棒的文章哦~The Linux graphics stack in a nutshell, part 2December 28, 2023This article was contributed by Thomas ZimmermannChatGPT translationhttps://lwn.net/Articles/955708/在屏幕上显示应用程序的图形化输出内容需要...

Linux News搬运工 791

LAMMPS模拟新合金没势函数?手把手教你用`pair_style hybrid`混合势函数(附FeCMnSiTi案例)

本文详细介绍了在LAMMPS中如何使用`pair_style hybrid`混合势函数模拟新型高熵合金(如FeCMnSiTi),解决缺乏现成势函数的问题。通过实战案例,涵盖参数查找、命令编写、错误排查等关键步骤,特别适合处理多组元体系的复杂相互作用。文章还提供了EAM势函数与LJ势的组合技巧,帮助研究者准确模拟合金性能。

weixin_30635053的博客 243

LWN:内存管理的文档工作以及开发流程!

关注了就能看到更多这么棒的文章哦~Memory-management documentation and development processBy Jonathan CorbetJune 2, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/932398/随着 2023 年 Linux 存储、文件系统、内存管理和 B...

Linux News搬运工 1163

EMD (经验模态分解) 在 C++ 中的实现指南

EMD 是由 Norden E. Huang 等人在1998年提出的一种适用于非线性和非平稳信号的分析方法。对称性:IMF 的上下包络对称。零交叉点:IMF 的零交叉点数量与极值点数量相同或相差一个。本文详细介绍了如何在C++中实现EMD,包括理论背景、算法步骤、代码实现和优化等内容。通过丰富的代码示例和详细的解释,希望能够帮助读者掌握EMD的基本原理,并能够在实际项目中灵活应用。未来,随着信号处理技术的不断发展,EMD及其变种(如EEMD、CEEMDAN等)将继续在各个领域发挥重要作用。

qq_38334677的博客 1749

web逆向伪瑞数案例:宝武资源有限公司(面向对象补环境)

声明:该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关前言:之所以称伪瑞数案例,是因为该网站,无论是补环境的方法、还是环境都和瑞数差不多,因为第一次遇到这种网站,不确定是不是瑞数的一种,所以这里称伪瑞数,有知道的道友,可以评论区评论下,共同进步。,这里就不做多介绍了1.瑞数中的是t​s,而该网站是_ss。2.外链js代码不能格式化,否则补环境时会遇到一个超过数组长度的报错。3.call执行后的虚拟文件中有超多的debugger。

老衲爱洗头的博客 2534

LWN:对EROFS的介绍!

关注了就能看到更多这么棒的文章哦~An introduction to EROFSBy Jake EdgeJune 7, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/934047/Gao Xiang 在 2023 年 Linux 存储、文件系统、内存管理和 BPF 峰会的文件系统会议上对扩展只读文件系统 (EROF...

Linux News搬运工 2278

基于STM32、HAL库的WF282A气压传感器 驱动程序设计

测量范围:0-2.5MPa(可根据需求选择其他量程)输出方式:I2C或SPI数字接口。温度补偿范围:-20℃~85℃。低功耗设计,适合电池供电应用。工作电压:3.3V/5V。精度:±0.1%FS。

corlin6688的博客 394

LWN:软中断处理的启发式规则!

关注了就能看到更多这么棒的文章哦~Heuristics for software-interrupt processingBy Jonathan CorbetMarch 13, 2023DeepL assisted translationhttps://lwn.net/Articles/925540/内核的软中断机制("softirq", software-interrupt)机制是在 1.0 内...

Linux News搬运工 741

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 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")

LWN:把NAPI轮询改为使用kernel threads!

关注了就能看到更多这么棒的文章哦~NAPI polling in kernel threadsBy Jonathan CorbetOctober 9, 2020DeepL assiste...

Linux News搬运工 561

廖雪峰Python教程[完整版]

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

LWN:平衡好处理软中断以及实时任务!

关注了就能看到更多这么棒的文章哦~Juggling software interrupts and realtime tasksBy Jonathan CorbetDecember 2, 2022DeepL assisted translationhttps://lwn.net/Articles/915320/软件中断(software-interrupt)机制是内核中最古老的子系统之一了。甚至可...

Linux News搬运工 444

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LWN:tasklet要被终结了!

关注了就能看到更多这么棒的文章哦~The end of taskletsBy Jonathan CorbetFebruary 5, 2024Gemini translationhttps://lwn.net/Articles/960041/在内核开发中,常见的困难在于控制何时让特定的任务完成。内核代码经常在一些动作(例如休眠或调用文件系统)无法进行的环境中执行。虽然可能执行其他动作,但可能会妨...

Linux News搬运工 308

LWN:用户空间的中断!

关注了就能看到更多这么棒的文章哦~User-space interruptsBy Jonathan CorbetSeptember 30, 2021LPCDeepL assisted tr...

Linux News搬运工 787

LWN:关于preempt_count()的四个小讨论!

关注了就能看到更多这么棒的文章哦~Four short stories about preempt_count()By Jonathan CorbetSeptember 18, 2020...

Linux News搬运工 1571

LWN:古老的tasklet API该何去何从?

关注了就能看到更多这么棒的文章哦~Modernizing the tasklet APISeptember 14, 2020This article was contributed by...

Linux News搬运工 600

中断上下文中的preempt count

参考博客: Linux上下文切换[转]_thonmin的博客-优快云博客_linux 上下文切换 中断子系统 1. 背景 <linux kernel的中断子系统之八:softirq>中讲到: softirq在同一个CPU上是串行的,这点体现在代码的哪里呢? ./kernel/softirq.c wowo科技的文章中讲了两种场景,其中中断嵌套由于Linux不支持,所以暂时不讨论,只讨论下面的一个场景: softirq中的中断 假设一个中断下半部softirq(随便什么..

liaojunwu的博客 566

Linux驱动程序机制

为了让硬件和内核高效协作,且不卡死 CPU$\rightarrow$ 诞生了【异步任务延迟执行机制】(中断线程化、工作队列、定时器)。当驱动在后台把硬件数据捞上来了,为了让应用层安全地拿到数据$\rightarrow$ 诞生了【同步执行控制流】(让应用阻塞休眠,好了再叫醒)和【跨边界事件通知】(用 Epoll 批量通知,或者用 Signal 暴力异步通知)。它们就像一套组合拳:下半部机制(如 Threaded IRQ)在内核后台异步把网卡或传感器数据收好,然后调用wake_up()或,转手化作一个。

m0_75019244的博客 334

cond_resched的使用

kernel 4.18(centos8)中的cond_resched 在可抢占内核中,在内核态有很多抢占点,在有高优先级的进程需要运行时,就会在抢占点到来时执行抢占;而在内核不可抢占系统中(如centos系统),在内核态运行的程序可调用cond_resched主动让出cpu,防止其在内核态执行时间过长导致可能发生的soft lockup或者造成较大的调度延迟。 如下should_res...

yiyeguzhou100的专栏 1万+

Linux系统调用中断机制深度解析

本文详细介绍了Linux系统调用的中断实现机制。系统调用通过软中断(如x86的int 0x80或现代CPU的syscall指令)触发,实现用户态到内核态的切换。文章分析了传统和现代系统调用方式,阐述了完整的处理流程:从寄存器传参、中断触发到内核查找系统调用表执行对应函数。还展示了内核关键代码实现,包括系统调用表和处理器入口点,并简要说明了添加自定义系统调用的方法。最后指出系统调用的性能开销及优化策略,强调理解该机制对系统编程和性能优化的重要性。

软件科学-郝学胜 614

深入理解Linux网络技术内幕 P1-P2

细品

西门吹雪 539

Linux 中断上半部与下半部机制简析

本文先整体说明Linux 中断为什么要分两半,给出中断处理全景;再逐一分析上半部(request_irq、返回值与 IRQF 标志、genirq 框架、设备树时代的 irq_domain 中断映射)与下半部的四大机制(softirq、tasklet、工作队列、中断线程化);随后梳理从 2.4 到 6.12 的关键版本演进节点(genirq、threaded IRQ、cmwq、irq_domain、WQ_BH、PREEMPT_RT 主线化);最后给出机制对比表、选型决策树与调试观测手段。

smallerxuan的博客 1万+
上一篇: LWN:快速、低开销的堆栈跟踪工具SFrame!
下一篇: LWN:新增ioctl来检测内存被写入过!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值