本文主要讨论在高实时要求、高效能计算、DPDK等领域,Linux如何让某一个线程排他性独占CPU;独占CPU涉及的线程、中断隔离原理;以及如何在排他性独占的情况下,甚至让系统的timer tick也不打断独占任务,从而实现最低的延迟抖动。
https://www.cnblogs.com/poloyy/category/1806772.html
全志平台他Tina系统linux4.9,Tina3.0.1-Tina3.0.3,再往后的版本应该修复了这个问题,此处以R331为例
惠伟:linux time和kvm time虚拟化综述zhuanlan.zhihu.com
在这篇中遗留了几个问题,先尝试回答一下,不一定准确,代码太多,看不过来,全靠猜测,代码的历史很长,都是智慧的结晶,一时半会消化不了很正常。
模块被加载后,在/sys/module/目录下降出现以此模块名命名的目录 root@dm368-evm:/sys/module# ls 8250 lockd snd_pcm_oss tuner_simple cmemk mt20xx snd_timer tuner_xc2028 davinci_display mt9p031 soundcore tvp514x davinci_enc_mngr musb_hdrc spurious usb_storage davinci_mmc netpoll sunrpc usbcore davincifb nfs tcp_cubic usbserial dm365_imp option tda8290 usbtest dm365mmap printk tda9887 videobuf_core edmak scsi_mod tea5761 videobuf_vmalloc irqk snd tea5767 vpfe_capture kernel snd_pcm ths7303 xc5000 root@dm368-evm:/sys/module#
全球的缺芯风潮愈演愈烈,也让很多中国人开始关注起芯片。谈到中国的国产CPU,很多人都恨铁不成钢,“泱泱大国,怎么小小的芯片也做不好?人家的芯片都做到i9了,你们怎么还只有i5的水平?”
其实,在进行ROS2/ROS1程序编写的时候,通常需要启动很多节点,有时候大于60+节点也非常常见的。
本节我们先来学习Linux早期的调度算法的设计,先从最早的调度器算法开始,此调度器时间复杂度是O(n),所以也可以称为O(n)调度算法。我们选择的内核版本是linux-2.4.19。
电脑组成:1电源 2主板 3CPU 4内存 5硬盘 6声卡 7显卡 8网卡 9光驱 电脑的系统的硬体单元: 输入单元,输出单元,算数逻辑单元,控制单元,记忆单元。 算数单元和控制单元合称《中央处理单元》 中央处理单元 (Center processing Unit CPU) 三大系统:windows ,Linux ,Unix 固态硬盘:非常贵,速度快。 连续读取速度:500MB/s(秒),连续写入速度:300MB/s(秒) 内存特点: 1断电数据丢失 2读写速度非常快 bit=(位) Byte=(字节) 8bit=1Byte 一字节(Byte)=255=2的八次方-1 255以下的都是以个字节(Byte) 字节(Byte)是计算机中最小的存储单位 bit是计算中能识别的最小的单位 1024Byte(字节)=1kByte(字节)=1kb 2的十次方=1024 (2**10=1024) 1024K Byte=1M Byte=1MB 100万字节=1MB 1024MB=1GB=10亿字节(Byte) 1024GB=1TB=1万亿字节(Byte) 硬盘的特点: 1数据断电不丢失 2可重复读写 3速度慢(相对于内存来讲) 300GB机械硬盘转速:7200,10000,15000 5400转写的话:(30---50MB/s(秒) CPU 14纳米(代表一个晶体管最小的) GHz(时钟频率代表一秒钟有多少次震荡) 每一次时钟周期理论上可以CPU执行一条指令 1Hz=1频率 1000Hz=1k Hz 1000kHz=1MHz=1000万Hz 1000MHz=1GBHz=10亿Hz 每秒运算十亿次 指令集分种:复杂指令集和简单指令集 extru(特殊功能) vimonly(漫游后对选中的区域执行操作) SUM(求数组元素和的函数) Mutiply(乘号)
上一篇文章我们简单了解了一些关于时间的概念,以及Linux内核中的关于时间的基本理解。而本篇则会简单说明时钟硬件,以及Linux时间子系统相关的一些数据结构。
SUSE Labs 团队探索了 Kernel CPU 隔离及其核心组件之一:Full Dynticks(或 Nohz Full),并撰写了本系列文章:
很多时候,手机发热发烫。是因为CPU使用率过高,CPU过于繁忙,会导致手机无法响应用户,整体性能降低,用户体验会很差,也容易引起ANR等一些列问题
本文基于linux 2.6.32-rc7版本的源码, 因此请准备一份linux2.6.32-rc7代码。建议用如下两种方法获取源代码:
假设现在一家公司就有一名客服人员,这个客服人员就有一台座机,这种情况下用户碰到问题只能打电话给这个客服人员,如果有多个用户同时打入只能凭运气,先打通电话的人得到回答,其他人只能依次等待。显然这种处理机制是非常低效的,小公司可能还可以,大一点的公司就不行了。于是现在共有4-5位客服人员,建立总分机架构,1位负责总机(也可以交给语音提示来操作),负责把问题分给4个分机,让4个分机人员来处理具体的问题,这样一来效率就明显提高了。如果客户来电,总机负责人接电话分给分机人员(或通过语音提示用户拨打分机号)叫做硬中断,而分机负责人处理具体问题叫做软中断。Linux的CPU正是采用硬中断与软中断结合的方式来处理问题的。比如现在网卡告诉CPU,有一批数据要从网络中过来,希望系统做好接收准备,CPU手头的工作被打断(中断),将网络上的数据存储在寄存器中,然后呼起一个进程来处理后续操作,就回头处理刚才中断之前的工作了。被呼起的进程可以在后台“慢慢地”地把寄存器中的数据按照规定格式写入数据库中。这里CPU处理的过程就为硬中断过程,而进程把数据写入数据库中过程为软中断过程。具体如图3-19所示。
通过前两节对平均负载和 CPU 上下文切换的学习,我相信你对 CPU 的性能已经有了初步了解。不过我还是想问一下,在学这个专栏前,你最常用什么指标来描述系统的 CPU 性能呢?我想你的答案,可能不是平均负载,也不是 CPU 上下文切换,而是另一个更直观的指标—— CPU 使用率。
本篇博客代码及资源下载 : https://download.csdn.net/download/han1202012/10382762
| 导语本文主要是讲Linux的调度系统, 由于全部内容太多,分三部分来讲,本篇是中篇(主要讲抢占和时钟),上篇请看(CPU和中断):Linux调度系统全景指南(上篇),调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进行了很多优化,系统扩展性强,我们可以根据业务模型和业务场景的特点,有针对性的去进行性能优化,在保证客户网络带宽前提下,隔离客户互相之间的干扰影响,提高CPU利用率,降低单位运算成本,提高市场竞争力。欢迎大家相互交流学习!
CPU使用率是性能测试是一项重要指标,CPU占用过高会使得设备运行程序出现卡顿与发热,甚至出现应用程序Crash,影响用户体验。在排除硬件环境的限制下,应用程序应该尽可能少的占用CPU。
很多小伙伴在遇到某一接口服务性能问题时,比如说,TPS上不去、响应时间拉长、应用系统出现卡顿,某一请求出现超时等等现象,往往显得苍白无力,无从下手。
在上一篇博客 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux 内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 ) 中 , 已经将编译配置保存到了 .config 文件中 ;
低分辨率定时器可以分为周期性和动态性,这里只讨论周期性。在jiffies小节中知道,linux系统会在每个时钟中断会增加jiffies的值,同时还会去处理到期的定时器。而系统时钟中断的速度取决于HZ的值,如果HZ配置为1000,则每秒会产生1000次时钟中断。如果按照样的话,是不是HZ的值越大越好,其实不然。如果HZ的值越大,则会造成系统的负载也会越大。所以HZ的值一般在每个平台是不一样的。假设HZ=250,那么系统会在每4ms会产生一个时钟中断,然后会去处理超时的定时器。但是4ms对有些设备是可以满足的,对一些要求延迟到us的设备是不满足的,所以linux设计者就推出了高精度定时器Hrtimer,所以把之前依赖HZ的值的定时器称为低分辨率定时器。
在深入Linux系统的复杂世界中,性能优化始终是SRE关注的热点。最近在拜读国际著名的 LINUX 性能专家 Brendan Gregg 的个人博客和技术书籍。他的工作不仅涵盖了系统性能的监控和分析,还深入探讨了性能问题的根源及其解决方案。通过他的个人博客和技术书籍,我们可以窥见Linux性能优化的精髓,学习到如何利用各种工具和方法来提升系统效率,确保应用的顺畅运行。将会结合 Brendan Gregg博文与个人理解 出一个拜读系列博文。
当散列有少量条目且最大条目不超过给定的阈值时,使用内存高效数据结构对其进行编码。可以使用以下指令配置这些阈值:
继续我们的配置文件的学习,上回我们已经学习完了整个 Redis 配置文件的前半部分,今天我们就向后半部分进发。这一部分的内容说实话有更多的内容是更偏门的,都不知道是干嘛用的。还是那句话,本着了解的态度,死磕也要过一遍,以后万一哪天用到了,再详细深入的研究也不迟。
硬件设备及镜像 主板为:Yuzuki Lizard V851S开发板 宿主机环境:ubuntu 22.04 SDK版本:Yuzukilizard的github上的Docker镜像 img为:github上Yuzukilizard释放的镜像:[01]v851s_linux_lizard_uart0_2022_12_29.img v851s_linux_lizard_uart0_2022_12_29.img
https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html 来阅读原文。
嵌入式计算领域一直以来都有着激烈的竞争,RK3568和树莓派4作为两个备受瞩目的平台,引起了广泛的关注。本文将以处理器性能、扩展性、功耗和软件支持等方面对RK3568和树莓派4进行综合比较,以帮助读者更好的了解这两个平台的优势和适用场景。
当有了多道程序技术之后就得到了b图,每个程序各自独立的占用一个逻辑程序计数器,达到并发执行效果
一般来说对于需要大量cpu计算的进程,当前端压力越大时,CPU利用率越高。但对于I/O网络密集型的进程,即使请求很多,服务器的CPU也不一定很到,这时的服务瓶颈一般是在磁盘的I/O上。比较常见的就是,大文件频繁读写的cpu开销远小于小文件频繁读写的开销。因为在I/O吞吐量一定时,小文件的读写更加频繁,需要更多的cpu来处理I/O的中断。 在Linux/Unix下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。平时所说的CPU利用率是
# Server redis_version:3.0.7 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:5efa20fe9f01349c redis_mode:standalone os:Linux 2.6.32-573.el6.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.4.7 process_id:11188 run_id:b2c5a1094ed2f55
负载为1表示当前单核CPU全部占用,如果一台机器有3个CPU,每个CPU都是双核的,这是负载最大值为1×2×3=6。如果5分钟以及15分钟的负载指标的大于CPU个数×CPU核数×0.7,并且长时间比较高,说明CPU不够用。
合理值:60-85%,如果在一个多用户系统中us+sy时间超过85%,则进程可能要花时间在运行队列中等待,响应时间和业务吞吐量会受损害;us过大,说明有用户进程占用很多cpu时间,需要进一步的分析其它软硬件因素;sy过大,说明系统管理方面花了很多时间,说明该系统中某个子系统产生了瓶颈,需要进一步分析其它软硬件因素。
无论哪种中间件的搭建,正常主从模式搭建需要搭建在两台不同的服务器上才是正规的主从搭建模式。因为由于资源的限制,今天来演示一下在同一台服务器上,基于端口不一致搭建Redis的单机主从模式。
为了提高电池的使用寿命,为了节省功耗,linux引入了DVFS。而为了应用程序的性能,Linux 又引入了PM QoS。下图是linux kernel power 管理中PM QOS和DVFS相关的架构图。
前言: 减少vm exit的次数,提高虚拟机的性能。 本文对比几种场景,讨论kvm的性能优化方案。 本分方案中,host和guest都使用Linux4.4。相比更早的Linux版本,Linux4.4的虚拟化更加完善。如果有不了解的朋友,可以了解一下apicv技术,和相关的posted-interrupt和PV-EOI。 本文中,工具使用systemtap,获取到vm exit的reason和次数。 分析: 1,网卡虚拟化 初始条件: a,为了避免外部中断带来的干扰,把物理网卡的中断绑定到物理机的CPU0
因而内核提供了两个调度器主调度器,周期性调度器,分别实现如上工作, 两者合在一起就组成了核心调度器(core scheduler), 也叫通用调度器(generic scheduler).
对超过4,238种不同Android手机型号/版本进行了音频延迟测试,数据表明Android在音频延迟问题上得到了很大改进,但随着当前媒体技术的发展,Android的这些优化还远远不够。迄今为止,Android N在音频延迟方面有任何改进,音频的延迟问题仍然制约着Android音频应用的发展。
本文介绍了如何通过分析Linux内核的僵死进程来定位出错函数的方法。首先介绍了Linux内核的僵死进程情况,然后分析了僵死进程的产生原因,最后通过一个实例,介绍了如何通过分析进程的PC值,来定位出错函数的方法。
如果你想周期性的做一些事情,那么必然,会与时间产生联系。比如,每天早晨7点吃早餐,每天晚上10点进入梦乡。当然,如果你有伴侣的话,晚上这个时间可能不会这么固定。
现在我们在购买一款手机的时候,大家都会去看一下这款手机所采用的芯片型号,有几个CPU核心(是8核处理器还是4核处理器),CPU的主频最高是多少。这些都是一些关系到性能体验的初步的硬件基础参数。
日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。 同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。
由于Android 8.0以后Google的权限限制,SDK再也拿不到进程CPU的实时占用率,只能拿到自己本身进程的Jiffies,而由于拿不到系统整体Jiffies的情况下,就没办法衡量CPU当前的消耗状况了,也没办法根据当前CPU状态实时做一些策略调整。因此进行深入研究以后,给出Android 8.0以后判断CPU状态的几个参考方案(非标准答案)。 方案1 - 通过单位时间汇编指令数获取CPU频率 (1)基础概念: 1)Jiffies 全局变量jiffies用来记录自系统启动以来产生的节拍的总数。启动
熟悉Redis的同学都知道,除了redis配置文件之外,开发者通常使用info命令来查看redis的参数,info命令的结果参看文章末尾。
我想有个用于(开发)未来项目的水墨屏,刚好我又买了一个带树莓派 “hat” 的小玩意。就这样,灵光一闪的我想到旧 Amazon Kindle 电子书阅读器可以变废为宝。
但凡懂Linux内核的,都知道Linux内核的CFS进程调度算法,无论是从2.6.23将其初引入时的论文,还是各类源码分析,文章,以及Linux内核专门的图书,都给人这样一种感觉,即 CFS调度器是革命性的,它将彻底改变进程调度算法。 预期中,人们期待它会带来令人惊艳的效果。
内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 <linux/timer.h> 和 kernel/timer.c 文件中。
批处理——以前的大型机(Mainframe)上所采用的系统,需要把一批程序事先写好(打孔纸带),然后计算得出结果
DM36x initialization passed! TI UBL Version: 1.50 Booting Catalog Boot Loader //启动目录Boot Loader BootMode = NAND //从nand启动 Starting NAND Copy… Valid magicnum, 0xA1ACED66, found in block 0x00000019. DONE Jumping to entry point at 0x81080000. PINMUX :- e54000
领取专属 10元无门槛券
手把手带您无忧上云