Am 04.12.19 um 12:45 schrieb Thomas HellstrÃm (VMware):
On 12/4/19 12:13 PM, Christian KÃnig wrote:
Am 03.12.19 um 14:22 schrieb Thomas HellstrÃm (VMware):
From: Thomas Hellstrom <thellstrom@xxxxxxxxxx>
Using huge page-table entries require that the start of a buffer object
is huge page size aligned. So introduce a ttm_bo_man_get_node_huge()
function that attempts to accomplish this for allocations that are larger
than the huge page size, and provide a new range-manager instance that
uses that function.
I still don't think that this is a good idea.
Again, can you elaborate with some specific concerns?
You seems to be seeing PUD as something optional.
The driver/userspace should just use a proper alignment if it wants to use huge pages.
There are drawbacks with this approach. The TTM alignment is a hard constraint. Assume that you want to fit a 1GB buffer object into limited VRAM space, and _if possible_ use PUD size huge pages. Let's say there is 1GB available, but not 1GB aligned. The proper alignment approach would fail and possibly start to evict stuff from VRAM just to be able to accomodate the PUD alignment. That's bad. The approach I suggest would instead fall back to PMD alignment and use 2MB page table entries if possible, and as a last resort use 4K page table entries.
And exactly that sounds like a bad idea to me.
Using 1GB alignment is indeed unrealistic in most cases, but for 2MB alignment we should really start to evict BOs.
Otherwise the address space can become fragmented and we won't be able de-fragment it in any way.