1. An apparatus comprising: a performance monitor to monitor a performance rate of a plurality of threads associated with one or more applications, a plurality of resources being allocated to the threads; and a dynamic resource allocator to determine a flat performance region for each thread operating in a respective resource, adjust allocation of the respective resource among the threads based on the monitored performance rate, wherein the adjustment of allocation of the respective resource includes removing portions of the respective resource from a first thread until the first thread starts to lose performance and adding at least a portion of the removed portions to a second thread until the performance of the second thread reaches the flat performance region for the second thread.