On 02/12/2017 05:38 PM, Xiubo Li wrote:
On 2017年02月11日 02:02, Andy Grover wrote:
1. increase the region mmap()ed by userspace, TCMU_RING_SIZE, from 1MB
to 1GB or larger
2. Don't vmalloc() the whole thing, instead vmalloc for the cmd ring
portion, and dynamically alloc pages for the data area as needed and
map them into the data area.
Should the data area mapping is dynamical or add one new API to
userspace to trigger it ?
I would recommend having the kernel make the decision to allocate/map
more memory, or not (i.e. wait for existing I/O to complete and free
pages) because this avoids the need for a new API, and also the kernel
may better decide how to allocate total pages used across multiple TCMU
devices.
4. Implement an algorithm to keep allocated pages mapped into the data
area for reuse, and maybe a heuristic to keep extreme burstiness from
over-allocating pages
Does a little like slab ?
It's definitely becoming less of a storage issue and more of a
page-management issue. It might make sense to look at mm code and ask mm
experts for their advice, yep.
This should allow TCMU to allocate more data area as needed, not waste
memory for slower devices, and avoid userspace ABI changes. Could we
prototype this approach and see if it is workable?
I will do more investigate about this.
Thank you for working to improve this area!
Regards -- Andy