Linux学习术语集

什么是grub?

  • GNU GRUB(简称“GRUB”)是一个来自GNU项目的启动引导程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

什么是hrtimer?

高精度定时器Hrtimer

什么是NMI?

不可屏蔽中断属于 中断请求 的一种。外部不可屏蔽中断请求经由专门的CPU针脚NMI,通知CPU发生了灾难性事件,如电源掉电、总线奇偶位出错等。内部不可屏蔽中断请求是CPU内部自发产生的,如存储器读写出错、溢出中断、除法出错中断等。

NMI线上中断请求是不可屏蔽的(既无法禁止的)、而且立即被CPU锁存。

因此NMI是边沿触发,不需要电平触发。

NMI的优先级也比INTR高。不可屏蔽中断的类型指定为2,在CPU响应NMI时,不必由中断源提供中断类型码,因此NMI响应也不需要执行总线周期INTA。

什么是APIC?

高级可编程中断控制器;
在计算方面,英特尔的高级可编程中断控制器( APIC ) 是一个中断控制器系列。顾名思义,APIC 比 Intel 的8259 可编程中断控制器(PIC) 更先进,特别是能够构建多处理器系统。它是旨在解决多处理器计算机系统中的中断路由效率问题的几种架构设计之一。

什么是中断?

硬件中断(Hardware Interrupt):

  • 可屏蔽中断(maskable interrupt)。硬件中断的一类,可通过在中断屏蔽寄存器中设定位掩码来关闭。
  • 非可屏蔽中断(non-maskable interrupt,NMI)。硬件中断的一类,无法通过在中断屏蔽寄存器中设定位掩码来关闭。典型例子是时钟中断(一个硬件时钟以恒定频率—如50Hz—发出的中断)。
    处理器间中断(interprocessor interrupt)。一种特殊的硬件中断。由处理器发出,被其它处理器接收。仅见于多处理器系统,以便于处理器间通信或同步。
  • 伪中断(spurious interrupt)。一类不希望被产生的硬件中断。发生的原因有很多种,如中断线路上电气信号异常,或是中断请求设备本身有问题。

软件中断(Software Interrupt)
软件中断。是一条CPU指令,用以自陷一个中断。由于软中断指令通常要运行一个切换CPU至内核态(Kernel Mode/Ring 0)的子例程,它常被用作实现系统调用(System call)。

什么是中断向量?

中断向量是指早期的微机系统中由硬件产生的中断入口地址或存放中断服务程序的首地址。中断是指在计算机执行程序的过程中,当出现异常情况或者特殊请求时,计算机停止现行的程序的运行,转而对这些异常处理或者特殊请求的处理,处理结束后再返回到现行程序的中断处,继续执行原程序。

存放中断向量(共256个),称这一片内存区为中断向量表,地址范围是0~3FFH;

什么是NMI WATCHDOG?

Linux kernel设计了一个检测lockup的机制,称为NMI Watchdog,是利用NMI中断实现的,用NMI是因为lockup有可能发生在中断被屏蔽的状态下,这时唯一能把CPU抢下来的方法就是通过NMI,因为NMI中断是不可屏蔽的。NMI Watchdog 中包含 soft lockup detector 和 hard lockup detector,2.6之后的内核的实现方法如下。

NMI Watchdog 的触发机制包括两部分:

  • 一个高精度计时器(hrtimer),对应的中断处理例程是kernel/watchdog.c: watchdog_timer_fn(),在该例程中:要递增计数器hrtimer_interrupts,这个计数器供hard lockup detector用于判断CPU是否响应中断;还要唤醒[watchdog/x]内核线程,该线程的任务是更新一个时间戳;soft lock detector检查时间戳,如果超过soft lockup threshold一直未更新,说明[watchdog/x]未得到运行机会,意味着CPU被霸占,也就是发生了soft lockup。

  • 基于PMU的NMI perf event,当PMU的计数器溢出时会触发NMI中断,对应的中断处理例程是 kernel/watchdog.c: watchdog_overflow_callback(),hard lockup detector就在其中,它会检查上述hrtimer的中断次数(hrtimer_interrupts)是否在保持递增,如果停滞则表明hrtimer中断未得到响应,也就是发生了hard lockup。
    hrtimer的周期是:softlockup_thresh/5。

在2.6内核中:
softlockup_thresh的值等于内核参数kernel.watchdog_thresh,默认60秒;
而到3.10内核中:
内核参数kernel.watchdog_thresh名称未变,但含义变成了hard lockup threshold,默认10秒;
soft lockup threshold则等于(2*kernel.watchdog_thresh),即默认20秒。
NMI perf event是基于PMU的,触发周期(hard lockup threshold)在2.6内核里是固定的60秒,不可手工调整;在3.10内核里可以手工调整,因为直接对应着内核参数kernel.watchdog_thresh,默认值10秒。

什么是soft lockup?

所谓lockup,是指某段内核代码占着CPU不放。Lockup严重的情况下会导致整个系统失去响应。
只有内核态代码才能引起lockup! 因为用户态的用户程序是可抢占的!不可能形成lockup(只有一种情况例外,就是SCHED_FIFO优先级为99的实时进程即使在用户态也可能使[watchdog/x]内核线程抢不到CPU而形成soft lockup)

Soft lockup是指CPU被内核代码占据,以至于无法执行其它进程。
检测soft lockup的原理是给每个CPU分配一个定时执行的内核线程==[watchdog/x],如果该线程在设定的期限==内 没有得到执行的话就意味着发生了soft lockup,[watchdog/x]是SCHED_FIFO实时进程,优先级为最高的99,拥有优先运行的特权。

其原理就是在cpu上创建一个实时FIFO优先级为99的percpu内核线程(一般情况下可以认为是系统中优先级最高的任务),其名字为watchdog;此任务一般会由一个==高精度定时器htimer==定期唤醒,唤醒后watchdog线程会去执行“喂狗”操作(具体而言就是将当前的时间戳写到变量watchdog_touch_ts)。

同时,c这个htimer定时器还会定期检查此cpu上“喂狗”是否有发生,即判断当前时间戳与watchdog_touch_ts的差值是否大于一个门限,内核用get_softlockup_thresh()函数来取得此门限值,默认为20秒。 
如果htimer定时器检测到watchdog_touch_ts距离现在已经超过了门限值就判断为发生了softlockup。
    
触发softlockup的场景有许多种可能,例如
- 在某个cpu上有优先级99的死循环FIFO任务;
- 或者系统中有不健康的软中断在长时间进行软中断处理;又或者内核中产生了死循环等等。


watchdog内核线程。 看门狗线程watchdog是由内核创建的percpu线程,创建后一直睡眠,然后等待htimer周期性的唤醒自己。被唤醒后watchdog线程就会去“喂狗”,即将当前时间戳写入到percpu变量watchdog_touch_ts中;

    正常情况下每隔每隔sample_period秒的实际watchdog线程就会被唤醒一次,由于watchdog线程的优先级是实时FIFO调度策略99的优先级,因而它是系统中优先级最高的任务了。由于它首屈一指的高优先级,可以预测的是,唤醒后它会有机会立刻得到运行(除非系统中也有优先级为99的FIFO任务在运行状态),即去更新watchdog_touch_ts变量。因而,我们还可以预测,正常情况下watchdog_touch_ts每隔sample_period秒就会更新一次,或者说递增一次,递增的粒度也正好是htimer时钟的周期sample_period。

 

这种预测在何时可能不成立呢?

    (1) watchdog没有被及时唤醒。这种情况就是htimer没有及时触发;由于htimer唤醒是在高精度时钟中断中完成的,除非时钟中断出现问题,否则watchdog不会出现这种情况。而这种情况多半是长时间关闭本地中断造成的,这种情况一般需要通过hardlockup机制来检测;

    (2) 系统中有长时间处于软中断处理函数。虽然watchdog线程优先级很高,但是只是任务级别的执行流,对于软中断执行流程是优先级更低的。假如系统中的有一个软中断由于某种原因进入到了死锁或者死循环,那么watchdog线程是无法执行的,这样watchdog_touch_ts也无法及时得到更新。

    (3) cpu上有优先级为99的FIFO任务一直占有cpu。实时FIFO的调度策略是严格按优先级调度的,而同等优先级的任务遵守先来先运行、一直到无法再运行为止的原则。因而,如果cpu上原来已经有一个调度策略为FIFO且优先级为99的任务一直占有CPU时watchdog即使被唤醒后也是无法得到运行的。

    这里列举了典型的三种watchdog无法及时获得cpu运行的情况,也就是发生soft lockup的典型情况,也就是说明此cpu有比FIFO99优先级相等或更高优先级的任务/模块在一直占用cpu。
	地址:[https://blog.csdn.net/wennuanddianbo/article/details/89142281]

hard lockup?

Hard lockup比soft lockup更加严重,CPU不仅无法执行其它进程,而且不再响应中断

检测hard lockup的原理利用了PMUNMI perf event,因为NMI中断是不可屏蔽的,在CPU不再响应中断的情况下仍然可以得到执行,它再去检查时钟中断的计数器hrtimer_interrupts是否在保持递增,如果停滞就意味着时钟中断未得到响应,也就是发生了hard lockup。

PMU?

现代 CPU 大多具有性能监控单元(Performance Monitoring Unit, PMU),用于统计系统中发生的特定硬件事件,例如缓存未命中(Cache Miss)或者分支预测错误(Branch Misprediction)等。同时,多个事件可以结合计算出一些高级指标,例如每指令周期数(CPI),缓存命中率等。一个特定的微体系架构可以通过 PMU 提供数百个事件。

linux优先级

Linux内核的三种调度策略:
  1,SCHED_OTHER 分时调度策略,
  2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃
  3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。

nice值虽然不是priority,但是它确实可以影响进程的优先级。
在英语中,如果我们形容一个人nice,那一般说明这个人的人缘比较好。什么样的人人缘好?往往是谦让、有礼貌的人。比如,你跟一个nice的人一起去吃午饭,点了两个一样的饭,先上了一份后,nice的那位一般都会说:“你先吃你先吃!”,这就是人缘好,这人nice!但是如果另一份上的很晚,那么这位nice的人就要饿着了。这说明什么?越nice的人抢占资源的能力就越差,而越不nice的人抢占能力就越强。这就是nice值大小的含义,nice值越低,说明进程越不nice,抢占cpu的能力就越强,优先级就越高。在原来使用O1调度的Linux上,我们还会把nice值叫做静态优先级,这也基本符合nice值的特点,就是当nice值设定好了之后,除非我们用renice去改它,否则它是不变的。而priority的值在之前内核的O1调度器上表现是会变化的,所以也叫做动态优先级

首先在linux中优先级级别只有0-139这140个级别,这是固定的,数字越小优先级别越高,所以优先级为0的进程具有最高优先级。linux进程分为实时进程和非实时进程,这140个优先级中,linux把0-99分配给实时进程,100-139分配给非实时的普通进程,所以实时进程的优先级总是比非实时的普通进程要高,大部分情况下我们所用到的用户进程都是非实时的普通进程,用户进程都是在100-139这个优先级相对较低的范围折腾。

linux的进程调度策略分为FIFO,RR,和OTHER(NORMAL三种。

实时进程使用FIFO或RR调度,非实时进程使用OTHER调度。

实时进程调度策略(FIFO,RR)和非实时进程调度策略上的主要不同点在于FIFO和RR在有高优先级进程的情况下,低优先级进程不可能运行。

FIFO调度的特点是在没有更高优先级进程出现或主动释放CPU的情况下,进程可以一直运行,直到任务结束。

RR调度将同优先级的进程放到一个队列,在没有更高优先级进程的情况下同优先级的进程公平分配CPU时间,也就是说相比于FIFO,RR调度的进程可以被同优先级的进程抢占,RR调度在同优先级的进程间引入时间片轮转机制。

OTHER则是在所有不同优先级的进程间引入时间片轮转机制,所有优先级的进程根据优先级的高低进行分时运行,通过动态调整进程优先级使所有进程都有运行机会,在OTHER调度中就存在低优先级抢占高优先级进程(静态优先级)的情况。

从内核的角度看,实时进程优先级0-99,数值越小优先级越高,但在我们创建实时进程app,设置进程优先级的时候,发现,设置为99的进程优先级要高于98,就是说在实时进程app中优先级的高低是数值越大优先级越高。之所以会有这个问题,是因为app进程所调用的用来设置当前进程优先级的api函数内部有一个转换计算。

BMC?

基板管理控制器。
BMC,执行伺服器远端管理控制器,英文全称为Baseboard Management Controller. 为基板管理控制器。
它可以在机器未开机的状态下,对机器进行固件升级、查看机器设备、等一些操作。

基板管理控制器(BMC)是一种服务处理器,能够借助传感器监视服务器,计算机或其他硬件设备的物理状态。 底板管理控制器是智能平台管理接口的一部分,它嵌入在要监视的设备或计算机的主电路板或主板中。 底板管理控制器可帮助单个管理员远程监视大量服务器或设备,从而帮助降低网络的运营成本。

dm设备

内核提供的逻辑设备到物理设备的映射;全称device mapper,是不是很熟悉,如果你看文件系统的挂载情况就能看出来了,试试以下命令

df -h

IO对列调度策略

Linux大概提供了三种: 【cfq】 【deadline】 【noop】
cfq: complete fairness queueing。顾名思义,完全公平!不考虑读写耗时不等问题,每个读写分配时间均等。
deadline: 只分了读写队列,deadline指的是给每个io操作一个超时时间。数据库适合这个
noop: no operation 就是个单纯的FIFO队列,简单合并任务。

调整策略:

echo deadline > /sys/block/sda/queue/scheduler

iostat 查看磁盘IO压力

iostat -k -d -t  -x 2 300 > /tmp/iostat.deadline.out
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值