草庐IT

multicore

全部标签

linux - 在多核机器 Linux OS 中,当进程调度程序将一个进程迁移到另一个 cpu 时

在我的程序中,rss为65G,调用fork时,sys_clone->dup_mm->copy_page_range会耗费2秒以上。在这种情况下,一个cpu在执行fork时会100%sys,同时一个线程在fork完成之前无法获得cpu时间。机器有16个CPU,其他CPU空闲。所以我的问题是一个cpu正忙于fork,为什么调度程序不将等待这个cpu的进程迁移到其他空闲cpu?一般来说,调度程序何时以及如何在cpus之间迁移进程?我搜索此站点,现有线程无法回答我的问题。HowLinuxschedulerschedulesprocessesonmulti-coreprocessors?Cana

linux - 多核系统上的 Netfilter Hook

我们编写了使用netfilter钩子(Hook)拦截IP数据包的LKM。问题在于,在1Gb/s的有效负载上,我们看到Hook通过软irq仅加载一个CPU核心。其他15个核心处于空闲状态。所以我得出结论,hooks不是多线程。所以我的问题是:有什么方法可以在多个内核上分配Hook处理? 最佳答案 问题不是来自netfilter,而是您的内核管理中断的方式。默认情况下,旧版本的APIC将所有中断传递给CPU0。您可以检查这是否是您的问题:cat/proc/interrupts您可以查看NIC的中断(并记住netfilterHook是通过

linux - 多核系统上的 Netfilter Hook

我们编写了使用netfilter钩子(Hook)拦截IP数据包的LKM。问题在于,在1Gb/s的有效负载上,我们看到Hook通过软irq仅加载一个CPU核心。其他15个核心处于空闲状态。所以我得出结论,hooks不是多线程。所以我的问题是:有什么方法可以在多个内核上分配Hook处理? 最佳答案 问题不是来自netfilter,而是您的内核管理中断的方式。默认情况下,旧版本的APIC将所有中断传递给CPU0。您可以检查这是否是您的问题:cat/proc/interrupts您可以查看NIC的中断(并记住netfilterHook是通过

linux - 为什么高 IO 速率操作会减慢 Linux 上的一切?

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion这可能有点OT,但我想知道为什么有一个大量使用IO的进程(比如从同一磁盘上的一个位置到另一个位置的cp大文件)会减慢一切,即使是主要受CPU限制的进程。我注意到在我大量使用的两个操作系统上(macosx和linux)。特别是,我想知道为什么多核在这里没有真正帮助:它是商品硬件(磁盘Controller等)的硬件限制,操作系统限制,还是存在一些固有的难以分配正确的东西资源(调度)?

linux - 为什么高 IO 速率操作会减慢 Linux 上的一切?

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion这可能有点OT,但我想知道为什么有一个大量使用IO的进程(比如从同一磁盘上的一个位置到另一个位置的cp大文件)会减慢一切,即使是主要受CPU限制的进程。我注意到在我大量使用的两个操作系统上(macosx和linux)。特别是,我想知道为什么多核在这里没有真正帮助:它是商品硬件(磁盘Controller等)的硬件限制,操作系统限制,还是存在一些固有的难以分配正确的东西资源(调度)?

linux - 让 GNU Octave 与多核处理器一起工作。 (多线程)

我希望能够使用gnuoctave对多线程进行编程,这样它将利用多个处理器。我在Fedora17Linux上安装了GNUOctave并执行了以下操作:yuminstalloctave在我的电脑上安装了最新版本的Octave,3.6.2。它工作得很好,但是当你将两个巨大的矩阵相乘时,它会使Octave使用的一个CPU陷入困境。如果矩阵乘法利用所有内核,那就太好了,因为在这种情况下,CPU显然是瓶颈。octave能否充分利用多核处理器,多线程运行?是否有用于此的库或编译时标志? 最佳答案 解决方案Octave本身是一个运行在一个内核上的单

linux - 让 GNU Octave 与多核处理器一起工作。 (多线程)

我希望能够使用gnuoctave对多线程进行编程,这样它将利用多个处理器。我在Fedora17Linux上安装了GNUOctave并执行了以下操作:yuminstalloctave在我的电脑上安装了最新版本的Octave,3.6.2。它工作得很好,但是当你将两个巨大的矩阵相乘时,它会使Octave使用的一个CPU陷入困境。如果矩阵乘法利用所有内核,那就太好了,因为在这种情况下,CPU显然是瓶颈。octave能否充分利用多核处理器,多线程运行?是否有用于此的库或编译时标志? 最佳答案 解决方案Octave本身是一个运行在一个内核上的单

linux - 以编程方式禁用 CPU 内核

在Linux中禁用逻辑CPU的方法是已知的,基本上是用echo0>/sys/devices/system/cpu/cpu/online.这样,您只是告诉操作系统忽略给定的()CPU。我的问题更进一步,是否可以不仅忽略它而且以编程方式物理关闭它?我希望该CPU不接收任何电源,以使其能耗为零。我知道可以从BIOS禁用内核(并非总是如此),但我想知道是否可以在某个程序中执行此操作。 最佳答案 当你做echo0>/sys/devices/system/cpu/cpu/online,接下来会发生什么取决于特定的CPU。在ARM嵌入式系统上,内

linux - 以编程方式禁用 CPU 内核

在Linux中禁用逻辑CPU的方法是已知的,基本上是用echo0>/sys/devices/system/cpu/cpu/online.这样,您只是告诉操作系统忽略给定的()CPU。我的问题更进一步,是否可以不仅忽略它而且以编程方式物理关闭它?我希望该CPU不接收任何电源,以使其能耗为零。我知道可以从BIOS禁用内核(并非总是如此),但我想知道是否可以在某个程序中执行此操作。 最佳答案 当你做echo0>/sys/devices/system/cpu/cpu/online,接下来会发生什么取决于特定的CPU。在ARM嵌入式系统上,内

linux - SMP 如何处理中断?

在SMP(对称多处理器/多核)机器上如何处理中断?是否只有一个或多个内存管理单元?假设两个线程,A和B运行在不同的内核上(同时)触及页表中不存在的内存页,在这种情况下将出现页面错误,并从中引入一个新页面内存。将发生的事件顺序是什么?如果有一个内存管理单元,页面错误转发给哪个核心?内核如何处理它?是否有多个内核实例,每个实例都运行在不同的内核上?如果是这样,它们如何同步页面错误处理等事件? 最佳答案 好吧,这取决于具体的架构,但根据我从英特尔文档中所记得的...有两个主要的中断源:内部:这些由CPU本身生成。包括故障、陷阱、软件中断等