Speed-related improvements in the periodic FlowManager::mapReader()
thread that periodically reads the Network MAP state and performs
the appropriate actions: pushes state into the switches and
recomputes the Shortest Paths.

Below are the measurement numbers BEFORE and AFTER the optimization.
The setup is 8 node cluster, there are NO changes in the
network, and all Flow Entries have been added to the switches.
I.e., those are numbers in steady setup how long
time it takes to process the state.
Note that the relationship to the number of flows is not linear:

* BEFORE OPTIMIZATION:
  Measurement numbers for periodic flow processing (8 node cluster)

 - 42 flows
   Time: 3 sec
   Rate: 15 flows/sec

 - 252 flows
   Time: 9-11 sec
   Rate: 25-30 flows/sec
   On one controller (devw7), it might take up to 13 seconds.

 - 1050 flows
   Time: 25-27 seconds
   Rate: 40 flows/sec

* AFTER OPTIMIZATION:
 Measurement numbers for 1050 flows are:

 - 42 flows
   Time: 2-3 sec
   Rate: 18-20 flows/sec

 - 252 flows
   Time: 3-4 sec
   Rate: 60-70 flows/sec

 - 1050 flows
   Time: 9-10 seconds
   Rate: 115-120 flow/sec

I.e., the improvements for larger number of flows
(252 and 1050) are close to 3x.

All the improvements are very trivial:
Just reorder the fetching of the related Vertex attributes at the time
they are needed, and eliminate additional attribute fetching if
the Vertex is going to be ignored anyway.
1 file changed