gatekeeper icon indicating copy to clipboard operation
gatekeeper copied to clipboard

Is there a clever way to combine integer divisions?

Open AltraMayor opened this issue 6 years ago • 0 comments

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.

AltraMayor avatar Apr 08 '19 15:04 AltraMayor