smp相关内容

什么是 TLB 击落?

什么是 SMP 中的 TLB 击落? 我无法找到有关此概念的大量信息.任何好的例子都将不胜感激. 解决方案 一个简单的例子: 系统中的所有处理器共享一些内存. 您的一个处理器限制对该共享内存页面的访问. 现在,所有处理器都必须刷新它们的 TLB,这样被允许访问该页面的处理器就不能再这样做了. 一个处理器导致 TLB 在其他处理器上刷新的操作称为 TLB 击落. ..
发布时间:2022-01-11 23:17:36 其他开发

____cacheline_aligned_in_smp 用于 Linux 内核中的结构

在Linux内核中,为什么很多结构使用____cacheline_aligned_in_smp宏?访问结构时它是否有助于提高性能?如果是,那么如何? 解决方案 任何缓存(dcache 或 icache)中的每个缓存线都是 64 字节(在 x86 中)架构.需要缓存对齐以避免缓存行的错误共享.如果缓存行在全局变量之间共享(在内核中发生得更多)如果全局变量之一被其缓存中的处理器之一更改,则它将 ..
发布时间:2022-01-04 22:46:44 其他开发

Linux内核中percpu指针是如何实现的?

在多处理器上,每个内核都可以有自己的变量.我以为它们是不同地址的不同变量,虽然它们在同一个进程中并且具有相同的名称. 但我想知道,内核是如何实现这一点的?它是否分配了一块内存来存放所有的percpu指针,并且每次将指针重定向到某个地址时使用shift什么的? 解决方案 普通全局变量不是每个 CPU.自动变量是在栈上的,不同的CPU使用不同的栈,自然得到不同的变量. 我猜你指的是 ..
发布时间:2022-01-04 22:24:24 服务器开发

python 是否有一个简单的基于进程的并行映射?

我正在为python寻找一个简单的基于进程的并行映射,即一个函数 parmap(function,[data]) 这将在不同进程的 [data] 的每个元素上运行函数(好吧,在不同的内核上,但是 AFAIK,在 python 中的不同内核上运行东西的唯一方法是启动多个解释器),并返回一个结果列表. 这样的东西存在吗?我想要一些简单,所以一个简单的模块会很好.当然,如果没有这样的东西存在, ..
发布时间:2021-12-30 21:00:55 Python

vmalloc_init() 函数中的for_each_possible_cpu 宏,代码是否只在一个cpu 中运行?还是在每个 CPU 中?

这与编程无关,但我在这里问..在 linux start_kernel() 函数中,在 mm_init() 函数中,我看到了 vmalloc_init() 函数.在函数内部,我看到这样的代码. void __init vmalloc_init(void){struct vmap_area *va;结构 vm_struct *tmp;国际我;/** 为 vmap_area 对象创建缓存.*/vma ..
发布时间:2021-06-02 20:07:38 其他开发

我如何知道进程在哪个核心上运行?

我目前正在从事一个有关在Linux环境中将进程设置为一个核心的项目.我使用sched_setaffinity来完成这项工作,并且我想知道linux是否提供了一些功能来获取进程正在哪个内核上运行.我使用top命令,发现它可以使用j选项获取此信息.因此,我敢肯定有一些方法可以在用户空间中获取此信息. 解决方案 您可能需要 sched_getcpu().如果您运行的是旧版本的glibc,则可以阅 ..
发布时间:2021-05-29 23:21:42 服务器开发

如何限制Erlang VM(BEAM)使用的核心数?

我正在一个带有2个四核Xeon E5520 2.2GHz,24.0GB RAM和Erlang R15B02(启用SMP)的节点上进行实验.我想知道是否可以限制Erlang VM使用的内核数量,以便暂时禁用某些内核并逐步增加数量,以测试可伸缩性. 我在此节点上没有 root 访问权限.所以我期望有一种方法,可以通过为 erl 指定参数或通过Erlang代码来实现. 解决方案 您可以通过 ..
发布时间:2021-05-04 20:41:10 其他开发

驱动程序将如何使用MONITOR指令(_mm_monitor内部函数)?

我正在研究 MONITOR 指令(或等效的内部函数 _mm_monitor )的用法。尽管我找到了描述它们的文献,但是我找不到任何有关如何使用它的具体示例/示例。 任何人都可以分享一个示例说明/本意的示例吗?用在司机?本质上,我想用它来监视内存范围。 解决方案 monitor 指令使用 RAX / EAX / AX 。来自英特尔的报价 监视器的状态由指令 mwait使用。 ..
发布时间:2020-10-11 00:13:30 其他开发

是否有一个简单的基于进程的python并行映射?

我正在寻找一个简单的基于进程的python并行映射,即一个函数 parmap(function,[data]) 会在不同进程上的[data]的每个元素上运行函数(嗯,在不同的内核上,但是AFAIK,在python中的不同内核上运行的唯一方法是启动多个解释器),并返回一个结果列表. 是否存在类似的东西?我想要一些简单的东西,所以一个简单的模块会很好.当然,如果不存在这样的东西,我将定 ..
发布时间:2020-05-24 20:51:41 Python

什么是TLB击落?

什么是SMP中的TLB击落? 我找不到有关此概念的太多信息.任何很好的例子将不胜感激. 解决方案 一个简单的例子: 您的系统中所有处理器共享一些内存. 您的处理器之一限制了对该共享内存页面的访问. 现在,所有处理器都必须刷新其TLB,以使被允许访问该页面的处理器不再能这样做. 一个处理器导致在其他处理器上刷新TLB的动作就是所谓的TLB击倒. ..
发布时间:2020-05-21 18:58:14 其他开发

多CPU,多核和超线程

有人可以向我推荐一些文档来说明多CPU,多核和超线程之间的区别吗?我总是对这些差异以及每种架构在不同情况下的优缺点感到困惑. 编辑:这是我在网上学习并从他人的评论中学习后的当前理解;有人可以评论一下吗? 我认为超线程是其中最差的技术,但价格便宜.其主要思想是重复寄存器,以节省上下文切换时间; 多处理器比超线程更好,但是由于不同的CPU在不同的芯片上,因此不同CPU之间的通信比多核具有 ..
发布时间:2020-05-13 02:22:31 其他开发

多核汇编语言是什么样的?

例如,曾经有段时间要编写x86汇编程序,您将获得说明“将EDX寄存器的值加载为5",“递增EDX"寄存器等说明. 对于具有4个内核(甚至更多)的现代CPU,在机器代码级别上看起来是否像有4个独立的CPU(即,是否只有4个不同的"EDX"寄存器)?如果是这样,当您说“增加EDX寄存器"时,由什么决定增加哪个CPU的EDX寄存器? x86汇编器中现在有"CPU上下文"或“线程"概念吗? 内 ..
发布时间:2020-05-13 02:22:24 其他开发

如果不同处理器中的两个进程尝试同时完全获取锁,会发生什么情况?

好吧,所以我正在阅读有关同步的内容,并且通读了各种算法,例如自旋锁,信号量和互斥锁,以避免出现竞争状况. 但是,当多个进程恰好同时访问数据时,这些算法无法防止SMP中的竞争状况. 例如,假设处理器A中的线程1运行 锁(mutex1); 提现(1000); unlock(mutex1); ,并且处理器B中的线程2运行 锁(mutex1); 押金(1000); 押金(1000); u ..
发布时间:2020-05-03 05:50:50 其他开发

NUMA和SMP上的Linux Scheduler

我想知道是否在每个处理器上运行了schedule()函数的副本,或者只是在每个处理器上运行了一个schedule(). 如果每个处理器/内核上都运行了schedule()的副本,那么如何将进程分配到特定的CPU/cpu运行队列.是负载均衡器的工作吗?是否只有一个负载均衡器在所有CPU上运行,或者使用标志/通信方法以分布式方式完成? ps-我知道调度类的工作原理,但是我很难弄清各个运行队 ..
发布时间:2020-05-02 03:42:24 其他开发

发送重新安排中断的性能事件?

当一个进程唤醒同一内核上的另一个进程时,将使用两个PID生成sched:sched_wakeup事件.这对于查找流程之间的关系非常有用. 当一个进程在另一个内核上唤醒另一个进程时,第二个内核会在任何一个不幸捕获IPI的进程上生成irq_vectors:reschedule_entry事件,然后是该受害进程的sched:sched_wakeup事件. 我找不到在唤醒的第一个内核上的原始进 ..
发布时间:2020-05-02 03:41:34 其他开发

____cacheline_aligned_in_smp用于Linux内核中的结构

在Linux内核中,为什么许多结构使用____cacheline_aligned_in_smp宏?访问结构时是否有助于提高性能?如果是,那怎么办? 解决方案 任何缓存(dcache或icache)中的每个缓存行都是64字节(在x86中)体系结构.需要进行高速缓存对齐,以避免错误共享高速缓存行.如果高速缓存行在全局变量之间共享(在内核中更多),如果全局变量之一被其高速缓存中的处理器之一更改, ..
发布时间:2020-05-02 03:29:48 其他开发

Linux找出超线程核心ID

今天上午我花了很多时间来找出如何确定哪个处理器ID是超线程内核,但是没有运气. 我希望找出这些信息,并使用set_affinity()将进程绑定到超线程线程或非超线程线程,以描述其性能. 解决方案 我发现了做我需要的简单技巧. cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list 如果第一个数字等于CP ..
发布时间:2020-05-01 10:53:48 服务器开发

如何在Linux内核中实现percpu指针?

在多处理器上,每个内核可以有自己的变量.我以为它们是在不同地址中的不同变量,尽管它们的过程相同且名称相同. 但是我想知道内核如何实现这一点?它是否分配了一块内存来存放所有的percpu指针,并且每次它通过shift或其他方式将指针重定向到某个地址时? 解决方案 常规全局变量不是每个CPU的.自动变量位于堆栈中,并且不同的CPU使用不同的堆栈,因此自然会得到单独的变量. 我猜您指 ..
发布时间:2020-05-01 09:31:03 服务器开发

如何从用户空间应用程序(Linux,C)中获取CPU内核号?

大概有一个库或简单的asm blob,可以为我获取正在执行的当前CPU的编号. 解决方案 使用sched_getcpu确定在其上运行调用线程的CPU.请参见man getcpu(系统调用)和man sched_getcpu(库包装器).但是,请注意其内容: 仅在调用时保证放置在cpu中的信息是最新的:除非已使用sched_setaffinity(2)修复了CPU关联性,否则内核可能随 ..
发布时间:2020-05-01 08:12:42 服务器开发