diff options
author | Joshua Bakita <jbakita@cs.unc.edu> | 2022-05-30 12:20:48 -0400 |
---|---|---|
committer | Joshua Bakita <jbakita@cs.unc.edu> | 2022-05-31 11:32:12 -0400 |
commit | 745b3ef2ac4d7afa99202e6afc441e3f0b97f5b4 (patch) | |
tree | a3bf20ee2975666318a7275231d15fec451c1b10 /drivers/gpu/nvgpu/os/linux/vm.c | |
parent | ff66847a00ac27d8d94b3664ec156a195dbf3676 (diff) |
gpu-paging: Support asynchronous paging
- Fully enables *_ASYNC API
- Allows page mapping to be overlapped with I/O, resulting in an 11% speedup
to synchronous reads
Benchmarks, 1,000 iters, before:
gpu_paging_speed, write: 185.5ms +/- 3.58
gpu_paging_speed, read: 180.5ms +/- 1.42
gpu_paging_overhead_speed, write start: 183.3ms +/- 3.89
gpu_paging_overhead_speed, write finish: 3.4ms +/- 2.61
gpu_paging_overhead_speed, read start: 181.6ms +/- 3.34
gpu_paging_overhead_speed, read finish: 41.1ms +/- 2.69
Benchmarks, 1,000 iters, after:
gpu_paging_speed, write: 185.8ms +/- 3.70
gpu_paging_speed, read: 161.3ms +/- 0.97
gpu_paging_overhead_speed, write start: 38.9ms +/- 5.47
gpu_paging_overhead_speed, write finish: 3.1ms +/- 2.42
gpu_paging_overhead_speed, read start: 79.4 +/- 6.42
gpu_paging_overhead_speed, read finish: 44.3 +/- 1.53
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 fcb58ac4..9cd17981 100644 --- a/drivers/gpu/nvgpu/os/linux/vm.c +++ b/drivers/gpu/nvgpu/os/linux/vm.c | |||
@@ -262,6 +262,7 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm, | |||
262 | mapped_buffer->os_priv.dmabuf = dmabuf; | 262 | mapped_buffer->os_priv.dmabuf = dmabuf; |
263 | mapped_buffer->os_priv.attachment = attachment; | 263 | mapped_buffer->os_priv.attachment = attachment; |
264 | mapped_buffer->os_priv.sgt = sgt; | 264 | mapped_buffer->os_priv.sgt = sgt; |
265 | init_completion(&mapped_buffer->os_priv.swap_io_done); | ||
265 | nvmap_priv = nvmap_get_priv_list(dmabuf); | 266 | nvmap_priv = nvmap_get_priv_list(dmabuf); |
266 | if (!IS_ERR(nvmap_priv)) | 267 | if (!IS_ERR(nvmap_priv)) |
267 | list_add(&mapped_buffer->os_priv.nvmap_priv_entry, nvmap_priv); | 268 | list_add(&mapped_buffer->os_priv.nvmap_priv_entry, nvmap_priv); |