Articles of smp

通过哪个指令在启动次CPU时触发次级核心

主CPU的引导是由主内核启动的。 并且在主CPU上完成了一些工作,并且在辅助CPU上完成了一些工作以完成cpu_up的热插拔操作。 我试图find在主CPU上执行的确切指令,触发辅助CPU启动,并进一步检查pen_releasevariables的值。 您能否介绍启动辅助CPU的过程,以及启用了SMP的Linux内核pen_release global的使用。

在linux启动cpus时使用pen_release的基本概念是什么?

在linux内核smp中,使用pen_release标识符来启动第二个cpus,我也发现它在其他地方也被使用。 我已经检查了它在sysdump中的值,也试图用lauterbach设置来理解它,但不能得到使用这个的基本概念。 据我所知,它是一种锁,用来把辅助CPU放在一个循环中,直到我们从主CPU释放笔。 我试图通过各种方法来证实这种理解,但是却没有太多的办法。 任何人都可以详细解释这个吗?

Linux中的处理器间通信的最佳方式是什么?

我有两个CPU在芯片上,他们有一个共享内存。 这不是一个SMP体系结构。 芯片上只有两个CPU共享内存。 第一个CPU上有一个类Unix操作系统,第二个CPU上有一个Linux操作系统。 第一个CPU做一些工作,这个工作的结果是一些数据。 第一个CPU完成工作后,应该向另一个CPU说,工作完成,第二个CPU必须处理这些数据。 处理处理器间通信的方式是什么? 我应该用什么algorithm来做到这一点? 任何参考文章关于它将不胜感激。

如何使用linux内核中的内存屏障

内核源文件/ memory-barriers.txt中有一个例子,如下所示: CPU 1 CPU 2 ======================= ======================= { B = 7; X = 9; Y = 8; C = &Y } STORE A = 1 STORE B = 2 <write barrier> STORE C = &B LOAD X STORE D = 4 LOAD C (gets &B) LOAD *C (reads B) 在没有干预的情况下,CPU 2可以以某种有效的随机顺序感知CPU 1上的事件,而不pipeCPU 1发出写入屏障: +——-+ […]

SMP系统中的linux内核是否可以保证为了顺序从networking中读取UDP数据包?

在我正在进行的项目中,当我们从networking读取UDPstream时,在某些情况下,SMP系统会看到无序的问题。 我们可以看到它通过嗅探连接在发送者和接收者之间的集线器从networking到达。 然而,有时它从sockets读取时出现乱序。 在这种情况下UDP数据包是否有保证,或者应用程序是否实现了重新sorting缓冲区? 我们不在这里设置CPU的亲和力,我怀疑这可能会有帮助,但理想情况下,我希望所有的CPU / hw线程来处理networkingstream量。

Windows上的引脚处理器CPU隔离

在我主要工作的Linux中,我们使用了一种称为CPU隔离的技术,它有效地将进程locking到处理器上,并且还阻止处理器运行其他任何操作。 我们的内核人员做了一些处理中断的魔法。 在Windows中,我发现的最接近的东西是亲和力概念,它似乎将进程/线程绑定到处理器。 但不能保证处理器只运行该进程/线程,这意味着仍然可能存在上下文切换和其他抖动。 有没有办法让一个CPU在Windows上隔离半确定性的运行时间?

____cacheline_aligned_in_smp用于linux中的结构

为什么在Linux中,许多结构使用____cacheline_aligned_in_smpmacros? 这是否有助于在访问结构时提高性能? 如果是,那么如何?

我怎么知道一个进程正在运行的核心?

我目前正在开发一个关于在linux环境下将进程设置为一个核心的项目。 我使用sched_setaffinity来完成这项工作,我想知道是否有一些由linux提供的函数来获取进程运行的核心。 我使用顶级命令,并发现它可以得到这个信息使用j选项。 所以我相信有一些方法可以在用户空间获得这个信息。

Linux内核:自旋锁SMP:为​​什么在spin_lock_irq SMP版本中有一个preempt_disable()?

linux内核的原始代码是: static inline void __raw_spin_lock_irq(raw_spinlock_t *lock) { local_irq_disable(); preempt_disable(); spin_acquire(&lock->dep_map, 0, 0, _RET_IP_); LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock); } 我认为没有执行path可以抢占本地IRQ禁用后的当前path。 由于所有常见的硬中断禁止,不应该发生softirq,也没有打勾时间表轮。 我认为目前的道路是安全的。 那么为什么有一个preempt_disable()? 谢谢。

Linux找出超线程的核心ID

我今天上午花在了解如何确定哪个处理器ID是超线程核心,但没有运气。 我希望find这些信息,并使用set_affinity()将进程绑定到超线程线程或非超线程线程来分析其性能。