kernel code reading: softirq init
kernel code reading: percpu best_upa calculation

The result of the added case looks like this:

--- Groups: 3, upa: 3 ---
upa: 3
   allocs: 1
   cpus/3: 0
   wasted: 2
   last_allocs: 2147483647
   nr_units: 3
upa: 2
   allocs: 1
   cpus/3: 0
   wasted: 1
   last_allocs: 2147483647
   nr_units: 2
upa: 1
   allocs: 1
   cpus/3: 0
   wasted: 0
   last_allocs: 2147483647
   nr_units: 1
   best_upa: 1
Final best_upa: 1

I am wondering one thing. From the result, it looks like the final one (upa == 1)
has no waste. But this will increase the unit_size.

Not sure this is the best way to do this.
kernel code reading: do_softirq()

do_softirq() will iterate the softirq_vec and invode the action if necessary.