首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用bmv2语言读取P4排队状态?

如何用bmv2语言读取P4排队状态?
EN

Stack Overflow用户
提问于 2017-03-06 14:36:53
回答 1查看 1.4K关注 0票数 2

在编写测试P4语言时,我准备读取软件交换机的排队状态,bmv2 .There在P4程序specification.But中没有相关内容,我在邮件列表中找到了一封邮件,即:

嗨,魏, 在P4中没有获得时间戳的标准方法,正如您在规范中看到的那样。 但是,如果使用的是simple_switch bmv2目标,则仍然可以访问这些信息。您需要在您的P4程序中包括以下内容:

代码语言:javascript
复制
header_type intrinsic_metadata_t {
    fields {
        ingress_global_timestamp : 48;
    }
}

metadata intrinsic_metadata_t intrinsic_metadata;

header_type queueing_metadata_t {
    fields {
        enq_timestamp: 48;
        enq_qdepth: 16;
        deq_timedelta: 32;
        deq_qdepth: 16;
    }
}

metadata queueing_metadata_t queueing_metadata;

所有的时间戳都以微秒为单位。 intrinsic_metadata.ingress_global_timestamp是交换机开始处理时的时间戳,queueing_metadata.enq_timestamp是数据包排队时的时间戳(在入口和出口管道之间),queueing_metadata.deq_timedelta是数据包在队列中花费的时间(我相信这就是您所追求的)。重要的是要理解这些元数据字段是特定于simple_switch目标的,它们不是由P4标准化的。bmv2将检测到它们是在P4程序中定义的,并利用它们。 因为bmv2的吞吐量很低,所以我建议将您的链接限制在<100 your。您还可以使用"set_queue_rate“simple_switch CLI命令对bmv2队列进行分级限制。请确保您使用bmv2编译O2并且没有日志记录(./配置'CXXFLAGS=-O2‘-禁用-日志-宏-禁用-elogger),否则吞吐量将非常糟糕。 最好的 安东宁

我添加邮件中提到的代码来测试它是否能工作:

代码语言:javascript
复制
modify_field(ipv4.ttl,10);
add_to_field(ipv4.ttl,queueing_metadata.deq_qdepth);

但结果是它不起作用,我该怎么做呢?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-03-18 07:41:51

我在p4lang存储库中问了同样的问题,问题得到了解决,谢谢作者的帮助,您可以看到这里

顺便说一下,运行时命令set_queue_rate是特定于simple_switch的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42628307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档