自适应分级轮询超时机制
自适应分级轮询超时机制
- 超时概念
- 实现原理
- 基础:
- 目标:
- 实现:
- 示例:
超时概念
程序运行中,操作后需要等待某个状态,正常返回,但实际未按预期状态出现,此时应该超时异常返回,不然会造成死循环。
实现原理
超时计数时间轴如下:
0到N为微秒计数,N到M为毫秒计数。计数从0开始,直到M表示超时异常返回,中间均为正常返回。
基础:
以vxwork系统为例,taskDelay(0)可为微秒级延时(cpu任务优先级调度);taskDelay(1)可为毫秒级延时(cpu释放一个时钟片)。
对于一个超时检测来说,超时计数粒度越小,返回越及时,保证运行速度,但会加重cpu负担;相反超时计数粒度越大,返回越慢,运行速度慢,但会释放更多的cpu。
目标:
a、保证程序正常运行时调整超时计数在微秒计数(0 -N)内,达到运行速度;
b、保证程序异常运行时调整超时计数在毫秒计数(N-M)内,达到cpu释放。
实现:
1、初始化超时M,为一个大于0的较小的值,最好按实际测试情况给定。毫秒计数(N-M)固定不变。
2、正常运行时,正常返回,若此时超时计数用到了毫秒计数(N-M),自动按步长L加到M上,如此多次调整后,超时计数最终落在微秒计数(0 -N)内。
3、异常运行时,超时返回,此时必定落在M点上,为了减小cpu的消耗,N和M同时按步长L减小,让超时计数尽可能落在N-M内。
示例:
可用在i2c、spi、eth等总线轮询等待情况。
/** Function to ensure that the previous transaction was completed before* initiating a new transaction. It can also be used in polling mode to* check status of completion of a command* 注意: 此超时机制会自动调整超时次数。* 1,超时次数过短的话会自动增加超时次数,保证读取速率。* 2,总线异常的话会调整超时次数到最小值,控制cpu占用率。*/
#define I2C_REG_R_TIMES_MIN 500
unsigned int i2c_reg_r_times = 1000;/* 测试发现大约为1200,可自动向上调整修正 */
unsigned int i2c_reg_r_times_ajust_step = 10;
static int iproc_i2c_startbusy_wait(unsigned char bus)
{unsigned int reg_val;unsigned int check_times = 0;unsigned int check_times_now = i2c_reg_r_times;/* 末尾用10ms */unsigned int check_times_10ms = check_times_now - 3;do{/* 检查ok */reg_val = iproc_i2c_reg_read(bus, CCB_SMB_MSTRCMD_REG);if(0 == (reg_val & CCB_SMB_MSTRSTARTBUSYCMD_MASK)){/* 1,用到10ms延时,说明微秒级延时不够,需增加超时次数 */if(check_times > check_times_10ms){i2c_reg_r_times += i2c_reg_r_times_ajust_step;}return 0;}/* 10ms延时 */if(check_times > check_times_10ms){taskDelay(1);}/* 微秒级延时 */else{taskDelay(0);}}while(check_times++ < check_times_now);/* 2,超时,说明总线异常,大幅减少超时次数 */if(i2c_reg_r_times > I2C_REG_R_TIMES_MIN){i2c_reg_r_times -= i2c_reg_r_times_ajust_step * 4;}return -ETIMEDOUT;
}
自适应分级轮询超时机制相关推荐
- 分库分表的事务处理机制
转载自 分库分表的事务处理机制 分布式事务 由于我们将单表的数据切片后存储在多个数据库甚至多个数据库实例中,所以依靠数据库本身的事务机制不能满足所有场景的需要.但是,我们推荐在一个数据库实例中的操作尽 ...
- Dubbo基本原理与超时机制
一. dubbo基本原理 –高性能和透明化的RPC远程服务调用方案 –SOA服务治理方案 -Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接 Dubbo缺省协议采用单一长连 ...
- dubbo的超时机制和重试机制
参考: https://www.cnblogs.com/ASPNET2008/p/7292472.html https://www.tuicool.com/articles/YfA3Ub https: ...
- TCP重传与超时机制:解锁网络性能之秘
目录标题 一.TCP重传(TCP Retransmission) 1.1 重传原理与机制(Retransmission Principles and Mechanisms) 二.TCP超时(TCP T ...
- Apollo 中的 长轮询 定时机制
今天这篇文章来介绍一下Nacos配置中心的原理之一:长轮询机制的应用 为方便理解与表达,这里把 Nacos 控制台和 Nacos 注册中心称为 Nacos 服务器(就是 web 界面那个),我们编写的 ...
- 关于Hystrix超时机制和线程状态的测试观察和个人理解
作者:未完成交响曲,资深Java工程师!目前在某一线互联网公司任职,架构师社区合伙人! 我们在使用Hystrix时,大部分情况下都是直接基于SpringCloud的相关注解来完成请求调用的.我们有个项 ...
- golang net/http 超时机制完全手册
目录 SetDeadline 服务器端超时设置 客户端超时设置 Cancel 和 Context 英文原始出处: The complete guide to Go net/http timeouts, ...
- java知识点8——垃圾回收原理和算法、通用的分代垃圾回收机制、 JVM调优和Full GC、开发中容易造成内存泄露的操作
垃圾回收原理和算法 内存管理 Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放. 对象空间的分配:使用new关键字创建对象即可 对象空间的释放:将对象赋值null即可 垃圾回 ...
- .Net Cancellable Task - APM异步超时机制扩展
概述 .NET基于委托的APM(Asynchronous Programming Model)模式通过BeginInvoke, EndInvoke, AsyncCallback,IAsyncResul ...
- 超时机制,断路器模式简介
使用Hystrix保护应用,它是一种豪猪,他身上有很多的刺,所以他能保护自己,我们知道老外的项目,他的项目名称往往取得比较有格调,比较的生动形象,所以他可以保护这样的一个组件,起名叫Hystrix,我 ...
最新文章
- php在函数使用正则表达式,php正则表达式以及正则函数的使用
- 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现(本科毕业设计)
- Win7 64位系统上配置使用32位的Eclipse
- findcontours 崩溃
- 对一致性Hash算法,Java代码实现的深入研究
- linux下iptables讲解
- 比特币将来能取代黄金,成为世界货币?
- 定了!对于本周四(7.16日)抽奖活动取消简要说明,新抽奖活动暂定下周三(7.22日)...
- css3实现头像旋转360度
- 2.2基本算法之递归和自调用函数_数据结构与算法之5——队列和栈
- Swift3.0 键盘高度监听获取
- JavaScript中关于创建对象的笔记
- Android 渗透测试学习手册 第七章 不太知名的 Android 漏洞
- 嘌呤含量高的食物大全
- 冒泡排序+查找打印——上海大学C语言考试
- 机器学习:使用梯度下降实现逻辑回归求解多元分类问题的原理
- 小米平板2可以装鸿蒙系统,小米平板2为何不能再其他软件上下应用呢
- jQuery WeUI动态获取省地市三级联动
- 15_岭回归-Ridge、岭回归API、线性回归和岭回归的对别;逻辑回归、sigmoid函数、逻辑回归公式、损失函数、逻辑回归API、逻辑回归案例、逻辑回归的优缺点、逻辑回归 VS 线性回归等
- JAVA——对当前时间进行输出