Tried the following experiments
1)Inserted the prewarming objects at the front. other objects due to workload are inserted at the back
1.1)Do entire prewarming upfront. This seems to give a significant boost in performance as expected. The main reason could be that
the most important prewarmed objects are at the back of the queue, while if we prewarm at the tail, the important objects move to the front.
So the important thing to ensure seems to be that the important objects are not evicted(and not to push back the first eviction).
This suggests that though the evictions start early it is the less important objects that are getting evicted first.
Things to try -> 
a)try with 50% prewraming size(should decrease performance) - This happened as expected. Also the performance improved
even more for prewarming set size of 100%. So given that we are prewarming at head,
performance increases monotonically as we increasing prewarming set size(doesnt't matter even if we make it 100%).
This is an important observation because earlier we were worried that having prewarming size of 100% may lead to contention with incoming load.
b)check on other trace
Checked on the synthetic trace. here again inserting at head with 100% prewarm size far outperforms the normal algorithm 
1.2)Do prewarming at some rate(more realistic scenaria). This surprisingly performs poorly than the normal algorithm. 
possible explanation - IOPS rate is >= prewarming rate and so important objects are being pushed to the front.



Overall observations
1)Doing entire prewarming upfront seems to be the best thing to do. Check if it's possible to do. Else test with prewarming rate greater than IOPS rate.
This should push back the important objects and might have a similar effect.