1. A method for dynamic storage tiering comprising: receiving an input/output (I/O) request from a host device; determining whether the I/O request results in a cache hit; relocating data associated with the I/O request between a higher-performance storage device and lower-performance storage device according to the determination whether the data associated with the I/O request is stored in a cache.