Message ID | 20170929161032.24394-4-matthew.auld@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Quoting Matthew Auld (2017-09-29 17:10:14) > Enable transparent-huge-pages through gemfs by mounting with > huge=within_size. > > v2: sprinkle within_size comment > > Signed-off-by: Matthew Auld <matthew.auld@intel.com> > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> It's the interface that exists, not necessarily the one that we want! Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> -Chris
On Fri, 2017-09-29 at 17:10 +0100, Matthew Auld wrote: > Enable transparent-huge-pages through gemfs by mounting with > huge=within_size. > > v2: sprinkle within_size comment > > Signed-off-by: Matthew Auld <matthew.auld@intel.com> > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> > --- > drivers/gpu/drm/i915/i915_gemfs.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_gemfs.c b/drivers/gpu/drm/i915/i915_gemfs.c > index 168d0bd98f60..b1b4d13d8f97 100644 > --- a/drivers/gpu/drm/i915/i915_gemfs.c > +++ b/drivers/gpu/drm/i915/i915_gemfs.c > @@ -24,6 +24,7 @@ > > #include <linux/fs.h> > #include <linux/mount.h> > +#include <linux/pagemap.h> > > #include "i915_drv.h" > #include "i915_gemfs.h" > @@ -41,6 +42,26 @@ int i915_gemfs_init(struct drm_i915_private *i915) > if (IS_ERR(gemfs)) > return PTR_ERR(gemfs); > > + /* > + * Enable huge-pages for objects that are at least HPAGE_PMD_SIZE, most > + * likely 2M. Note that within_size may overallocate huge-pages, if say > + * we allocate an object of size 2M + 4K, but under memory pressure Maybe append after "2M + 4K" "we may get 2M + 2M", to complete the sentence. Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Regards, Joonas
diff --git a/drivers/gpu/drm/i915/i915_gemfs.c b/drivers/gpu/drm/i915/i915_gemfs.c index 168d0bd98f60..b1b4d13d8f97 100644 --- a/drivers/gpu/drm/i915/i915_gemfs.c +++ b/drivers/gpu/drm/i915/i915_gemfs.c @@ -24,6 +24,7 @@ #include <linux/fs.h> #include <linux/mount.h> +#include <linux/pagemap.h> #include "i915_drv.h" #include "i915_gemfs.h" @@ -41,6 +42,26 @@ int i915_gemfs_init(struct drm_i915_private *i915) if (IS_ERR(gemfs)) return PTR_ERR(gemfs); + /* + * Enable huge-pages for objects that are at least HPAGE_PMD_SIZE, most + * likely 2M. Note that within_size may overallocate huge-pages, if say + * we allocate an object of size 2M + 4K, but under memory pressure + * should split any huge-pages which can be shrunk. + */ + + if (has_transparent_hugepage()) { + struct super_block *sb = gemfs->mnt_sb; + char options[] = "huge=within_size"; + int flags = 0; + int err; + + err = sb->s_op->remount_fs(sb, &flags, options); + if (err) { + kern_unmount(gemfs); + return err; + } + } + i915->mm.gemfs = gemfs; return 0;
Enable transparent-huge-pages through gemfs by mounting with huge=within_size. v2: sprinkle within_size comment Signed-off-by: Matthew Auld <matthew.auld@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/i915_gemfs.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)