问题标签 [preemption]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 为什么 kprobes 禁用抢占,什么时候可以安全地重新启用它?
根据文档,kprobes 禁用抢占:
探测处理程序在禁用抢占的情况下运行。根据架构和优化状态,处理程序也可以在禁用中断的情况下运行(例如,在 x86/x86-64 上,kretprobe 处理程序和优化的 kprobe 处理程序在没有中断禁用的情况下运行)。
从提交 9a09f261a中,我们可以清楚地看到优化的 kprobe 用于在启用抢占的情况下运行。
为什么会这样?我将 kprobes 理解为在内核中的特定地址注入一些代码的一种方式,并且理解任何代码都应该没问题。
- 是什么让 kprobes 如此特别以至于必须禁用抢占?
- 在什么情况下可以重新启用抢占?
python - 如何阻止 Pepper 机器人抢占其平板电脑?
我正在尝试创建一个程序,其中一部分将使用 naoqi Python SDK 从我的 PC 网络摄像头将实时视频以帧(或换句话说图像)传输到 Pepper 的平板电脑。在机器人一侧会有一个程序使用 ALTabletService 的 showWebview 函数将图像显示为 html 网页。但是在这个过程开始后,它只进行了几秒钟,然后屏幕返回到它的主页。我猜机器人抢占了我的程序。但这不会发生在 playVideo 函数中。有没有办法克服这个问题?
PC端:
辣椒面:
linux - 用于四核 ARM A53 的 Linux CONFIG_PREEMPT_RT(新手疑惑)
我想激活我的 Linux 内核的抢占功能。为此,我应该下载与我正在使用和编译的内核版本相匹配的正确补丁(如此处所述)。我拥有的内核版本是Linux 版本 4.9.0(只需uname -a
从命令行键入并在/proc/version
.
在linux 内核页面(可以为此目的下载补丁)我找不到我正在使用的完全匹配的版本。我应该使用哪一个?
另外,如果您对如何正确执行此操作有一些建议,我们将不胜感激!
我的另一个问题是:我是否可以继续使用我开发的同一个应用程序,尽可能观察性能的提高或下降?那么我正在开发的驱动程序呢?或第三方设备驱动程序?
更新:
我正在使用配备四核 ARM 53 的 Xilinx Zynq Ultrascale+。使用的板是 Xilinx 的 zcu102。
内核的源文件来自这里,文件系统是Linaro
scheduling - 无限循环任务的优先级抢占式调度
在 Google 和 Stackoverflow 上有很多关于优先级抢占式调度的材料,但我仍然对优先级抢占式调度内核中无限循环任务的调度感到困惑。让我们考虑以下情况:
一个 RTOS 启动两个任务T1
,并分别T2
具有优先级50
和100
。这两个任务看起来像:
和
据我了解,内核将T2
因其较高的优先级而调度,并T1
因其较低的优先级而暂停。现在因为T2
是一个无限循环,它永远不会放弃 CPU,T1
直到其他一些高优先级任务抢占T2
。
但是,我的理解似乎不正确,因为我已经在 RTOS 中测试了上述案例,并且我在两个任务打印的控制台上都得到了输出。
有人可以评论我对此事的理解以及在上述情况下 RTOS 的实际行为吗?
c - 在 local_bh_disable()/local_bh_enable() 中使用 rcu_dereference() 是否安全?
-functionlocal_bh_disable
改变每个 cpu(在 x86 和最近的内核的情况下)__preempt_count
或current_thread_info()->preempt_count
其他。
无论如何,这给了我们一个宽限期,所以我们可以假设在rcu_read_lock()
里面做是多余的local_bh_disable()
。确实:在早期的内核中,我们可以看到它local_bh_disable()
用于 RCU,rcu_dereference()
随后在例如dev_queue_xmit
-function 内部被调用。后来local_bh_disable()
被替换为rcu_read_lock_bh()
,最终变得比调用更复杂一些local_bh_disable()
。现在看起来像这样:
还有足够多的文章描述 RCU API。在这里我们可以看到:
您是否需要将 NMI 处理程序、hardirq 处理程序和禁用抢占的代码段(无论是通过 preempt_disable()、local_irq_save()、local_bh_disable() 还是其他机制)视为显式 RCU 读取器?如果是这样,RCU-sched 是唯一适合您的选择。
这告诉我们在这种情况下使用RCU Sched API,所以rcu_dereference_sched()
应该有所帮助。从这个综合表中我们可以意识到rcu_dereference()
应该只在rcu_read_lock
/ rcu_read_unlock
-markers 内部使用。
但是,还不够清楚。我可以在/ -markersrcu_dereference()
内部使用(在现代内核的情况下)而不担心会出现任何问题吗?local_bh_disable
local_bh_enable
PS 在我的情况下,我无法更改local_bh_disable
调用 eg的代码rcu_read_lock_bh
,因此我的代码在 bh 已禁用的情况下运行。还使用了通常的 RCU API。因此,它充满了rcu_read_lock
嵌套在local_bh_disable
.
kubernetes - Kubernetes 1.11 优先级和抢占不起作用
我按照以下说明进行操作,Kubernetes 1.11
但优先级和抢占不起作用。
我创建了 2 个 pod 一个high-priority
(有 100000 个),另一个lower priority
(0 个)。我运行低优先级的 pod 来占用单个节点的所有资源。当低优先级的 Pod 运行时,我提交了高优先级的 Pod,但调度程序并没有抢占低优先级的 Pod。
我尝试了另一个实验来检查优先级是否适用于对 pod 进行排队。但是,它不会根据优先级值对队列中的 pod 进行排序。
有没有人有同样的问题?我需要做任何其他事情来启用此功能Kubernetes 1.11
吗?
timer - 为什么不调用hrtick定时器回调函数?
在 kernel/sched/core.c 中,init_rq_hrtick(rq) 由 sched_init() 调用。init_rq_hrtick(rq) 初始化 hrtick_timer 并指定到期时调用的回调函数。
我设置 CONFIG_SCHED_HRTICK=y。
但是由 init_rq_hrtick() 设置为回调函数的 hrtick 函数不会定期调用。你能告诉我为什么不调用回调函数吗?
我的内核版本是 4.13.16
operating-system - Lottery Scheduling - preemptive - How to manipulate the tickets after a process is choosen?
Assume there are 2 processes with tickets A:75 and B:25. Now if lottery results in ticket number = 66, that means we run A. This is okay for non-preemptive kernels because A will run until A is complete and then will not participate in the lottery. But if Kernel is preemptive and A is selected,then wouldn't we need to decrease the tickets A has.
linux-kernel - 可重入内核和抢占内核之间有什么关系?
可重入内核和抢占内核之间有什么关系?
如果内核是抢占式的,它必须是可重入的吗?(我猜是)
如果内核是可重入的,它必须是抢占式的吗?(我不知道)
我已阅读https://stackoverflow.com/a/1163946,但不确定这两个概念之间是否存在关系。
我想我的问题一般是关于操作系统概念的。但如果重要的话,我主要对 Linux 内核感兴趣,并且在阅读理解 Linux 内核时遇到了这两个概念。
multithreading - 当用户进程正在执行时,操作系统何时获得对 CPU 的控制权
我目前正在研究操作系统并且有一些我不完全理解的东西。在具有抢占的时间共享系统中,进程总是交换的。但是,如果用户进程正在其中一个 CPU 上执行,则不可能有其他进程也在同一 CPU 上执行。如果所有 CPU 都被用户进程占用,操作系统进程不能同时运行,那么是什么原因导致超时抢占(CPU 定时器?)?
此外,让我感到困惑的是内核和用户线程的概念。我读过内核线程是计划在 CPU 上执行的线程。此外,用户线程通过某种顺序(一对多、多对一、多对多)映射到内核线程。我相信这与上述问题有关,但我无法从我拥有的文档中弄清楚。
谢谢你。干杯!