From patchwork Wed Dec 10 19:02:25 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Wood X-Patchwork-Id: 5471311 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 5A3FDBEEA8 for ; Wed, 10 Dec 2014 19:02:36 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D317E2015A for ; Wed, 10 Dec 2014 19:02:31 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id E41C7200ED for ; Wed, 10 Dec 2014 19:02:30 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 21BEC6E6D9; Wed, 10 Dec 2014 11:02:30 -0800 (PST) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wi0-f172.google.com (mail-wi0-f172.google.com [209.85.212.172]) by gabe.freedesktop.org (Postfix) with ESMTP id 74DA96E6D9 for ; Wed, 10 Dec 2014 11:02:28 -0800 (PST) Received: by mail-wi0-f172.google.com with SMTP id n3so12244814wiv.17 for ; Wed, 10 Dec 2014 11:02:27 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=iMBwFcxa5BjpfLX2qDEaZP1W64d0frP0rMos5HsUurE=; b=Arydp8C9JHiZfKmlj1Jzc5nLpTNUXRpbFVqzSSVZX+P6IGEd9pu/bFaKDreIIs7jcv 0W3onsZpvb430t8RcTgw1Z2jo8J/0X6pAjZZsHEFlc3dKzLNiIr3Lv/XMEODdMkQeXV8 PMYAzdLbA3WIYFBQuzUtOJ6Rx066KdiWix8riHD09phNbTxNVn4omO/qwA6pE0Ypf8RP pckjngGvfGQ8/1X3XzhhICIbtMce2Yx8vJsf/8DCKy7hOYPKJ8PZ3dtoTG5kN9npRZ8H AQ4i9yXkMBS8GTBjADDBtz3dbIVvHJeKMW0BzOhgcx9QAIM1soCJLyi0r6NkNGFR7ZvP K7ug== X-Gm-Message-State: ALoCoQkrXjW0vIbdR8S6EOp4pOct4SCNCoSHAkOZDDfr5kr2iiU/nHMkDjZKzHQjzPYF+BlK1EMb X-Received: by 10.194.77.233 with SMTP id v9mr9315194wjw.24.1418238147702; Wed, 10 Dec 2014 11:02:27 -0800 (PST) Received: from pistachio.icx.intel.com ([83.217.123.106]) by mx.google.com with ESMTPSA id pl1sm7449533wic.16.2014.12.10.11.02.26 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Dec 2014 11:02:27 -0800 (PST) From: Thomas Wood To: intel-gfx@lists.freedesktop.org Date: Wed, 10 Dec 2014 19:02:25 +0000 Message-Id: <1418238145-4343-1-git-send-email-thomas.wood@intel.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <20141208174239.GH27182@phenom.ffwll.local> References: <20141208174239.GH27182@phenom.ffwll.local> Subject: [Intel-gfx] [PATCH i-g-t v2] lib: add a function to lock memory into RAM X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add a function to lock memory into RAM and use it in the gem_tiled_swapping test to reduce the amount of allocated memory required to force swapping. This also reduces the amount of time required for the test to complete, since the data set is smaller. The following durations were recorded on a haswell system before this change: Subtest non-threaded: SUCCESS (55.889s) Subtest threaded: SUCCESS (810.532s) and after: Subtest non-threaded: SUCCESS (11.804s) Subtest threaded: SUCCESS (268.336s) v2: add various assertions and requirements and make sure gem_tiled_swapping works on systems with less RAM (Daniel Vetter) Signed-off-by: Thomas Wood --- lib/igt_aux.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++ lib/igt_aux.h | 3 +++ tests/gem_tiled_swapping.c | 10 +++++++- 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/lib/igt_aux.c b/lib/igt_aux.c index 3051d84..d8d8577 100644 --- a/lib/igt_aux.c +++ b/lib/igt_aux.c @@ -601,3 +601,60 @@ struct type_name connector_type_names[] = { }; type_name_fn(connector_type) + + +/** + * igt_lock_mem: @size: the amount of memory to lock into RAM, in MB + * + * Allocate @size MB of memory and lock it into RAM. This releases any + * previously locked memory. + * + * Use #igt_unlock_mem to release the currently locked memory. + */ +static char *locked_mem; +static size_t locked_size; + +void igt_lock_mem(size_t size) +{ + long pagesize = sysconf(_SC_PAGESIZE); + size_t i; + int ret; + + if (size == 0) { + return; + } + + if (locked_mem) { + igt_unlock_mem(); + igt_warn("Unlocking previously locked memory.\n"); + } + + locked_size = size * 1024 * 1024; + + locked_mem = malloc(locked_size); + igt_require_f(locked_mem, + "Could not allocate enough memory to lock.\n"); + + /* write into each page to ensure it is allocated */ + for (i = 0; i < locked_size; i += pagesize) + locked_mem[i] = i; + + ret = mlock(locked_mem, locked_size); + igt_assert_f(ret == 0, "Could not lock memory into RAM.\n"); +} + +/** + * igt_unlock_mem: + * + * Release and free the RAM used by #igt_lock_mem. + */ +void igt_unlock_mem(void) +{ + if (!locked_mem) + return; + + munlock(locked_mem, locked_size); + + free(locked_mem); + locked_mem = NULL; +} diff --git a/lib/igt_aux.h b/lib/igt_aux.h index 63e1b06..c420b3f 100644 --- a/lib/igt_aux.h +++ b/lib/igt_aux.h @@ -96,4 +96,7 @@ void intel_require_memory(uint32_t count, uint32_t size, unsigned mode); (b) = _tmp; \ } while (0) +void igt_lock_mem(size_t size); +void igt_unlock_mem(void); + #endif /* IGT_AUX_H */ diff --git a/tests/gem_tiled_swapping.c b/tests/gem_tiled_swapping.c index 3fac52f..1637ec7 100644 --- a/tests/gem_tiled_swapping.c +++ b/tests/gem_tiled_swapping.c @@ -70,6 +70,7 @@ IGT_TEST_DESCRIPTION("Exercise swizzle code for swapping."); static uint32_t current_tiling_mode; #define PAGE_SIZE 4096 +#define AVAIL_RAM 512 static uint32_t create_bo_and_fill(int fd) @@ -151,13 +152,20 @@ igt_main int fd, n, count, num_threads; igt_fixture { + size_t lock_size; + current_tiling_mode = I915_TILING_X; intel_purge_vm_caches(); fd = drm_open_any(); + + /* lock RAM, leaving only 512MB available */ + lock_size = min(0, intel_get_total_ram_mb() - AVAIL_RAM); + igt_lock_mem(lock_size); + /* need slightly more than available memory */ - count = intel_get_total_ram_mb() + intel_get_total_swap_mb() / 4; + count = lock_size * 1.25; bo_handles = calloc(count, sizeof(uint32_t)); igt_assert(bo_handles);