草庐IT

rcu_sched

全部标签

linux - 是否有必要在 softirq 上下文中调用 rcu_read_lock

rcu_read_lock的实现是disablepreempt和barrier。软中断上下文不会被抢占。那么是否有必要在softirq上下文中调用rcu_read_lock。屏障重要吗? 最佳答案 是的,有必要使用rcu_read_lock访问受rcu保护的指针,即使在softirq上下文中也是如此。正如您所指出的,rcu_read_lock和softirqs的一些实现(例如:TINY_RCU)使得它没有损坏的风险,即使您不使用rcu_read_lock。但是,这不是rcuapi的保证,只是因为具体实现的“hack”。这个hack可

linux - 是否有必要在 softirq 上下文中调用 rcu_read_lock

rcu_read_lock的实现是disablepreempt和barrier。软中断上下文不会被抢占。那么是否有必要在softirq上下文中调用rcu_read_lock。屏障重要吗? 最佳答案 是的,有必要使用rcu_read_lock访问受rcu保护的指针,即使在softirq上下文中也是如此。正如您所指出的,rcu_read_lock和softirqs的一些实现(例如:TINY_RCU)使得它没有损坏的风险,即使您不使用rcu_read_lock。但是,这不是rcuapi的保证,只是因为具体实现的“hack”。这个hack可

linux - sched_getcpu() 在 Linux 上可靠吗?

我正在尝试调试Linux上pthreads的一些性能问题,我认为sched_getcpu()可能是在骗我。它报告每个线程的CPU不变,而分析实验似乎表明线程实际上在其生命周期内从一个内核迁移到另一个内核。我想知道sched_cpu()是否只报告线程开始运行的第一个CPU,而忽略了线程迁移?有没有其他人注意到这一点,或者看到任何证据表明sched_getcpu()的返回值可能会改变?如果它不可靠,是否有任何其他方法可以跟踪当前CPU(可能使用CPUID?)? 最佳答案 http://man7.org/linux/man-pages/m

linux - sched_getcpu() 在 Linux 上可靠吗?

我正在尝试调试Linux上pthreads的一些性能问题,我认为sched_getcpu()可能是在骗我。它报告每个线程的CPU不变,而分析实验似乎表明线程实际上在其生命周期内从一个内核迁移到另一个内核。我想知道sched_cpu()是否只报告线程开始运行的第一个CPU,而忽略了线程迁移?有没有其他人注意到这一点,或者看到任何证据表明sched_getcpu()的返回值可能会改变?如果它不可靠,是否有任何其他方法可以跟踪当前CPU(可能使用CPUID?)? 最佳答案 http://man7.org/linux/man-pages/m

c - Linux RCU 和双向链表

我正在阅读Read-copy-update(RCU).对于SMP,我不确定我是否理解正确。据我所知,RCU确保更新以原子方式执行。在单链表的例子中,很明显可以在一个操作中完成用新元素交换旧元素,因为它是通过改变指针来完成的。但是如何保证在双向链表的情况下RCU仍然是原子执行的呢?有两个指针指向给定元素(next和prev),因此该元素的每次更改都需要更改这两个指针。如何确保更改这两个指针将作为原子操作完成?在Linux中是如何完成的? 最佳答案 我在问自己同样的问题,快速搜索找到了areplytoacomment,摘自anintro

c - Linux RCU 和双向链表

我正在阅读Read-copy-update(RCU).对于SMP,我不确定我是否理解正确。据我所知,RCU确保更新以原子方式执行。在单链表的例子中,很明显可以在一个操作中完成用新元素交换旧元素,因为它是通过改变指针来完成的。但是如何保证在双向链表的情况下RCU仍然是原子执行的呢?有两个指针指向给定元素(next和prev),因此该元素的每次更改都需要更改这两个指针。如何确保更改这两个指针将作为原子操作完成?在Linux中是如何完成的? 最佳答案 我在问自己同样的问题,快速搜索找到了areplytoacomment,摘自anintro

c - Ubuntu 16.04 是否正式支持 SCHED_DEADLINE?

目前我正在运行Ubuntu16.04,Linux内核版本为4.16。我编写了一个虚拟程序,将其调度程序更改为SCHED_DEADLINE。但是当我试图编译它时,它找不到SCHED_DEADLINE所需的结构和宏的定义。大部分代码片段取自here(第24页)。下面是测试程序:#define_GNU_SOURCE#include#include#include#include#includeintmain(intargc,char*argv[]){structsched_attrattr;attr.size=sizeof(attr);attr.sched_policy=SCHED_DEAD

c - Ubuntu 16.04 是否正式支持 SCHED_DEADLINE?

目前我正在运行Ubuntu16.04,Linux内核版本为4.16。我编写了一个虚拟程序,将其调度程序更改为SCHED_DEADLINE。但是当我试图编译它时,它找不到SCHED_DEADLINE所需的结构和宏的定义。大部分代码片段取自here(第24页)。下面是测试程序:#define_GNU_SOURCE#include#include#include#include#includeintmain(intargc,char*argv[]){structsched_attrattr;attr.size=sizeof(attr);attr.sched_policy=SCHED_DEAD

linux - 无滴答内核、isolcpus、nohz_full 和 rcu_nocbs

我在grub.conf中添加了“isolcpus=3nohz_full=3rcu_nocbs=3”RedHat7.1,内核:linux3.10.0-229内核并根据http://www.breakage.org/2013/11/15/nohz_fullgodmode/我还执行以下命令:cat/sys/bus/workqueue/devices/writeback/cpumaskfecho1>/sys/bus/workqueue/devices/writeback/cpumaskcat/sys/bus/workqueue/devices/writeback/numa1echo0>/sys

linux - 无滴答内核、isolcpus、nohz_full 和 rcu_nocbs

我在grub.conf中添加了“isolcpus=3nohz_full=3rcu_nocbs=3”RedHat7.1,内核:linux3.10.0-229内核并根据http://www.breakage.org/2013/11/15/nohz_fullgodmode/我还执行以下命令:cat/sys/bus/workqueue/devices/writeback/cpumaskfecho1>/sys/bus/workqueue/devices/writeback/cpumaskcat/sys/bus/workqueue/devices/writeback/numa1echo0>/sys