From 9296adcd450143f02faf32fbda5b77dba3f03bc7 Mon Sep 17 00:00:00 2001 From: Joshua Bakita Date: Thu, 2 Jun 2022 14:29:53 -0400 Subject: gpu-paging: Allow for more than one buffer to be swapped at a time 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 --- include/uapi/linux/nvgpu.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'include/uapi/linux') diff --git a/include/uapi/linux/nvgpu.h b/include/uapi/linux/nvgpu.h index b8ea59a1..08f8ecda 100644 --- a/include/uapi/linux/nvgpu.h +++ b/include/uapi/linux/nvgpu.h @@ -2214,9 +2214,14 @@ struct nvgpu_as_swap_buffer_args { _IOW(NVGPU_AS_IOCTL_MAGIC, 17, struct nvgpu_as_swap_buffer_args) #define NVGPU_AS_IOCTL_READ_SWAP_BUFFER_ASYNC_FINISH \ _IOW(NVGPU_AS_IOCTL_MAGIC, 18, struct nvgpu_as_swap_buffer_args) +// Reset sector assignment to 0. Results in loss of all swapped data. +// TODO: Don't require this - support dynamic task systems. +#define NVGPU_AS_IOCTL_SWAP_RESET \ + _IO(NVGPU_AS_IOCTL_MAGIC, 19) + #define NVGPU_AS_IOCTL_LAST \ - _IOC_NR(NVGPU_AS_IOCTL_READ_SWAP_BUFFER_ASYNC_FINISH) + _IOC_NR(NVGPU_AS_IOCTL_SWAP_RESET) #define NVGPU_AS_IOCTL_MAX_ARG_SIZE \ sizeof(struct nvgpu_as_map_buffer_ex_args) -- cgit v1.2.2