当前位置: 技术问答>linux和unix
jiffies到底是多长时间?(总分值120分!!!)
来源: 互联网 发布时间:2016-11-27
本文导语: 网桥那段有一个创建fdb-entry的代码,jiffies是定时器时间。 static struct net_bridge_fdb_entry *fdb_create(struct hlist_head *head, struct net_bridge_port *source, const unsigned char *addr, int is_local) { struct...
网桥那段有一个创建fdb-entry的代码,jiffies是定时器时间。
static struct net_bridge_fdb_entry *fdb_create(struct hlist_head *head,
struct net_bridge_port *source,
const unsigned char *addr,
int is_local)
{
struct net_bridge_fdb_entry *fdb;
fdb = kmem_cache_alloc(br_fdb_cache, GFP_ATOMIC);
if (fdb) {
memcpy(fdb->addr.addr, addr, ETH_ALEN);
atomic_set(&fdb->use_count, 1);
hlist_add_head_rcu(&fdb->hlist, head);
fdb->dst = source;
fdb->is_local = is_local;
fdb->is_static = is_local;
fdb->ageing_timer = jiffies;
而jiffies的定义如下:
# define jiffies raid6_jiffies()
static inline uint32_t raid6_jiffies(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec*1000 + tv.tv_usec/1000;
}
我查了下gettimeofday 和 struct timeval tv 的结构,惊讶的发现定了一个超长的时间。
我理解,tv.tv_sec(秒数) * 1000 + 微秒/1000 应该是大于 三小时的一个数吧?
当前秒数如果是1,那么也是16分钟啊。。。。。。。取均值30,则是8小时。。。。
这个判断正确否?无论如何,我觉得fdb默认的定时器时间超过三小时,都是非常让人不理解的一件事。
所以我觉得我上面的逻辑可能哪里有问题。极可能定时的时间是一个分钟级的数字。
烦请大伙赐教!!
可怜的楼主以前发过一个100分的帖子,一个回复都没有,楼主滴分都给不出去,一起在本贴给了吧。
高手们解答了本贴,也烦请移步去这个帖子留个名,楼主会参照本贴的回复含金量,大把给分~~~~
http://topic.csdn.net/u/20110418/20/048ae2ed-17ba-4fad-b1a1-6b960711ad24.html
static struct net_bridge_fdb_entry *fdb_create(struct hlist_head *head,
struct net_bridge_port *source,
const unsigned char *addr,
int is_local)
{
struct net_bridge_fdb_entry *fdb;
fdb = kmem_cache_alloc(br_fdb_cache, GFP_ATOMIC);
if (fdb) {
memcpy(fdb->addr.addr, addr, ETH_ALEN);
atomic_set(&fdb->use_count, 1);
hlist_add_head_rcu(&fdb->hlist, head);
fdb->dst = source;
fdb->is_local = is_local;
fdb->is_static = is_local;
fdb->ageing_timer = jiffies;
而jiffies的定义如下:
# define jiffies raid6_jiffies()
static inline uint32_t raid6_jiffies(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec*1000 + tv.tv_usec/1000;
}
我查了下gettimeofday 和 struct timeval tv 的结构,惊讶的发现定了一个超长的时间。
我理解,tv.tv_sec(秒数) * 1000 + 微秒/1000 应该是大于 三小时的一个数吧?
当前秒数如果是1,那么也是16分钟啊。。。。。。。取均值30,则是8小时。。。。
这个判断正确否?无论如何,我觉得fdb默认的定时器时间超过三小时,都是非常让人不理解的一件事。
所以我觉得我上面的逻辑可能哪里有问题。极可能定时的时间是一个分钟级的数字。
烦请大伙赐教!!
可怜的楼主以前发过一个100分的帖子,一个回复都没有,楼主滴分都给不出去,一起在本贴给了吧。
高手们解答了本贴,也烦请移步去这个帖子留个名,楼主会参照本贴的回复含金量,大把给分~~~~
http://topic.csdn.net/u/20110418/20/048ae2ed-17ba-4fad-b1a1-6b960711ad24.html
|
再分析
jiffies的计数增加,是根据HZ的值面而变化的。
如果 HZ=100, 1个jiffies = 10 ms
如果 HZ=1000, 1个jiffies = 1 ms
|
static inline uint32_t raid6_jiffies(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec*1000 + tv.tv_usec/1000;
}
此函数返回的是当前的jiffies数,显然是以ms为单位的。
当用jiffies定时时,通常是jiffies+你需要定时的时间,因为jiffies自动计数,所以会在到达你所预订的时间时满足条件。
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec*1000 + tv.tv_usec/1000;
}
此函数返回的是当前的jiffies数,显然是以ms为单位的。
当用jiffies定时时,通常是jiffies+你需要定时的时间,因为jiffies自动计数,所以会在到达你所预订的时间时满足条件。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。