1. A method for providing a flexible host memory buffer, the method comprising: allocating an amount of host memory as a host memory buffer accessible by a solid state drive (SSD) as a cache for SSD data; caching data from the solid state drive in the host memory buffer; monitoring utilization of the host memory buffer, wherein monitoring utilization of the host memory buffer includes determining a ratio of swaps between the host memory buffer and the SSD to host reads of data stored on the SSD; and dynamically increasing or decreasing the amount of host memory allocated for the host memory buffer based on the utilization, wherein dynamically increasing or decreasing the amount of host memory allocated for the host memory buffer includes increasing the amount of host memory allocated for the host memory buffer if the ratio indicates that accesses to the host memory buffer are a performance bottleneck.