我的服务器有24个CPU核心,96G内存,安装了CentOS 7.2 x86_64。
用大数据集启动我的程序后,我的程序将使用大约50G的内存,Linux系统将显示高速率的系统中断,但是上下文切换速率会很低。 dstat会在500k int / s和1000k int / s之间显示。 CPU使用率将接近100%,约40%,我们60%。
如果数据集小,程序将使用大约5G的内存,一切都会好的,CPU使用率100%,大约99%的我们,1%的sy。 这是预期的。
该程序是由我自己写的,这是一个multithreading程序。 它不做任何networkingIO,很less有磁盘IO,主要是内存操作和算术。 无论数据集大小如何,线程模型和algorithm都是相同的。
我的问题是,我怎样才能find我的程序使用哪些中断(并尽可能提高性能,摆脱它们)?
我假设你没有24C CPU的单路系统。 所以这可能是2×12C的NUMA系统。 在这种情况下,我build议确保程序只使用一个numa节点(通常是套接字),它是RAM的本地一半。
当你使用50G的时候,这意味着numa locality不能保证,因为它超过了一半的内存。
为了检查实际状态,使用numastat。 如果您在RHEL上,则可以使用numad自动处理内存位置。 或者你可以使用numactl –hardware会给你关于硬件NUMA节点的概述。 有很好的例子,
http://fibrevillage.com/sysadmin/534-numactl-installation-and-examples
这样你可以locking你想要的CPU上的程序。
我build议检查一下你是否运行了irqbalance守护进程,否则你可能会有一个内核超负荷中断。
在Linux上: watch cat /proc/interrupts将显示每个中断和CPU的中断调用的数量。 我想你的情况你会看到LOC(本地计时器)和RES(重新计划)。