问题标签 [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.

0 投票
1 回答
497 浏览

linux - 为什么 kprobes 禁用抢占,什么时候可以安全地重新启用它?

根据文档,kprobes 禁用抢占:

探测处理程序在禁用抢占的情况下运行。根据架构和优化状态,处理程序也可以在禁用中断的情况下运行(例如,在 x86/x86-64 上,kretprobe 处理程序和优化的 kprobe 处理程序在没有中断禁用的情况下运行)。

提交 9a09f261a中,我们可以清楚地看到优化的 kprobe 用于在启用抢占的情况下运行。

为什么会这样?我将 kprobes 理解为在内核中的特定地址注入一些代码的一种方式,并且理解任何代码都应该没问题。

  • 是什么让 kprobes 如此特别以至于必须禁用抢占?
  • 在什么情况下可以重新启用抢占?
0 投票
1 回答
385 浏览

python - 如何阻止 Pepper 机器人抢占其平板电脑?

我正在尝试创建一个程序,其中一部分将使用 naoqi Python SDK 从我的 PC 网络摄像头将实时视频以帧(或换句话说图像)传输到 Pepper 的平板电脑。在机器人一侧会有一个程序使用 ALTabletService 的 showWebview 函数将图像显示为 html 网页。但是在这个过程开始后,它只进行了几秒钟,然后屏幕返回到它的主页。我猜机器人抢占了我的程序。但这不会发生在 playVideo 函数中。有没有办法克服这个问题?

PC端:

辣椒面:

0 投票
2 回答
567 浏览

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

0 投票
1 回答
542 浏览

scheduling - 无限循环任务的优先级抢占式调度

在 Google 和 Stackoverflow 上有很多关于优先级抢占式调度的材料,但我仍然对优先级抢占式调度内核中无限循环任务的调度感到困惑。让我们考虑以下情况:

一个 RTOS 启动两个任务T1,并分别T2具有优先级50100。这两个任务看起来像:

据我了解,内核将T2因其较高的优先级而调度,并T1因其较低的优先级而暂停。现在因为T2是一个无限循环,它永远不会放弃 CPU,T1直到其他一些高优先级任务抢占T2

但是,我的理解似乎不正确,因为我已经在 RTOS 中测试了上述案例,并且我在两个任务打印的控制台上都得到了输出。

有人可以评论我对此事的理解以及在上述情况下 RTOS 的实际行为吗?

0 投票
1 回答
390 浏览

c - 在 local_bh_disable()/local_bh_enable() 中使用 rcu_dereference() 是否安全?

-functionlocal_bh_disable改变每个 cpu(在 x86 和最近的内核的情况下)__preempt_countcurrent_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_disablelocal_bh_enable

PS 在我的情况下,我无法更改local_bh_disable调用 eg的代码rcu_read_lock_bh,因此我的代码在 bh 已禁用的情况下运行。还使用了通常的 RCU API。因此,它充满了rcu_read_lock嵌套在local_bh_disable.

0 投票
1 回答
450 浏览

kubernetes - Kubernetes 1.11 优先级和抢占不起作用

我按照以下说明进行操作,Kubernetes 1.11但优先级和抢占不起作用。

https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#how-to-use-priority-and-preemption

我创建了 2 个 pod 一个high-priority(有 100000 个),另一个lower priority(0 个)。我运行低优先级的 pod 来占用单个节点的所有资源。当低优先级的 Pod 运行时,我提交了高优先级的 Pod,但调度程序并没有抢占低优先级的 Pod。

我尝试了另一个实验来检查优先级是否适用于对 pod 进行排队。但是,它不会根据优先级值对队列中的 pod 进行排序。

有没有人有同样的问题?我需要做任何其他事情来启用此功能Kubernetes 1.11吗?

0 投票
0 回答
208 浏览

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

0 投票
1 回答
209 浏览

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.

0 投票
1 回答
648 浏览

linux-kernel - 可重入内核和抢占内核之间有什么关系?

可重入内核和抢占内核之间有什么关系?

如果内核是抢占式的,它必须是可重入的吗?(我猜是)

如果内核是可重入的,它必须是抢占式的吗?(我不知道)

我已阅读https://stackoverflow.com/a/1163946,但不确定这两个概念之间是否存在关系。

我想我的问题一般是关于操作系统概念的。但如果重要的话,我主要对 Linux 内核感兴趣,并且在阅读理解 Linux 内核时遇到了这两个概念。

0 投票
1 回答
434 浏览

multithreading - 当用户进程正在执行时,操作系统何时获得对 CPU 的控制权

我目前正在研究操作系统并且有一些我不完全理解的东西。在具有抢占的时间共享系统中,进程总是交换的。但是,如果用户进程正在其中一个 CPU 上执行,则不可能有其他进程也在同一 CPU 上执行。如果所有 CPU 都被用户进程占用,操作系统进程不能同时运行,那么是什么原因导致超时抢占(CPU 定时器?)?

此外,让我感到困惑的是内核和用户线程的概念。我读过内核线程是计划在 CPU 上执行的线程。此外,用户线程通过某种顺序(一对多、多对一、多对多)映射到内核线程。我相信这与上述问题有关,但我无法从我拥有的文档中弄清楚。

谢谢你。干杯!