kernel-内核抢占

这里有两个概念,内核抢占与用户态抢占。什么是内核抢占?就是指程序执行系统调用的时候(也就是执行于内核态的时候)被其他内核线程抢占走了。

有2种情况是不会也不应该被抢占的:

  1. 内核正在执行中断处理函数
  2. 内核处于临界区。正在执行自旋锁。

除了以上情况以外,就可能被抢占了。

如何知道当前是否为抢占系统vim /boot/config-3.10.0-123.9.3.el7.x86_64 查看相应的选项

如何配置抢占

2.6内核以后支持内核抢占。但需要配置:

内核抢占开关三个选项:

  1. PREEMPT_NONE———CONFIG_PREEMPTCONFIG_PREEMPT_VOLUNTARY都不会设置,表示在内核态既不会被抢占,调might_resched()函数也不会主动切换
  2. Low latency desktop—-只配置CONFIG_PREEMPT_VOLUNTARY,might_resched()函数生效,内核态依然不会被抢占
  3. PREEMPT——————CONFIG_PREEMPTCONFIG_PREEMPT_VOLUNTARY同时生效,在中断返回内核态时会检查TIF_NEEDRESCHED标志,如果需要调度,则会调schedule,内核态被抢占

CONFIG_PREEMPT_VOLUNTARY是资源被抢占,是内核在耗时操作中间,时不时插入一行代码,主动要求被schedule。

CONFIG_PREEMPT则是被动的抢占了。

The Linux 2.6 configuration option CONFIG_PREEMPT_VOLUNTARY introduces checks to the most common causes of long latencies, so that the kernel can voluntarily yield control to a higher priority task waiting to execute. This can be helpful, but while it reduces the occurences of long latencies (hundreds of milliseconds to potentially seconds or more), it does not eliminate them. However unlike CONFIG_PREEMPT (discussed below), CONFIG_PREEMPT_VOLUNTARY has a much lower impact on the overall throughput of the system. (As always, there is a classical tradeoff between throughput — the overall efficiency of the system — and latency. With the faster CPU’s of modern-day systems, it often makes sense to trade off throughput for lower latencies, but server class systems that do not need minimum latency guarantees may very well choose to use either CONFIG_PREEMPT_VOLUNTARY, or to stick with the traditional non-preemptible kernel design.)

The 2.6 Linux kernel has an additional configuration option, CONFIG_PREEMPT, which causes all kernel code outside of spinlock-protected regions and interrupt handlers to be eligible for non-voluntary preemption by higher priority kernel threads. With this option, worst case latency drops to (around) single digit milliseconds, although some device drivers can have interrupt handlers that will introduce latency much worse than that. If a real-time Linux application requires latencies smaller than single-digit milliseconds, use of the CONFIG_PREEMPT_RT patch is highly recommended.

抢占用得越狠,那么对于高优先级的任务,latency就越低。但是抢占本身也是耗时的,频繁的上下文切换肯定影响系统吞吐量的,因此总体性能会降一点。一般这样都是划算的,反正现在CPU很强,稍微降一点关系不大。但是如果真的不需要对latency要求那么苛刻,那么关掉抢占,或者只打开自愿抢占(CONFIG_PREEMPT_VOLUNTARY)也是可以的。目前一般是嵌入式实时系统打开这个选项。

服务器版 一般是 CONFIG_PREEMPT_NONE=y

个人版 一般是 CONFIG_PREEMPT_VOLUNTARY=y

#ifdef CONFIG_PREEMPT_VOLUNTARY
extern int _cond_resched(void);
# define might_resched() _cond_resched()
#else
# define might_resched() do { } while (0)
#endif

kernel-内核抢占的更多相关文章

  1. Linux内核抢占与中断返回【转】

    转自:http://blog.csdn.net/tommy_wxie/article/details/7425728 版权声明:本文为博主原创文章,未经博主允许不得转载. [html] view pl ...

  2. Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)

    1 非抢占式和可抢占式内核 为了简化问题,我使用嵌入式实时系统uC/OS作为例子 首先要指出的是,uC/OS只有内核态,没有用户态,这和Linux不一样 多任务系统中, 内核负责管理各个任务, 或者说 ...

  3. Linux内核抢占实现机制分析【转】

    Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介 ...

  4. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  5. Linux下的内核抢占

    2017-03-03 很遗憾之前在介绍进程调度的文章中,虽然涉及到了内核抢占,但是却没有对其进行深入介绍,今天就稍微总结下内核抢占. 内核抢占在一定程度上减少了对某种事件的响应延迟,这也是内核抢占被引 ...

  6. Ubuntu系统---系统驱动丢失、Kernel内核卸载、禁止更新

    Ubuntu系统---系统驱动丢失.Kernel内核卸载.禁止更新 一早开机发现,ubuntu字体异常,字体很大,直接反应是驱动坏了.一查,确实丢失英伟达驱动,为什么呢?莫名的消失.想知道:1.英伟达 ...

  7. Linux2.6内核--抢占

    [摘要]本文首先介绍非抢占式内核(Non-Preemptive Kernel)和可抢占式内核(Preemptive Kernel)的区别.接着分析Linux下有两种抢占:用户态抢占(User Pree ...

  8. centos7.4系统升级kernel内核

    在实验环境下,已安装了最新的CentOS 7.4操作系统,现在需要升级内核版本. 实验环境CentOS-7-x86_64-Minimal-1708.iso CentOS Linux release 7 ...

  9. Centos7 kernel 内核升级 GPU显卡驱动程序编译安装

    1.NVIDIA官网下载相关显卡驱动 #在服务器上查看网卡型号 lspci -mm | grep NVIDIA   #在NVIDIA官网下载相应型号驱动程序 https://www.geforce.c ...

  10. [Kernel]内核版本添加字符和内核版本'+'解决

    转自:http://blog.csdn.net/adaptiver/article/details/7225980 之前每次由于git仓库编译出来每次都带有'+', 导致都需要使用git archiv ...

随机推荐

  1. unity3d-配置Android环境,打包发布Apk流程详解

    31:unity3d-配置Android环境,打包发布Apk流程详解 作者 阿西纳尼 关注 2016.08.28 22:52 字数 498 阅读 1806评论 0喜欢 5 Unity配置Android ...

  2. vs2008C1902程序数据库管理不匹配

    大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图

  3. hadoop hbase 快速启动 关闭 配置:

    vim ~/.bashrcexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64   //JDK安装路径export HADOOP_HOME=/usr/l ...

  4. 如何为你的Go应用创建轻量级Docker镜像?

    介绍 多什么? 简单来讲,多阶段. 多阶段允许在创建Dockerfile时使用多个from,它非常有用,因为它使我们能够使用所有必需的工具构建应用程序.举个例子,首先我们使用Golang的基础镜像,然 ...

  5. PCB CS架构(工程系统)实现单点登入方法

    社会的不断进步发展,分工也越来越细了.而我们工作接触的范围也越来越狭小了,但这不是倒退了,而是分工之细让人们在各个方面深耕细作.PCB企业软件系统发展路线同样也如此,随着我们PCB企业发展不断壮大,软 ...

  6. activiti安装-------安装插件

    对上面的放大

  7. Jsoup爬虫获取公司纳税识别号

    天眼查 /** * 根据公司名称获取统一社会信用代码 * * @author xiaofei.xian 日期:2019年3月20日 上午11:12:41 */ public class GetTaxN ...

  8. [python] ThreadPoolExecutor线程池

    初识 Python中已经有了threading模块,为什么还需要线程池呢,线程池又是什么东西呢?在介绍线程同步的信号量机制的时候,举得例子是爬虫的例子,需要控制同时爬取的线程数,例子中创建了20个线程 ...

  9. python之 文件操作

    一.初识文件操作 使用python来读写文件是非常简单的操作,我们使用open函数来打开一个文件,获取到 文件句柄,然后通过文件句柄就可以进行各种各样的操作,同过打开方式的不同能够执行的 操作也会有相 ...

  10. 【Leetcode】92. Reverse Linked List II && 206. Reverse Linked List

    The task is reversing a list in range m to n(92) or a whole list(206). All in one : U need three poi ...