首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux内核调度算法(2)–CPU时间如何分配

假设内核分配时间是100ms,做进程切换时间是5ms,那么进程性能下降还是很明显,跟你配置worker有关,越多下降得越厉害。 当然,这是跟nginx设计有关。...当然,实际运行进程里,大部分并不是nginx这种希望独占CPU全部时间进程,许多进程,比如vi,它在很多时间是在等待用户输入,这时vi在等待IO中断,是不占用时间内核面对多样化进程,就需要技巧性分配...内核分配时间是有策略和倾向性。换句话说,内核是偏心,它喜欢是IO消耗型进程,因为这类进程如果不能及时响应,用户就会很不爽,所以它总会下意识多分配CPU运行时间给这类进程。...虽然内核尽量多分配时间给IO消耗型进程,但IO消耗进程常常在睡觉,给它时间根本用不掉。很合理吧? 那么内核具体是怎么实现这种偏心呢?...通过动态调整进程优先级,以及分配不同长短CPU时间处来实现。先说内核如何决定时间长度。 对每一个进程,有一个整型static_prio表示用户设置静态优先级,内核里它与nice值是对应

6.5K40

基于Linux-3.9.4内核增加简单时间轮转功能

简单时间轮转多道程序内核代码 原创作品转载请注明出处https://github.com/mengning/linuxkernel/ 作者:sa18225465 ---- 一、安装 Linux-3.9.4...qemu -kernel arch/x86/boot/bzImage 二、添加时间轮转多道批处理功能 进入 mykernel 文件夹,可以看到 qemu 窗口输出内容代码 mymain.c 和...mymain.c 中代码如下: myinterrupt.c 中代码如下: 从添加时间轮转多道程序代码中下载 mymain.c、myinterrupt.c、mypcb.h 三个文件...= 1,当时间达到1000整数倍时,将当前运行进程中断并打印。...通过修改一个简单内核源码,增加一个时间轮转功能,让我们更具体体会到了操作系统底层实现原理,对我们后续学习会有很大帮助。

96230
您找到你想要的搜索结果了吗?
是的
没有找到

linux内核 快速分片,技术|Linux slabtop命令——显示内核缓存信息

Linux内核需要为临时对象如任务或者设备结构和节点分配内存,缓存分配器管理着这些类型对象缓存。现代Linux内核部署了该缓存分配器以持有缓存,称之为。不同类型缓存由分配器维护。...本文集中讨论slabtop命令,该命令显示了实时内核缓存信息。 1.命令用法: 该命令用起来很简单,默认执行时不要求任何参数。但是它要求root特权来读取内核信息。...是1K 所以CACHE SIZE是96000K ACTIVE #:指对象中活跃数量 CACHE SIZE #:是占用内存大小 NAME #:内存项名字 汇总信息中: Active / Total...Size (% used) : 390763.29K / 406922.94K (96.0%) 这一项是slab活跃项占用内存大小/总内存使用大小 2.Slabtop选项: 2.1...3.排序标准: 排序标准确定了哪个缓存显示在顶部,下面是slabtop排序标准: 3.1 活跃: 缓存可以通过‘a’来对活跃对象编号进行排序。

47340

Linux内核打印时间

较为简单可行方式是通过PrintkTime功能为启动过程所有内核信息增加时间戳,便于汇总分析。...PrintkTime最早为CELF所提供一个内核补丁,在后来Kernel 2.6.11版本中正式纳入标准内核。所以大家可能在新版本内核中直接启用该功能。...如果你Linux内核因为某些原因不能更新为2.6.11之后版本,那么可以参考CELF提供方法修改或直接下载它们提供补丁:http://tree.celinuxforum.org/CelfPubWiki...当然,你也可以选择在编译内核时直接指定“Kernel hacking”中“Show timing information on printks”来强制每次启动均为内核信息增加时间戳。...这一种方式还有另一个好处:你可以得到内核在解析启动参数前所有信息时间。因此,我选择后一种方式。

6.1K40

Linux内核设备驱动之内核时间管理笔记整理

/****************** * linux内核时间管理 ******************/ (1)内核时间概念 时间管理在linux内核中占有非常重要作用。...相对于事件驱动而言,内核中有大量函数是基于时间驱动。 有些函数是周期执行,比如每10毫秒刷新一次屏幕; 有些函数是推后一定时间执行,比如内核在500毫秒后执行某项任务。...要区分: *绝对时间和相对时间 *周期性产生事件和推迟执行事件 周期性事件是由系统系统定时器驱动 (2)HZ值 内核必须在硬件定时器帮助下才能计算和管理时间。...时间,在10ms调度周期下,进程会多运行8ms。...定时器处理函数 */ unsigned long data; /* 传给定时器处理函数参数 */ } 内核在中提供了一系列管理定时器接口。

2.6K31

基于Linux内核时间轮算法设计实现【附代码】

因此需要一种更高效地管理定时器数据结构和算法,这里结合Linux内核中基于时间定时器管理器具体实现,介绍一种基于时间定时器管理算法。图1为时间基本结构: ?...增加N值更聪明办法是采用多级时间轮,即在图1所示时间轮外面再环绕一个时间轮,假设外面时间刻度为8,即外轮时间槽也是8个,每个时间槽也对应一个链表。...以上面的例子为例,如果二级时间轮都是3位二进制编码(8个时间槽),那么总共可以管理时间范围为0 ~ 63,即64种Timeout定时器。 Linux内核采用多级时间轮。...事实上,它实现是一个很好空间换时间软件算法。参考Linux实现,具体代码如下: 首先定义如下宏: ? 2....基于Linux内核时间轮实现代码,可以在应用程序层面实现一个基于时间管理器。部分代码如下所示: ? ? ? ? TimerManager 类定义如下: ? ?

3.3K10

时间轮转多道程序

新开辟栈帧中空间被它所属函数所独占,当函数返回时候,系统栈会清理该函数所对应栈帧以回收栈上内存空间。...每个函数都拥有自己独占栈帧空间,有两个特殊寄存器用于标识栈帧相关参数: ESP寄存器,永远指向栈帧顶端; EBP寄存器,永远指向栈帧底部;   在调用一个函数时候,函数所需要参数首先会依次被压入栈上...,等待下一次时间中断 my_schedule(); //发生进程调度,发生进程切换 } printk(KERN_NOTICE "this...这里涉及到时间中断函数: void my_timer_handler(void) { #if 1 if(time_count%1000 == 0 && my_need_sched !...\n"); my_need_sched = 1;//使得进程可以发生切换 } time_count ++ ; #endif return; } 产生时间中断使得

89320

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本内核源码 ; 5.x 内核源码下载地址...: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ Linux 内核 5.6.18 版本 : https://mirrors.edge.kernel.org...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本 Linux 内核 区别 : 系统调用 : 其系统调用是相同 , 新版本可能会增加新系统调用 ; 设备文件 : 各内核版本设备文件都是相同 , 但是 内部接口 可能不同 ; 二、使用

23.2K32

查看linux版本内核 Linux内核版本变化

linux内核 linux内核版本号格式  major.minor.patch-build.desc   1、major:表示主版本号,有结构性变化时才变更。   ...Linux内核版本变化 自从1991年9月17日,Linus Torvals正式宣布了 Linux第一个正式版本—0.02版本,到现在,Linux内核版本发生了一系列变化,新旧版本之间时间间隔是几个月甚至几个星期...从Linux诞生开始,Linux内核就从来没有停止过升级,从Linus第一次发布0.02版本到1999年具有里程碑意义2.2版本,一直到我们现在看到2.4版本,都凝聚了Linux内核开发人员大量辛苦劳动...现在Linux内核里已经开始了这方面的支持。...4.小内核 · 内核本来就很小:Linux整个内核源代码大概需要占用20多MB硬盘空间,但是编译出来二进制代码只占用600KB左右空间,完全可以放在一张软盘上,随时可以使用这张软盘将系统启动

22.1K20

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本内核源码 ; 5.x 内核源码下载地址...参考 【错误记录】解压 Linux 内核报错 ( Can not create symbolic link : 客户端没有所需特权 | Windows 中配置 7z 命令行执行解压操作 ) 博客 ;...不同版本 Linux 内核 区别 : 系统调用 : 其系统调用是相同 , 新版本可能会增加新系统调用 ; 设备文件 : 各内核版本设备文件都是相同 , 但是 内部接口 可能不同 ; 二、使用...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30

linux内核编程_linux内核是什么

内核——操作系统内在核心 设备驱动程序 启动引导程序 命令行shell 其他种类用户界面—-操作系统外在表象 基本文件管理工具和系统工具 Linux内核组成 Linux内核源代码目录结构是什么...Linux 每个进程享有4GB内存空间,0~3GB属于用户空间,3~4GB属于内核空间 虚拟文件系统有什么作用?...只能通过系统调用和硬件中断完成 Linux内核编译及加载 内核配置系统由哪既部分组成? Makefile:分布在Linux 内核源代码中Makefile,定义Linux 内核编译规则。...记录哪些部分被编译入内核、哪些部分被编译为内核模块。 在Linux 内核中增加程序需要完成哪些工作? 将编写源代码复制到Linux 内核源代码相应目录。...次引导加载程序加载Linux内核和可选初始RAM 磁盘,将控制权交给Linux内核源代码。 运行被加载内核,并启动用户空间应用程序。

18.8K30

实时性迷思(2)——“时间轮转”沙子

其实,在上一篇文章留言区,很多朋友除了热烈讨论以外,还针对原文中例子提出了“将任务拆分成小块进行时间轮转”解决方案,认为这样就可以解决文中提出实时性矛盾。究竟时间轮转能不能确保实时性?...这里 ? 就是“事件n”CPU资源占用。 【反复横跳代价】 ----   不知道你还记不记得本文一开始我们试图讨论那个问题:即,时间轮转是否对实时性保证有意义?...,拥有相同优先级任务间所使用可抢占式时间轮询,即Round-roubin模式(详情请参考《【解惑】到底是“时间”还是“分时轮询”?》)。...结论:频繁任务切换对系统实时性是有害;由于频繁时间轮转会导致大量不必要任务切换,因此对实时性总体上来说是有害。...时间轮转只是裸机和操作系统环境下常见、“无脑”实现并发一种方式——或者说,时间轮转作用只是实现并发而已,它不仅与实时性保证无关,甚至是有害

68720

进程调度(二)——时间轮转算法

一 定义 时间轮转算法是将所有的就绪进程按先来先服务原则,排成一个队列,按时间轮转。时间大小从几ms到几百ms。...当执行时间用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程执行,并将它送往就绪队列末尾;然后,再把处理机分配给就绪队列中新队首进程,同时也让它执行一个时间。...这样就可以保证就绪队列中所有进程,在一给定时间内,均能获得一时间处理机执行时间。...method stub RR rr = new RR(); rr.Print(rr.getProcess()); System.out.println("请输入时间...new Scanner(System.in); int Timeperiod = in.nextInt(); //时间

1.9K40

LINUX内核

一、Linux内核2.6特点: 1.新调度器 2.内核抢占 3.改进线程模型 4.虚拟内存 5.文件系统 6.音频:音频体系结构ALSA.支持USB音频和MIDI设备,并支持全双工重放功能。...二、LINUX内核组成 1.LINUX内核源代码目录结构 1)arch:包含和硬件体系结构相关代码,每种平台占一个相应目录。如i386,arm,powerpc,mips等。...:头文件,与系统相关头文件放在include/Linux下。...模块 16)sound:ALSA,OSS音频中设备核心代码和常用设备驱动 17)usr:实现了用于打包和压缩CPIO等 2.LINUX内核组成部分 2.1 LINUX主要用进程调度,虚拟文件系统,...3.Linux内核空间与用户空间 Linux只能通过系统调用和硬件中断来完成用户空间到内核空间控制转移

13.9K30

Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

文章目录 一、解压内核源码 二、查询当前 Linux 内核版本号 三、进入并查看 linux 内核源码目录 一、解压内核源码 ---- 将 下载 Linux 内核源码 linux-5.6.14.tar.gz...拷贝到 Ubuntu 虚拟机中 , 执行 tar xvf linux-5.6.14.tar.gz 命令 , 解压 Linux 内核源码 ; 解压完毕后 , linux-5.6.14 目录中就是解压后...Linux 内核源码 ; 二、查询当前 Linux 内核版本号 ---- 执行 uname -a 命令 , 查询当前 Ubuntu 系统 Linux 内核版本号 , 执行过程如下 : root@ubuntu...x86_64 x86_64 x86_64 GNU/Linux root@ubuntu:~/kernel# root@ubuntu:~/kernel# 当前内核版本号是 4.13.0 ; 三...、进入并查看 linux 内核源码目录 ---- 进入之前解压 linux-5.6.14 内核源码目录 ; root@ubuntu:~/kernel# ls linux-5.6.14 linux-5.6.14

86.8K60

Linux内核21-Linux内核中断处理过程

众所周知,中断有轻重缓急之分,而且中断处理程序执行时间不能过长。因为中断处理程序运行时,IRQ中断请求线信号会被暂时忽略,所以,长时间执行且非重要操作应该被延后执行。...非关键可延时中断 比如拷贝缓存中内容到进程地址空间中操作就是非关键可延时中断操作(比如,发送键盘一行缓存到终端处理进程中)。这类操作完全可以延时一段时间执行,并不会影响内核操作。...于是,内核在CPU之间采用循环法(round-robin)分配IRQ。因此,所有的CPU响应中断时间都差不多。 之前我们已经了解过,多APIC系统分配IRQ机制非常复杂。...因此,Linux2.6内核使用一个特定内核线程叫kirqd进行纠正IRQ自动分配(如果有必要的话)。...kirqd内核线程周期性地执行do_irq_balance()函数,追踪最近一段时间内,每个CPU上接收到中断次数。

2.2K20

Linux 内核 vs Windows 内核

对于服务器使用操作系统基本上都是 Linux,而且内核源码也是开源,任何人都可以下载,并增加自己改动或功能,Linux 最大魅力在于,全世界有非常多技术大佬为它贡献代码。...操作系统核心东西就是内核,这次我们就来看看,Linux 内核和 Windows 内核有什么区别? ---- 内核 什么是内核呢?...完成第一版 Linux 后,Linux Torvalds 就在网络上发布了 Linux 内核源代码,每个人都可以免费下载和使用。...多任务意味着可以有多个任务同时执行,这里「同时」可以是并发或并行: 对于单核 CPU 时,可以让每个任务执行一小段时间时间到就切换另外一个任务,从宏观角度看,一段时间内执行了多个任务,这被称为并发。...Monolithic Kernel Monolithic Kernel 意思是宏内核Linux 内核架构就是宏内核,意味着 Linux 内核是一个完整可执行程序,且拥有最高权限。

16.3K30

Linux内核开发_1_编译LInux内核

Linux系统内核函数。...Linux内核配置 2.1 配置选项 Linux内核提供了三种配置模式 1. make config 此模式非常不建议使用,除非你时间非常多,因为这个方式是通过终端输出方式挨个,也就是逐个问你设置选项...[*]BSD Process Accounting 允许进程访问内核,将账户信息写入文件中,主要包括进程创建时间/创建者/内存占用等信息。可以选上,无所谓。...,都会被用在正在开发中最新Linux内核,而除了原始版Linux内核不是在Linux上编译出来以外,其余Linux内核版本都是在Linux内核上开发而来,而使用开发工具(gcc)就是那个时代最新版本...不确定因素很多,所以这里我给大家建议是,如果你想编译Linux内核,最好选择一个与它使用Linux内核版本相仿Linux发行版来编译它 如我选择学习Linux内核,并且选择Linux

19.3K20
领券