summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/os/linux/ioctl_as.c
diff options
context:
space:
mode:
authorJoshua Bakita <jbakita@cs.unc.edu>2022-06-02 14:29:53 -0400
committerJoshua Bakita <jbakita@cs.unc.edu>2022-06-03 15:41:42 -0400
commit9296adcd450143f02faf32fbda5b77dba3f03bc7 (patch)
tree1db15efddd549e40f0d92869be6f0d499852d7d8 /drivers/gpu/nvgpu/os/linux/ioctl_as.c
parent745b3ef2ac4d7afa99202e6afc441e3f0b97f5b4 (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/ioctl_as.c')
-rw-r--r--drivers/gpu/nvgpu/os/linux/ioctl_as.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_as.c b/drivers/gpu/nvgpu/os/linux/ioctl_as.c
index 6348bb2a..2bf8363a 100644
--- a/drivers/gpu/nvgpu/os/linux/ioctl_as.c
+++ b/drivers/gpu/nvgpu/os/linux/ioctl_as.c
@@ -672,6 +672,14 @@ long gk20a_as_dev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
672 err = nvgpu_as_dev_ioctl_swap(cmd, as_share, 672 err = nvgpu_as_dev_ioctl_swap(cmd, as_share,
673 (struct nvgpu_as_swap_buffer_args *)buf); 673 (struct nvgpu_as_swap_buffer_args *)buf);
674 break; 674 break;
675 case NVGPU_AS_IOCTL_SWAP_RESET:
676 // On-disk sector assignment is linear currently, and needs to
677 // be reset to the start between task systems to avoid disk
678 // space exhaustion.
679 // TODO: Support garbage-collection- or callback-driven sector
680 // reclaiming rather than requiring manual reset.
681 atomic64_set(&nvgpu_swap_next_sector, 4);
682 break;
675 default: 683 default:
676 err = -ENOTTY; 684 err = -ENOTTY;
677 break; 685 break;