Skip to content

Is there a clever way to combine integer divisions? #243

@AltraMayor

Description

@AltraMayor

get_responsible_gk_mailbox() in file gk/main.c takes the reminder rss_hash_val % gk_conf->rss_conf_front.reta_size to calculate rss_hash_val and rss_hash_val is only used on a integer division and reminder on the following lines:

idx = rss_hash_val / RTE_RETA_GROUP_SIZE;
shift = rss_hash_val % RTE_RETA_GROUP_SIZE;

If gk_conf->rss_conf_front.reta_size can only be a power of 2 greater than or equal to RTE_RETA_GROUP_SIZE, which is 64, the operation rss_hash_val % gk_conf->rss_conf_front.reta_size is not need at all. It suggests that the code of get_responsible_gk_mailbox() may be simplifyable. The following questions are key to know how to simplify the code:

  1. Can gk_conf->rss_conf_front.reta_size take a value that is not a power of 2?
  2. Can gk_conf->rss_conf_front.reta_size be less than RTE_RETA_GROUP_SIZE?

Besides the answers above, the code simplification may require combining properties of integer divisions and reminders and employing new functions (e.g. div(3)).

Pull request #242 and its related issue #149 motivated this new issue, so reviewing them might be helpful.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions