• 2024-07-08Franka Linux 设置实时内核 PREEMPT_RT
    为了使用控制您的机器人libfranka,工作站PC上的控制器程序必须在内核下以实时优先级PREEMPT_RT运行。本节介绍了修补内核以支持 PREEMPT_RT并创建安装包的过程。内核不支持NVIDIA二进制驱动程序PREEMPT_RT。 sudoapt-getinstallbuild-essentialbccurlca-certific
  • 2024-07-08PREEMPT_RT 内核是如何实现其实时性的
    PREEMPT_RT内核是通过以下几个关键机制来实现实时性的:抢占式内核调度器:PREEMPT_RT内核使用了抢占式的调度器,可以及时中断正在运行的进程,并立即切换到更高优先级的实时进程执行。这与标准内核的协作式调度器不同,后者只有在进程主动放弃CPU时才能切换到其他进程。中断路径
  • 2024-05-05自旋锁spinlock的实现
    自旋锁,顾名思义:自己在原地打转,等待资源可用,一旦可用就上锁霸占它。问题来了,假设别人已经上锁了,你原地打转会占住CPU资源了,别的程序怎么运行?它没有CPU怎么解锁?这个问题,有2个答案:①原地打转的是CPUx,以后CPUy会解锁:这涉及多个CPU,适用于SMP系统;②对于单CPU系统,自旋锁的“自旋
  • 2024-03-01preempt_count
    preempt_count参考知乎staticinlinevoid__raw_spin_lock(raw_spinlock_t*lock){ preempt_disable(); spin_acquire(&lock->dep_map,0,0,_RET_IP_); LOCK_CONTENDED(lock,do_raw_spin_trylock,do_raw_spin_lock);}staticinlinevoid__raw_spin_unlock(ra
  • 2023-12-10保持内核代码的可抢占安全 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/preempt-locking.html在可抢占内核下的适当锁定:保持内核代码的可抢占安全作者[email protected]介绍可抢占内核会引发新的锁定问题。这些问题与SMP下的问题相同:并发性和可重入性。幸运的是,Linux可抢占内核模型利
  • 2023-12-10锁类型及其规则 【ChatGPT】
    https://www.kernel.org/doc/html/latest/locking/locktypes.html锁类型及其规则介绍内核提供了各种锁原语,可以分为三类:睡眠锁CPU本地锁自旋锁本文概念上描述了这些锁类型,并提供了它们的嵌套规则,包括在PREEMPT_RT下的使用规则。锁类别睡眠锁睡眠锁只能在可抢占的
  • 2023-10-19linux 内核 --- 关抢占/关中断,临界区
     preempt_disable()local_irq_disable()/local_irq_save(flags)spin_lock()spin_lock_irq()/spin_lock_irqsave(lock,flags)spin_lock()会调用preempt_disable()导致本核的抢占调度被关闭(preempt_disable函数实际增加preempt_count来达到此效果),spin_lock_irq()是local_i
  • 2023-10-17自旋锁探秘
    spinlock和mutexSpinlock是linux内核中常用的一种互斥锁机制,和mutex不同,当无法持锁进入临界区的时候,当前执行线索不会阻塞,而是不断的自旋等待该锁释放。正因为如此,自旋锁也是可以用在中断上下文的。也正是因为自旋,临界区的代码要求尽量的精简,否则在高竞争场景下会浪费宝贵的CPU
  • 2023-07-21Linux中内核线程可以被抢占吗?
    1背景 说起抢占,需要关注服务器上Linux内核中的CONFIG_PREEMPT_xxx采用的何种模式,下面是几个比较常见系统的配置方式例如REHL以及centos7使用的是CONFIG_PREEMPT_VOLUNTARY又例如SLES以及龙蜥OS使用的是CONFIG_PREEMPT_NONE 咱们这里要分析的就是在CONFIG_PREEMPT_VOLUN
  • 2023-04-30Linux 进程调度之schdule主调度器
    考虑到文章篇幅,在这里我只讨论普通进程,其调度算法采用的是CFS(完全公平)调度算法。至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行一、调度单位简介1.1task_struct结构体简介对于Linux内核来说,调度的基本单位是任务,用structtask
  • 2023-04-29linux 内核抢占
    什么是内核抢占呢?周期性时钟中断:对于用户任务,当每个时钟中断到来后都会检查它的实际运行时间是否超过理想运行时间,或者运行队列中有没有优先级更高的进程,一般如果满足其中一个条件就会设置重新调度标志,然后在中断返回用户态的前夕发生调度,这是所谓的用户任务抢占。但是如果处于一
  • 2023-04-01【原创】Ubuntu Pro 中的RealTime linux(Real-time Ubuntu/PREEMPT-RT/ubuntu官方PREEMPT-RT)
    【原创】UbuntuPro订阅中的realtimelinux(Real-timeUbuntu/PREEMPT-RT)目录【原创】UbuntuPro订阅中的realtimelinux(Real-timeUbuntu/PREEMPT-RT)1.UbuntuPro简介2.Real-timeUbuntu3.订阅UbuntuPro4.安装realtimeLinuxkernel5.UbuntuProrealtimekernel简
  • 2023-01-27OpenEuler切换内核的方法-bcc学习后续
    OpenEuler切换内核的方法摘要昨天使用OpenEuler22.03LTS学习bcc但是一直不行.没办法切换到CentOS8还有Anolis8很容易就可以直接还是用了yuminstall-ybccke
  • 2023-01-07preempt_enable()
    本文记录了对preempt_enable()实现的一些思考。常见的开启/关闭抢占的接口spin_lock()关抢占(1)拿锁(2)spin_unlock()释放锁(1)开抢占(2)spin_lock