zoukankan      html  css  js  c++  java
  • DPDK 之 Symmetric Receive-side Scaling

    DPDK 之 Symmetric Receive-side Scaling

    上篇介绍到RSS HASH默认RK是一个非对称KEY,也就是同一条数据流收、发这两个方向的数据包的RSS HASH值是不同的。在IDS/DPI等流量分析应用场景中,同一条流数据由非对称HASH计算将分流到不同的CPU,这样极大的增加了应用负担,降低了处理能力。为了解决这个问题,有人提出了修改(RSSRK),将其改为重复的16个bits,来获取对称的结果。具体详情可查阅Scalable TCP Session Monitoring with Symmetric Receive-side Scaling此篇论文,这里不再详述。

    对称RK为以下320 bits数据,将其写入网卡RSSRK寄存器(82599)即可:

    0x6d5a 0x6d5a 0x6d5a 0x6d5a
    0x6d5a 0x6d5a 0x6d5a 0x6d5a
    0x6d5a 0x6d5a 0x6d5a 0x6d5a
    0x6d5a 0x6d5a 0x6d5a 0x6d5a
    0x6d5a 0x6d5a 0x6d5a 0x6d5a

    DPDK 可通过 API rte_eth_dev_rss_hash_update 动态修改当前网卡 RSS HASH KEY, 具体可参考testpmd 中 port_rss_hash_key_update 与 cmd_config_rss_parsed 详细实现:

    void
    port_rss_hash_key_update(portid_t port_id, char rss_type[], uint8_t *hash_key,
                 uint hash_key_len)
    {
        struct rte_eth_rss_conf rss_conf;
        int diag;
        unsigned int i;
    
        rss_conf.rss_key = NULL;
        rss_conf.rss_key_len = hash_key_len;
        rss_conf.rss_hf = 0;
        for (i = 0; i < RTE_DIM(rss_type_table); i++) {
            if (!strcmp(rss_type_table[i].str, rss_type))
                rss_conf.rss_hf = rss_type_table[i].rss_type;
        }
        diag = rte_eth_dev_rss_hash_conf_get(port_id, &rss_conf);
        if (diag == 0) {
            rss_conf.rss_key = hash_key;
            diag = rte_eth_dev_rss_hash_update(port_id, &rss_conf);
        }
        if (diag == 0)
            return;
    
        switch (diag) {
        case -ENODEV:
            printf("port index %d invalid
    ", port_id);
            break;
        case -ENOTSUP:
            printf("operation not supported by device
    ");
            break;
        default:
            printf("operation failed - diag=%d
    ", diag);
            break;
        }
    }
  • 相关阅读:
    linux 回收站 路径
    Linux 让进程在后台可靠运行的几种方法
    用marquee和div+js实现首尾相连循环滚动效果
    轻型数据库SQLite结合PHP的开发
    linux系统权限修复——学生误操作!
    2009级 毕业设计 题目
    linux下硬盘uuid查看及修改设置
    创建网站地图
    用上下左右箭头键在textbox中的光标跳转
    SHELL中时间的比较
  • 原文地址:https://www.cnblogs.com/dream397/p/13920956.html
Copyright © 2011-2022 走看看