1. A method for intelligently responding to hardware failures so as to optimize system performance, the method comprising: monitoring utilization of hardware in a system; monitoring software components running on said hardware in said system to assess a context of said software components running on said hardware; detecting a hardware failure; analyzing said hardware failure to determine a type of said hardware failure; analyzing properties of a workload running on said failed hardware; and responding, by a processor, to said detected hardware failure based on said type of said hardware failure, said properties of said workload running on said failed hardware and said context of said software running on said failed hardware.