|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。以上是我学习Linux的心得体会,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
1)net_ratelimit()用于回护内核收集调试信息的打印,当它前往(TRUE)时则能够打印调试信息,前往零则克制信息打印.它的特征为当"极快地"挪用net_ratelimit()时,它最多只同意一连打印前10条信息,后继信息每隔5秒同意打印一次.如许可避免打击者使内核不休发生调试信息来使体系过载的回绝服务打击.2)net_ratelimit()界说了一个工夫计数器变量(toks),它跟着体系时钟计数线性增加,但不超时50秒时钟计数(net_msg_burst).当计时器的值年夜于或即是5秒时钟计数(net_msg_cost)时,则同意打印信息.每同意打印一条信息,计时器就减往5秒计数,当计时器的值小于5秒时,就不同意打印信息了.;net/core/utils.c:
intnet_msg_cost=5*HZ;/*在堵塞时,每条收集动静纪录所距离的工夫*/
intnet_msg_burst=10*5*HZ;/*一连纪录收集突发动静的距离(最多一连纪录10条动静)*/
/*
*Thisenforcesaratelimit:notmorethanonekernelmessage
*every5secstomakeadenial-of-serviceattackimpossible.
*
*Allwarningprintk()sshouldbeguardedbythisfunction.
*/
intnet_ratelimit(void)
{
staticspinlock_tratelimit_lock=SPIN_LOCK_UNLOCKED;
staticunsignedlongtoks=10*5*HZ;/*50秒量程的计时器,每打印一条动静,计时器减5秒工夫*/
staticunsignedlonglast_msg;/*上一次挪用net_ratelimit()的时戳*/
staticintmissed;/*两次net_ratelimit()挪用之间所抛弃的信息数目*/
unsignedlongflags;
unsignedlongnow=jiffies;/*取以后时戳*/
spin_lock_irqsave(&ratelimit_lock,flags);
toks+=now-last_msg;
/*计时器加上两次net_ratelimit()挪用的工夫差,体现为计不时间的线性增加*/
last_msg=now;
if(toks>net_msg_burst)/*计时器积累工夫超时50秒时*/
toks=net_msg_burst;/*设置计时下限*/
if(toks>=net_msg_cost){/*当计时年夜于或即是5秒时能够打印信息*/
intlost=missed;
missed=0;
toks-=net_msg_cost;/*减往5秒工夫*/
spin_unlock_irqrestore(&ratelimit_lock,flags);
if(lost)
printk(KERN_WARNING"NET:%dmessagessuppressed.
",lost);
return1;
}
missed++;
spin_unlock_irqrestore(&ratelimit_lock,flags);
return0;
}
/*linux2.6内核间接挪用__printk_ratelimit()*/
intnet_ratelimit(void)
{
return__printk_ratelimit(net_msg_cost,net_msg_burst);
}
kernel/printk.c
/*
*printkratelimiting,liftedfromthenetworkingsubsystem.
*
*Thisenforcesaratelimit:notmorethanonekernelmessage
*everyprintk_ratelimit_jiffiestomakeadenial-of-service
*attackimpossible.
*/
int__printk_ratelimit(intratelimit_jiffies,intratelimit_burst)
{
staticDEFINE_SPINLOCK(ratelimit_lock);
staticunsignedlongtoks=10*5*HZ;
staticunsignedlonglast_msg;
staticintmissed;
unsignedlongflags;
unsignedlongnow=jiffies;
spin_lock_irqsave(&ratelimit_lock,flags);
toks+=now-last_msg;
last_msg=now;
if(toks>(ratelimit_burst*ratelimit_jiffies))
toks=ratelimit_burst*ratelimit_jiffies;
if(toks>=ratelimit_jiffies){
intlost=mis
12下一页
对于linux命令,一定要学会用man和info去查他们的解释; |
|