注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

态度决定高度

英语,沟通,rhca,管理

 
 
 

日志

 
 

printk X messages suppressed  

2010-12-30 11:37:58|  分类: linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

X为自然数

echo 0 > /proc/sys/kernel/printk_ratelimit

由于某些原因,频繁设置循环调用某个printk的语句,将会造成CPU的拥堵,如果输入终端是慢速,就会造成拥堵,我们也不可能从这种狂刷屏幕上读取到什么有效信息,基本上就看不清。内核编程提供了一下保护机制。下面是一个测试的例子:

1 for (i = 0 ; i < 1000; i ++){

2    if(printk_ratelimit()){
3        printk(KERN_DEBUG "Test for ratelimte i = %d j = %d\n",i ,++j);
4    }
5 }
6 printk(KERN_NOTICE "After Test i = %d j = %d\n",i , j);

printk_ratelimit()根据打印的频繁程度返回的一个值,根据这个值我们决定是否将debug信息打印出来。这个返回值取决于两个因素,分别定义在
/proc/sys/kernel/printk_ratelimit
/proc/sys/kernel/printk_ratelimit_burst
前者表示当这个值置为0后隔多少秒后恢复为1,即等待允许再次打印的时间(秒),后者可能和缓存队列长度有关,他表示在值为0之前,可以printk的条目数。系统缺省值为5和10,也就是在printk_ratelimit()的控制下,每秒可以有两个输出。在上面的例子,我们看到输出了10次。我想象的处理机制是,系统根据printk_ratelimit_burst的值设置一个队列长度,如果这个队列满,则值printk_ratelimit()为0,禁止新的消息加入队列,等待printk_ratelimit秒设定的时间,将 printk_ratelimit()设为1,即允许新的消息加入队列。这种方式我曾用于处理业务请求,设定允许接纳请求的频率,避免burst的出现。我猜想这里面的机制也是类似的。不管如何,这是一种看行之有效的方法。

  评论这张
 
阅读(1677)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018