linux/drivers/gpu/drm/i915
Chris Wilson 0b5372727b drm/i915/cmdparser: Use cached vmappings
The single largest factor in the overhead of parsing the commands is the
setup of the virtual mapping to provide a continuous block for the batch
buffer. If we keep those vmappings around (against the better judgement
of mm/vmalloc.c, which we offset by handwaving and looking suggestively
at the shrinker) we can dramatically improve the performance of the
parser for small batches (such as media workloads). Furthermore, we can
use the prepare shmem read/write functions to determine  how best we
need to clflush the range (rather than every page of the object).

The impact of caching both src/dst vmaps is +80% on ivb and +140% on byt
for the throughput on small batches. (Caching just the dst vmap and
iterating over the src, doing a page by page copy is roughly 5% slower
on both platforms. That may be an acceptable trade-off to eliminate one
cached vmapping, and we may be able to reduce the per-page copying overhead
further.) For *this* simple test case, the cmdparser is now within a
factor of 2 of ideal performance.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.william.auld@gmail.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20160818161718.27187-33-chris@chris-wilson.co.uk
2016-08-18 22:36:59 +01:00
..
gvt drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
dvo.h
i915_cmd_parser.c drm/i915/cmdparser: Use cached vmappings 2016-08-18 22:36:59 +01:00
i915_debugfs.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
i915_drv.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-08-15 10:41:47 +02:00
i915_drv.h drm/i915/cmdparser: Make initialisation failure non-fatal 2016-08-18 22:36:58 +01:00
i915_gem_batch_pool.c drm/i915: Double check the active status on the batch pool 2016-08-04 20:19:50 +01:00
i915_gem_batch_pool.h drm/i915: Double check the active status on the batch pool 2016-08-04 20:19:50 +01:00
i915_gem_context.c drm/i915: Move debug only per-request pid tracking from request to ctx 2016-08-15 11:01:15 +01:00
i915_gem_dmabuf.c drm/i915: Support for creating write combined type vmaps 2016-08-12 13:06:36 +01:00
i915_gem_dmabuf.h drm/i915: Serialise presentation with imported dmabufs 2016-06-17 10:32:26 +01:00
i915_gem_evict.c drm/i915: Choose not to evict faultable objects from the GGTT 2016-08-18 22:36:55 +01:00
i915_gem_execbuffer.c drm/i915/cmdparser: Use cached vmappings 2016-08-18 22:36:59 +01:00
i915_gem_fence.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
i915_gem_gtt.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
i915_gem_gtt.h drm/i915: Track display alignment on VMA 2016-08-18 22:36:56 +01:00
i915_gem_render_state.c drm/i915: Use VMA for render state page tracking 2016-08-15 11:01:11 +01:00
i915_gem_render_state.h drm/i915: Use VMA for render state page tracking 2016-08-15 11:01:11 +01:00
i915_gem_request.c drm/i915: Move debug only per-request pid tracking from request to ctx 2016-08-15 11:01:15 +01:00
i915_gem_request.h drm/i915: Move debug only per-request pid tracking from request to ctx 2016-08-15 11:01:15 +01:00
i915_gem_shrinker.c drm/i915: Remove unused no-shrinker-steal 2016-08-05 10:54:39 +01:00
i915_gem_stolen.c drm/i915: Remember to set vma->pages for the preallocated stolen object 2016-08-17 13:55:08 +01:00
i915_gem_tiling.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
i915_gem_userptr.c drm/i915/userptr: Make gup errors stickier 2016-08-18 22:36:49 +01:00
i915_gem.c drm/i915: Stop discarding GTT cache-domain on unbind vma 2016-08-18 22:36:57 +01:00
i915_gem.h
i915_gpu_error.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
i915_guc_reg.h
i915_guc_submission.c drm/i915: Add missing kerneldoc for guc_client_alloc:engines 2016-08-17 14:25:49 +01:00
i915_ioc32.c
i915_irq.c drm/i915: Move missed interrupt detection from hangcheck to breadcrumbs 2016-08-10 10:37:35 +01:00
i915_memcpy.c drm/i915: Mark the static key for movntqda as static 2016-08-17 12:36:07 +01:00
i915_params.c drm/i915: Add a way to test the modeset done during gpu reset, v3. 2016-08-05 23:28:28 +03:00
i915_params.h drm/i915: Add a way to test the modeset done during gpu reset, v3. 2016-08-05 23:28:28 +03:00
i915_pci.c drm/i915: Add missing ring_mask to Pineview 2016-07-29 16:22:42 +01:00
i915_pvinfo.h drm/i915: Use offsetof() to calculate the offset of members in PVINFO page 2016-06-17 19:44:25 +01:00
i915_reg.h drm/i915: Show RPS autotuning thresholds along with waitboost 2016-08-15 10:03:46 +01:00
i915_suspend.c drm/i915: Remove LVDS and PPS suspend time save/restore 2016-08-10 16:02:14 +03:00
i915_sysfs.c drm/i915: Fix up some stray to_i915(dev) after a recent merge 2016-07-28 07:28:17 +01:00
i915_trace_points.c
i915_trace.h drm/i915: Remove surplus drm_device parameter to i915_gem_evict_something() 2016-08-04 20:19:50 +01:00
i915_vgpu.c drm/i915: Update missing kerneldoc 2016-07-19 10:34:24 +02:00
i915_vgpu.h drm/i915: Fold vGPU active check into inner functions 2016-06-17 19:44:29 +01:00
intel_acpi.c
intel_atomic_plane.c drm/i915: Use drm_plane_helper_check_state() 2016-08-08 14:19:56 -04:00
intel_atomic.c drm: Consolidate plane arrays in drm_atomic_state 2016-06-02 17:20:25 +02:00
intel_audio.c drm/i915: Acquire audio powerwell for HD-Audio registers 2016-08-04 18:17:20 +01:00
intel_bios.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_bios.h
intel_breadcrumbs.c drm/i915: Use RCU to annotate and enforce protection for breadcrumb's bh 2016-08-10 10:37:49 +01:00
intel_color.c drm/i915: Kill has_dsi_encoder 2016-07-07 13:10:20 +03:00
intel_crt.c drm/i915/vlv: Disable HPD in valleyview_crt_detect_hotplug() 2016-07-19 09:17:09 +02:00
intel_csr.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-08-05 10:36:15 +02:00
intel_ddi.c Revert "drm/i915: Track active streams also for DP SST" 2016-08-05 19:20:31 +03:00
intel_device_info.c drm/i915: Split out runtime configuration of device info to its own file 2016-07-05 11:53:27 +01:00
intel_display.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
intel_dp_aux_backlight.c
intel_dp_link_training.c drm/i915: Revert DisplayPort fast link training feature 2016-06-21 19:45:03 +03:00
intel_dp_mst.c Revert "drm/i915: Track active streams also for DP SST" 2016-08-05 19:20:31 +03:00
intel_dp.c drm/i915: Apply the PPS register unlock workaround more consistently 2016-08-10 16:01:42 +03:00
intel_dpio_phy.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dpll_mgr.c drm/i915: s/INTEL_OUTPUT_DISPLAYPORT/INTEL_OUTPUT_DP/ 2016-07-07 13:10:16 +03:00
intel_dpll_mgr.h
intel_drv.h drm/i915: Track pinned VMA 2016-08-15 11:01:13 +01:00
intel_dsi_dcs_backlight.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_panel_vbt.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi_pll.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_dsi.c drm/i915: Kill has_dsi_encoder 2016-07-07 13:10:20 +03:00
intel_dsi.h
intel_dvo.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_engine_cs.c drm/i915/cmdparser: Make initialisation failure non-fatal 2016-08-18 22:36:58 +01:00
intel_fbc.c drm/i915: Fallback to using unmappable memory for scanout 2016-08-18 22:36:56 +01:00
intel_fbdev.c drm/i915: Introduce i915_ggtt_offset() 2016-08-15 11:01:14 +01:00
intel_fifo_underrun.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_frontbuffer.c drm/i915: Use dev_priv consistently through the intel_frontbuffer interface 2016-08-04 20:20:03 +01:00
intel_frontbuffer.h drm/i915: Use dev_priv consistently through the intel_frontbuffer interface 2016-08-04 20:20:03 +01:00
intel_guc_fwif.h
intel_guc_loader.c drm/i915: Introduce i915_ggtt_offset() 2016-08-15 11:01:14 +01:00
intel_guc.h drm/i915: Track pinned vma inside guc 2016-08-15 11:00:58 +01:00
intel_gvt.c drm/i915/gvt: Mark i915.enable_gvt as false if loading fails 2016-06-21 12:40:13 +01:00
intel_gvt.h drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
intel_hdmi.c drm/i915: Simplify hdmi_12bpc_possible() 2016-07-07 13:10:24 +03:00
intel_hotplug.c drm/i915: Mark i915_hpd_poll_init_work as static 2016-08-17 12:36:15 +01:00
intel_i2c.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_lrc.c drm/i915: Introduce i915_ggtt_offset() 2016-08-15 11:01:14 +01:00
intel_lrc.h drm/i915: Unify legacy/execlists submit_execbuf callbacks 2016-08-02 22:58:31 +01:00
intel_lvds.c drm/i915: Apply the PPS register unlock workaround more consistently 2016-08-10 16:01:42 +03:00
intel_mocs.c drm/i915: Rename struct intel_ringbuffer to struct intel_ring 2016-08-02 22:58:16 +01:00
intel_mocs.h drm/i915: rename 'ring' where it refers to an engine or engine_id 2016-07-21 09:59:41 +01:00
intel_modes.c drm: Remove superflous linux/fb.h includes 2016-08-12 10:41:39 +02:00
intel_opregion.c Linux 4.7 2016-07-26 17:26:29 +10:00
intel_overlay.c drm/i915: Move fence tracking from object to vma 2016-08-18 22:36:50 +01:00
intel_panel.c drm/i915: Introduce Kabypoint PCH for Kabylake H/DT. 2016-07-15 15:51:30 +03:00
intel_pm.c drm/i915/gen9: Drop invalid WARN() during data rate calculation 2016-08-18 14:26:54 +02:00
intel_psr.c Merge tag 'drm-intel-next-2016-08-08' of git://anongit.freedesktop.org/drm-intel into drm-next 2016-08-15 16:53:57 +10:00
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_renderstate.h drm/i915: Remove duplicate golden render state init from execlists 2016-08-02 22:58:30 +01:00
intel_ringbuffer.c drm/i915: Allocate rings from stolen 2016-08-18 22:36:49 +01:00
intel_ringbuffer.h drm/i915: Allow ringbuffers to be bound anywhere 2016-08-18 22:36:48 +01:00
intel_runtime_pm.c drm/i915: Silence GCC warning for cmn_a_well 2016-08-16 10:53:29 +01:00
intel_sdvo_regs.h
intel_sdvo.c drm/i915: Convert dev_priv->dev backpointers to dev_priv->drm 2016-07-05 11:58:45 +01:00
intel_sideband.c drm/i915: Convert wait_for(I915_READ(reg)) to intel_wait_for_register() 2016-06-30 15:42:33 +01:00
intel_sprite.c Merge remote-tracking branch 'airlied/drm-next' into drm-intel-next-queued 2016-08-15 10:41:47 +02:00
intel_tv.c drm/i915: Mass convert dev->dev_private to to_i915(dev) 2016-07-04 12:54:07 +01:00
intel_uncore.c Revert "drm/i915: Enable RC6 immediately" 2016-07-21 21:43:19 +01:00
intel_vbt_defs.h drm/i915: Extract physical display dimensions from VBT 2016-06-10 10:41:15 +03:00
Kconfig drm/i915: gvt: Introduce the basic architecture of GVT-g 2016-06-17 20:35:06 +01:00
Kconfig.debug drm/i915: Select DRM_VGEM for igt 2016-07-10 13:22:39 +01:00
Makefile drm/i915: Use SSE4.1 movntdqa to accelerate reads from WC memory 2016-08-12 13:06:37 +01:00