- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
We are facing an issue on which we need some help.
简要说明:
We have enabled SMP in Linux 2.6.39.4 kernel and cross compiled it for PPC-476. After booting, kernel is able to map both the processors (2 cores at h/w). The problem we are facing is, while running modprobe command repeatedly, one of the cpu goes into stall state. We have tried to dump stack of all active cpus (using sysrq) while one of the cpu is in stall state. The stack dump showed both the processors were executing same process (with same PID) i.e. modprobe.
问题:1. 两个处理器是否有可能在具有相同 PID 的运动中执行相同的进程。2. 两个进程同时执行是否会引起某种竞争条件,从而导致任一 CPU 进入停顿状态。
日志==================================================
SysRq : Show backtrace of all active CPUs
CPU0:
NIP: 701786c4 LR: 701752f0 CTR: 00000004
REGS: 9fb4fdc0 TRAP: 0501 Not tainted (2.6.39.4)
MSR: 00029000 <EE,ME,CE> CR: 44002048 XER: 00000000
TASK = 8f868ae0[827] 'modprobe' THREAD: 9fb48000 CPU: 0
GPR00: 08101820 9fb4fe70 8f868ae0 22222222 0002374d 00000002 00849ffc 00000000
GPR08: a2bb3a8c 00000810 a2c2aac4 00000148 44002088
NIP [701786c4] __sw_hweight32+0x50/0x58
LR [701752f0] __bitmap_weight+0x54/0xc0
Call Trace:
[9fb4fe70] [20000000] 0x20000000 (unreliable)
[9fb4fe90] [7006b1cc] sys_init_module+0x11a8/0x1ca4
[9fb4ff40] [7000f1b8] ret_from_syscall+0x0/0x3c
--- Exception: c01 at 0x10050e38
LR = 0x100a6708
Instruction dump:
7c634838 7c004838 7c001a14 5409e13e 7c090214 3d200f0f 61290f0f 7c004838
5409c23e 7c090214 5409843e 7c090214 <5403063e> 4e800020 5460f87e 70005555
CPU1:
NIP: 700a9678 LR: 700a964c CTR: 7012b0f8
REGS: 9fb4fe30 TRAP: 0501 Not tainted (2.6.39.4)
MSR: 00029000 <EE,ME,CE> CR: 80008022 XER: 20000000
TASK = 8f868ae0[827] 'modprobe' THREAD: 9fb48000 CPU: 1
GPR00: 00000000 9fb4fee0 8f868ae0 9efb9f20 9efb9f20 9fb4fee8 1004d6d0 0002d000
GPR08: 9efb9d68 9f8eee00 9efb9f20 00000000 20002022
NIP [700a9678] do_munmap+0x114/0x314
LR [700a964c] do_munmap+0xe8/0x314
Call Trace:
[9fb4fee0] [00000014] 0x14 (unreliable)
[9fb4ff20] [700aa7c8] sys_munmap+0x44/0x74
[9fb4ff40] [7000f1b8] ret_from_syscall+0x0/0x3c
--- Exception: c01 at 0x100510a8
LR = 0x10022088
Instruction dump:
4bffe461 7c641b79 41820010 80040004 7f9d0040 419d01d4 83210008 2e190000
41920200 83d9000c 801f0074 2f800000 <419e00f8> 2f9e0000 419e00f0 801e0004
Call Trace:
[9ffaff00] [70008654] show_stack+0x6c/0x1a4 (unreliable)
[9ffaff40] [70192d30] showacpu+0x84/0xcc
[9ffaff60] [700679bc] generic_smp_call_function_single_interrupt+0x100/0x18c
[9ffaff90] [7000ff6c] call_function_single_action+0x10/0x24
[9ffaffa0] [7006f7f4] handle_irq_event_percpu+0xa0/0x21c
[9ffaffe0] [700728d8] handle_percpu_irq+0x88/0xb8
[9ffafff0] [7000e038] call_handle_irq+0x18/0x28
[9fb4fdf0] [700044b0] do_IRQ+0xe8/0x1a0
[9fb4fe20] [7000f81c] ret_from_except+0x0/0x18
--- Exception: 501 at do_munmap+0x114/0x314
LR = do_munmap+0xe8/0x314
[9fb4fee0] [00000014] 0x14 (unreliable)
[9fb4ff20] [700aa7c8] sys_munmap+0x44/0x74
[9fb4ff40] [7000f1b8] ret_from_syscall+0x0/0x3c
--- Exception: c01 at 0x100510a8
================================================================
最佳答案
你的两个问题都是错误的。两个核心不可能同时运行相同的任务。
从 OOPS/panic 跟踪中,我们可以知道 CPU 0 上的内核首先发生 panic ,然后触发 SysRq“显示所有事件 CPU 的回溯”。也就是说,CPU 0 发生 panic 时,CPU 1 工作正常,但 CPU 0 异常触发转储 CPU 1 的回溯。
现在让我们分析一下为什么CPU 0会出现panic:从回溯来看,它发生在“modprobe”期间,所以请分析您系统上的内核模块,以找到触发panic的模块。
关于linux - SMP 中的 CPU 停顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17849398/
Linux内核中的原始代码是: static inline void __raw_spin_lock_irq(raw_spinlock_t *lock) { local_irq_disable
我正在学习多线程编程;在练习互斥时,我注意到它似乎无法在我的双核笔记本电脑上正常工作。 互斥锁代码位于 http://pastebin.com/axGY5y3c 结果如下: count value:t
在多种语言(主要是 D 和 Java/Jython)中,我注意到由于内存管理瓶颈,没有明显同步瓶颈的并行程序通常不能很好地扩展到 4 个或更多内核。我知道线程本地分配器缓解了这个问题,但大多数垃圾收集
软件是否需要做一些事情来确保SMP环境的一致性,如果硬件无法解决,有人可以告诉我在linux内核编程中我们可以使用什么方法或API吗?谢谢!!! 最佳答案 http://pages.cs.wisc.e
在 SMP(对称多处理器/多核)机器上如何处理中断?是否只有一个或多个内存管理单元? 假设两个线程,A 和 B 运行在不同的内核上(同时)触及页表中不存在的内存页,在这种情况下将出现页面错误,并从中引
我想知道如何检查我正在运行的机器,内核是否配置为 SMP?当然,我可以查看内核.config文件并可以搜索它。但是,问题是假设我没有源代码,我将如何检查 SMP 配置?有没有proc文件来检查它? 下
Rabbitmq beam.smp 进程无故占用了大部分内存 RabbitMQ 版本:3.7二郎 22 我没有任何特殊配置或任何东西 除了 Rabbitmq,我不使用 celery 或任何东西。 我搜
已通读 Understanding the Linux kernel (Bovet & Cesati),内核同步一章指出自旋锁获取代码归结为: 1: lock: btsl $0, slp
中断是否分配给固定的 CPU(总是由同一个 CPU 处理)? 将我的问题放在上下文中: 来自: http://msdn.microsoft.com/en-us/library/ms795060.asp
在单核 CPU 上,每个进程都在操作系统中运行,CPU 从一个进程跳转到另一个进程以充分利用自身。一个进程可以有多个线程,在这种情况下,CPU 在各自的进程上运行时会通过这些线程运行。 现在,在多核
在mutex的内核实现中,thread owner字段只有在SMP构建时才存在。我可以理解,在良好且干净的代码下,线程只会在获取成功时调用释放,因此我们可以通过不跟踪线程来节省一些缓存和 cpu 周期
我们在以下主机上运行 Erlang 14B03: HP Proliant G6 服务器,有 2 个 Intel 处理器,每个处理器有 2.4GHz 速度,8MB 缓存,每个处理器有 4 个内核。服务器
据说 Linux 内核是 SMP。据说进程和内核线程应该跨处理器分布。 是否所有 Linux 发行版(如 fedora13、ubuntu 10.04 Lucid)默认都启用 SMP Linux? 在
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
如果我们在 SMP 机器上的中断处理程序中休眠会发生什么, 我写了一个示例 keyboard driver并在中断处理程序上添加 sleep #include #include #include
SMP Linux 内核中有类似 pthread_barrier 的东西吗? 当内核同时在 2 个或更多具有相同结构的 CPU 上工作时,屏障(如 pthread_barrier)会很有用。它会阻止所
我在 linux 系统中开发了一个 C 应用程序,其中有 12 个 posix 线程。它是一个多核系统。阅读后我发现内核只知道我的进程,它不会知道线程(posix 库会处理)。在这种情况下,我的 12
我想在我的虚拟机系统上对中断 (irq 75) 进行负载平衡。它有 64 位 redhat 5.8,内核 2.6.18。虚拟机中有 8 个 CPU。 当我运行时: cat /proc/interrup
We are facing an issue on which we need some help. 简要说明: We have enabled SMP in Linux 2.
我有一个关于 Erlang 的问题。 我如何知道 Erlang Beam 正在哪个核心上运行? 或者如果您提供 pid,是否有任何 Linux 命令可以告诉核心进程正在运行的位置? top 可以工作吗
我是一名优秀的程序员,十分优秀!