当前位置: 首页 > news >正文

网站排名方法找合作项目app平台

网站排名方法,找合作项目app平台,一个人做导购网站,做直播网站软件有哪些软件下载说明 理论上:不管IC是单核还是多核,只要watchdog有被循环feed,就不会触发超时重启,因此watchdog在SMP机制下的多核环境显得比较宽松,只要任意核存活(喂狗)就不会重启设备。 实际情况 有客户反…

说明

  • 理论上:不管IC是单核还是多核,只要watchdog有被循环feed,就不会触发超时重启,因此watchdog在SMP机制下的多核环境显得比较宽松,只要任意核存活(喂狗)就不会重启设备。

实际情况

  • 有客户反馈,多核环境下(SMP机制管理)有核hang住了,但是设备没有重启。
  • 在SMP机制管理的8核arm平台上实测现象:
  1. 有核crash(特意使核上跑的程序crash),SMP能检测到,并且所有核都会被stop,watchdog能重启设备。
  2. 有核hang住(特意使核上跑的程序hang住),设备会非常卡,smp机制中的调度会每隔一段时间打印一次timeout,但是由于主核正常,喂狗正常,不会触发watchdog重启系统,如下:
[  433.562934] rcu: INFO: rcu_sched detected stalls on CPUs/tasks:
[  433.568883] rcu: 	1-...0: (16 ticks this GP) idle=e3a/0/0x3 softirq=98/98 fqs=10498 
[  433.576660] 	(detected by 0, t=21007 jiffies, g=-935, q=16)
[  433.582255] Task dump for CPU 1:
[  433.585495] task:swapper/1       state:R  running task     stack:15152 pid:    0 ppid:     1 flags:0x0000000a
[  433.595460] Call trace:
[  433.597917]  __switch_to+0xb8/0xe8
[  433.601332]  0xffffff8100130c00
  • 根据一些测试现象推测:有核卡住,设备非常卡是因为smp调度时,调度过程是阻塞的(但是有超时),smp调度过程就会卡住很久,只有超时后,其它进程才能得到调度,将触发smp调度的操作放到wdt驱动的喂狗函数中,这样就会触发watchdog重启系统,smp调度阻塞住喂狗了。

结论

  • IC生产,无法确保每个核都是一样稳定,如果多核IC中有少数核稳定性稍微差点,可能会出现部分核hang住,因此需要watchdog来检测这种情况并重启。

实现

  • 同构多核使用SMP机制管理下,kenerl启动之前只有主核在运行,kernel启动过程中再由kernel bringup其它核,因此kernel运行前的固件(uboot等),不需要做检测。

SMP机制下多核确活机制(严格模式)

  • 在多核SMP管理环境下,确认多核是否alive,只要任意核hang住,重启设备。

思路

  • 通过SMP机制发送核间中断给每个核,每个核收到中断后,将一个全局CPU 位图变量打上标志,表示核正在运行。
  • 发送核间中断,让每个核执行同一个函数:
// 每个核都会运行该函数
static void cpu_alive(void *passed_regs)
{...
}smp_call_function(cpu_alive, NULL, 0);
smp_wmb();
  • 第一版做法:每次喂狗前,发送SMP调度请求,等待所有核运行完成。
static cpumask_t cpus_alive = CPU_MASK_NONE;#ifdef CONFIG_SMP
static void cpu_alive(void *passed_regs)
{int cpu = smp_processor_id();pr_debug("cpu[%d] setmask \n", cpu);cpumask_set_cpu(cpu, &cpus_alive);
}
#endif// watchdog驱动喂狗函数
static int dw_wdt_ping(struct watchdog_device *wdd)
{       struct dw_wdt *dw_wdt = to_dw_wdt(wdd);#ifdef CONFIG_SMPunsigned int msecs;unsigned int ncpus;cpus_alive = CPU_MASK_NONE;ncpus = num_online_cpus() - 1;pr_debug("Sending IPI to other cpus...\n");smp_call_function(cpu_alive, NULL, 0);smp_wmb();// 阻塞1s 等待所有核执行完成msecs = 1000; // 1swhile ((cpumask_weight(&cpus_alive) < ncpus) && (--msecs > 0)) {cpu_relax();mdelay(1);}if (cpumask_weight(&cpus_alive) >= ncpus)
#endifwritel(WDOG_COUNTER_RESTART_KICK_VALUE, dw_wdt->regs+ WDOG_COUNTER_RESTART_REG_OFFSET);return 0;
}
  • 问题
  1. 阻塞1s,等待所有核执行完成,如果存在核执行超时了,会导致误判。
  2. 如果将阻塞时间拉长,喂狗时间和wdt timeout时间需要空出该时间。
  • 新版本:每次喂狗前,检查上一次喂狗后发送SMP调度请求后的CPU 位图数据,喂狗,再发送一次SMP调度请求。
static cpumask_t cpus_alive = CPU_MASK_NONE;#ifdef CONFIG_SMP
static void cpu_alive(void *passed_regs)
{       int cpu = smp_processor_id();pr_debug("cpu[%d] setmask \n", cpu);cpumask_set_cpu(cpu, &cpus_alive);
}
#endifstatic int dw_wdt_ping(struct watchdog_device *wdd)
{struct dw_wdt *dw_wdt = to_dw_wdt(wdd);static int isFirst = 1;#ifdef CONFIG_SMPunsigned int ncpus;ncpus = num_online_cpus() - 1;if ((isFirst == 1) || cpumask_weight(&cpus_alive) >= ncpus) {
#endifwritel(WDOG_COUNTER_RESTART_KICK_VALUE, dw_wdt->regs +WDOG_COUNTER_RESTART_REG_OFFSET);#ifdef CONFIG_SMPisFirst = 0;cpus_alive = CPU_MASK_NONE;smp_call_function(cpu_alive, NULL, 0);smp_wmb();}
#endifreturn 0;
}
  • 好处:等待所有核执行SMP请求和间隔喂狗并行起来了,不必像串行一样,多花一个等待时间。
http://www.ds6.com.cn/news/16159.html

相关文章:

  • 自己做视频网站 在优酷推广注册网址
  • 山东省建设工程注册中心网站查关键词的排名工具
  • 深圳公司免费网站建设怎么免费建公司网站
  • 网站框架方案在线培训系统平台
  • 郑州网站推广公司信息微信公众号推广网站
  • 武汉做网站公司推荐网络营销发展现状与趋势
  • 网站建设与运营的公司什么平台发广告最有效
  • 图片怎么上传到wordpress做排名优化
  • wordpress文章显示图片成都网站快速排名优化
  • 360上做网站辽宁网站seo
  • 杨凌做网站的公司上海网络营销推广外包
  • 手机网站设置在哪里找互联网舆情监控系统
  • 典当行网站模板百度识图在线识图
  • 好的做详情页的网站有哪些线上营销活动方案
  • 鞍山网站制作推广 今日头条
  • 网页制作与网站建设实战大全 pdf下载谷歌关键词工具
  • 论坛备案网站名称seo咨询推广找推推蛙
  • 广东高端网站建设友情链接交换形式
  • 自适应网站cmsseo工作流程
  • 做网站首页看不到图片自己如何免费做网站
  • 徐州睢宁建设网站江西省水文监测中心
  • 青浦网站制作公司网络营销都有哪些形式
  • 武汉疫情最新通报优化大师怎么卸载
  • ppt做杂志模板下载网站有哪些2023年8月份新冠
  • 微信公众号对接网站做本地免费发布信息网站
  • 优惠网站怎么做百度搜索热词排行榜
  • 免费建设展示网站宁波seo服务快速推广
  • 重庆媒体网站建设单价seo外包靠谱
  • 怎么做网盘搜索引擎网站网推是什么意思
  • 福州专业网站制作设计湘潭网站seo