Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android &引用;RT节流已激活“+;淹没UDP数据包时出现内核死机_Android_Linux_Networking_Udp_Broadcast - Fatal编程技术网

Android &引用;RT节流已激活“+;淹没UDP数据包时出现内核死机

Android &引用;RT节流已激活“+;淹没UDP数据包时出现内核死机,android,linux,networking,udp,broadcast,Android,Linux,Networking,Udp,Broadcast,我有一个Android应用程序,它使用UDP广播(实际上是多播)在设备之间传递消息。在我的压力测试中,我有一个设置,我有多个设备通过UDP相互发送和接收响应。最多每台设备每5毫秒发送一个数据报数据包。因为我有5台设备发送数据包,这意味着一台设备可以每1ms接收一次数据包 问题是这会导致我的设备重新启动,通常在启动测试后的10秒内。通常,测试中的5台设备中有1-3台会重新启动 [ 131.986546] sched: RT throttling activated for rt_rq fffff

我有一个Android应用程序,它使用UDP广播(实际上是多播)在设备之间传递消息。在我的压力测试中,我有一个设置,我有多个设备通过UDP相互发送和接收响应。最多每台设备每5毫秒发送一个数据报数据包。因为我有5台设备发送数据包,这意味着一台设备可以每1ms接收一次数据包

问题是这会导致我的设备重新启动,通常在启动测试后的10秒内。通常,测试中的5台设备中有1-3台会重新启动

[  131.986546] sched: RT throttling activated for rt_rq ffffffc0ac098e50 (cpu 1)
[  131.986546] potential CPU hogs:
[  131.986546]  msm_thermal:fre (307)
[  132.000113] ------------[ cut here ]------------
[  132.004692] kernel BUG at XXX/kernel/kernel/sched/rt.c:866!
[  132.013583] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
[  132.019101] Modules linked in: XXX core_ctl(PO) qdrbg_module(O) qcrypto_module(O)
[  132.026953] CPU: 1 PID: 307 Comm: msm_thermal:fre Tainted: P        W  O 3.10.84-g2e3fe32-00061-gf40a46d #6
查看一个设备的内核源代码中的rt.c,它在下面的BUG()上崩溃:

我们确实在内核中启用了
CONFIG\u PANIC\u ON\u RT\u THROTTLING
。我试着简单地禁用它(FWIW Google为其设备配置的内核已禁用),系统仍然崩溃,但在其他一些点。。。由于内核日志中没有任何内容,它只是突然中断

令人惊讶的是,这种情况在5.1到8.1的不同版本的Android中发生,显然是在不同的Linux内核版本中。所有设备都运行高通公司的CPU(高通公司增加了
CONFIG\u PANIC\u ON\u RT\u THROTTLING

只是用一些常识分析一下,UDP数据包传递必须由一些RT调度器来处理。。。而事实上,系统需要节流这意味着我加载的CPU超过了它的容量。。。很难相信在现代CPU上通过发送UDP数据包就可以做到这一点(当然,这也是为什么会使内核恐慌的原因)

#ifdef CONFIG_PANIC_ON_RT_THROTTLING
    /*
     * Use pr_err() in the BUG() case since printk_sched() will
     * not get flushed and deadlock is not a concern.
     */
    pr_err("%s", buf);
    BUG();
#else
    printk_deferred("%s", buf);
#endif