You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am trying to understand the workflow that happens when the GPU raises a page-fault for a UVM allocated memory. In particular, I am interested in the page table (one maintained per application) manipulation that occurs during page fault.
From what I understand, there are two methods in uvm_va_block.c which do the bulk of weight-lifting in this operation, uvm_va_block_make_resident_copy and uvm_va_block_service_finish. The first function is responsible to allocate a gpu chunk (physical memory), and copy content if required (unless first touch fault). It uses linear mapping for copying and zeroing. The second function manipulates permission and PTEs for the faulted address.
I understand that these operations are performed at a va_block granularity (2MB regions) using the uvm_va_block_map function. But, I could not find the place that manipulates the higher levels in the page table (1GB and above), i.e., from the top of the radix tree, the root and the level next. Can someone point out where the manipulations at higher PDE levels are performed?
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
Hi,
I am trying to understand the workflow that happens when the GPU raises a page-fault for a UVM allocated memory. In particular, I am interested in the page table (one maintained per application) manipulation that occurs during page fault.
From what I understand, there are two methods in uvm_va_block.c which do the bulk of weight-lifting in this operation, uvm_va_block_make_resident_copy and uvm_va_block_service_finish. The first function is responsible to allocate a gpu chunk (physical memory), and copy content if required (unless first touch fault). It uses linear mapping for copying and zeroing. The second function manipulates permission and PTEs for the faulted address.
I understand that these operations are performed at a va_block granularity (2MB regions) using the uvm_va_block_map function. But, I could not find the place that manipulates the higher levels in the page table (1GB and above), i.e., from the top of the radix tree, the root and the level next. Can someone point out where the manipulations at higher PDE levels are performed?
Beta Was this translation helpful? Give feedback.
All reactions