It needed to anyway for cloud workloads. The peer guest VMs should have never been able to flush my caches. Modern CPUs are still designed for DOS with some extra cruft tacked on the side.
For Spectre the problem is ultimately a failure to completely roll-back processor state. I don't want to downplay the complexity but the state of the cache needs to be tracked and if speculative execution triggered loading of cache lines where the speculation was incorrect then those cache lines need to be thrown away, effectively rolling back the cache. That shouldn't have a huge performance impact but it seems to require new CPU designs.
Edit: Paper on this subject: http://palms.ee.princeton.edu/system/files/CATalyst_vfinal_c...
No matter what you do this will result in a slowdown, either from re-loading data or from "wasting" cache space that could otherwise have been used generally for buffers.