首先mlx5_core驱动有一个单线程的workqueue,每一秒mlx5_fc_stats_work都会被调到,去fw里面查询flow对应的counter。然后放在struct mlx5_fc。这里面用到了单线程,单链表,所以mlx5_fc插入删除的时候并没有锁。当然也不是一个一个的查,而是批量的查。这个即使上百万的flow counter也不会消耗太长时间。
然后用tc去查询相应的flow的时候,下面的函数会被调到:
fl_dump
fl_hw_update_stats
tc_setup_cb_call
mlx5e_setup_tc_block_cb
mlx5e_stats_flower
tcf_exts_stats_update
for(nr_actions)
tcf_action_stats_update

文章描述了一个针对mlx5_core驱动的优化,该驱动使用单线程workqueue每秒查询flowcounter,并存储在structmlx5_fc中。通过批量查询避免了锁的使用,以提高效率。当使用tc查询时,涉及一系列回调函数更新统计信息。此外,文章提到了tc_action的两种counter设计,非percpucounter用于节省CPU资源,并介绍了一个补丁,允许用户通过标志控制是否分配percpucounter。
最低0.47元/天 解锁文章
3462

被折叠的 条评论
为什么被折叠?



