iris: make BATCH_SZ smaller by BATCH_RESERVED bytes
authorPaulo Zanoni <paulo.r.zanoni@intel.com>
Thu, 2 Apr 2020 23:03:41 +0000 (16:03 -0700)
committerMarge Bot <eric+marge@anholt.net>
Wed, 15 Apr 2020 21:35:14 +0000 (21:35 +0000)
Iris allocates gem buffers using buckets of allocation sizes that are
page aligned. We always ask for batch buffers of size BATCH_SZ +
BATCH_RESERVED, which is not page aligned: we ask for 65552 bytes,
which ends up in the bucket of size 81920, resulting in 20% unused
space. Adjust things so there is no waste of space: BATCH_SZ +
BATCH_RESERVED is now 65536.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4561>

src/gallium/drivers/iris/iris_batch.c
src/gallium/drivers/iris/iris_batch.h

index b0341513f2becb65a47fe1fda38ac2c3aebe99cb..ff0dfd053f4208641f88ea2093371eae2ebc1f09 100644 (file)
 
 #define FILE_DEBUG_FLAG DEBUG_BUFMGR
 
-/* Terminating the batch takes either 4 bytes for MI_BATCH_BUFFER_END
- * or 12 bytes for MI_BATCH_BUFFER_START (when chaining).  Plus, we may
- * need an extra 4 bytes to pad out to the nearest QWord.  So reserve 16.
- */
-#define BATCH_RESERVED 16
-
 static void
 iris_batch_reset(struct iris_batch *batch);
 
index d8399d3cd34adcd6d32e70257f2340f75422b9ac..056a2469191c58a0a04dcd0cf36793821b97b4dd 100644 (file)
 /* The kernel assumes batchbuffers are smaller than 256kB. */
 #define MAX_BATCH_SIZE (256 * 1024)
 
+/* Terminating the batch takes either 4 bytes for MI_BATCH_BUFFER_END
+ * or 12 bytes for MI_BATCH_BUFFER_START (when chaining).  Plus, we may
+ * need an extra 4 bytes to pad out to the nearest QWord.  So reserve 16.
+ */
+#define BATCH_RESERVED 16
+
 /* Our target batch size - flush approximately at this point. */
-#define BATCH_SZ (64 * 1024)
+#define BATCH_SZ (64 * 1024 - BATCH_RESERVED)
 
 enum iris_batch_name {
    IRIS_BATCH_RENDER,