diff options
author | Joshua Bakita <jbakita@cs.unc.edu> | 2022-06-02 14:29:53 -0400 |
---|---|---|
committer | Joshua Bakita <jbakita@cs.unc.edu> | 2022-06-03 15:41:42 -0400 |
commit | 9296adcd450143f02faf32fbda5b77dba3f03bc7 (patch) | |
tree | 1db15efddd549e40f0d92869be6f0d499852d7d8 /drivers/gpu/nvgpu/os/linux/vm.c | |
parent | 745b3ef2ac4d7afa99202e6afc441e3f0b97f5b4 (diff) |
gpu-paging: Allow for more than one buffer to be swapped at a timertss22-aegpu-paging
This uses a very primitive linear disk sector allocation scheme.
Sectors are only reused when userspace resets assignment to 0 with
an NVGPU_AS_IOCTL_SWAP_RESET ioctl (which invalidates all current
swap buffers).
This sector assignment scheme is sufficient for use in a TimeWall-
like system, where all allocations are assumed to be static after
after task system release. This is not suitable for a system with
dynamic allocations, unless userspace manually resets swap state
regularly (benchmarks run a reset at start for example).
Support for dynamic allocations is on the backlog.
No significant speed impact.
Benchmarks, 100 iters, after:
gpu_paging_speed, write: 186.0ms +/- 3.51
gpu_paging_speed, read: 162.7ms +/- 2.58
gpu_paging_overhead_speed, write start: 35.4ms +/- 4.47
gpu_paging_overhead_speed, write finish: 3.3ms +/- 0.18
gpu_paging_overhead_speed, read start: 69.8ms +/- 6.42
gpu_paging_overhead_speed, read finish: 43.2ms +/- 0.91
Diffstat (limited to 'drivers/gpu/nvgpu/os/linux/vm.c')
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/vm.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/vm.c b/drivers/gpu/nvgpu/os/linux/vm.c index 9cd17981..a1c19a3a 100644 --- a/drivers/gpu/nvgpu/os/linux/vm.c +++ b/drivers/gpu/nvgpu/os/linux/vm.c | |||
@@ -269,6 +269,7 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm, | |||
269 | else | 269 | else |
270 | // So we can always safely call list_del() | 270 | // So we can always safely call list_del() |
271 | INIT_LIST_HEAD(&mapped_buffer->os_priv.nvmap_priv_entry); | 271 | INIT_LIST_HEAD(&mapped_buffer->os_priv.nvmap_priv_entry); |
272 | mapped_buffer->os_priv.swap_sector = 0; | ||
272 | 273 | ||
273 | *gpu_va = mapped_buffer->addr; | 274 | *gpu_va = mapped_buffer->addr; |
274 | return 0; | 275 | return 0; |