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/ioctl_as.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/ioctl_as.c')
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/ioctl_as.c | 8 |
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; |