DPDK patches and discussions
 help / color / mirror / Atom feed
From: Bruce Richardson <bruce.richardson@intel.com>
To: "Burakov, Anatoly" <anatoly.burakov@intel.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>, dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v2] usertools: add huge page setup script
Date: Fri, 4 Sep 2020 16:10:14 +0100	[thread overview]
Message-ID: <20200904151014.GB305@bricha3-MOBL.ger.corp.intel.com> (raw)
In-Reply-To: <a1652530-40fb-c026-3cd2-d2ca8197958d@intel.com>

On Fri, Sep 04, 2020 at 03:58:03PM +0100, Burakov, Anatoly wrote:
> On 03-Sep-20 11:48 PM, Stephen Hemminger wrote:
> > This is an improved version of the setup of huge pages
> > bases on earlier DPDK setup. Differences are:
> >     * it autodetects NUMA vs non NUMA
> >     * it allows setting different page sizes
> >       recent kernels support multiple sizes.
> >     * it accepts a parameter in bytes (not pages).
> > 
> > If necessary the steps of clearing old settings and mounting/umounting
> > can be done individually.
> > 
> > 
> > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> > ---
> > v2 -- rewrite in python
> > 	The script is python3 only because supporting older versions
> > 	no longer makes any sense.
> > 
> >   usertools/hugepage-setup.py | 317 ++++++++++++++++++++++++++++++++++++
> >   1 file changed, 317 insertions(+)
> >   create mode 100644 usertools/hugepage-setup.py
> > 
> > diff --git a/usertools/hugepage-setup.py b/usertools/hugepage-setup.py
> > new file mode 100644
> > index 000000000000..8e7642428d9e
> > --- /dev/null
> > +++ b/usertools/hugepage-setup.py
> > @@ -0,0 +1,317 @@
> > +# Copyright (c) 2020 Microsoft Corporation
> > +#
> > +# Script to query and setup huge pages for DPDK applications.
> > +
> > +import sys
> > +import os
> > +import re
> > +import getopt
> > +import glob
> > +from os.path import exists, basename
> > +
> > +# convention for where to mount huge pages
> > +hugedir = '/dev/hugepages'
> 
> This isn't a "convention", this is a default systemd mountpoint.
> 
> > +
> > +# command-line flags
> > +show_flag = None
> > +reserve_kb = None
> > +clear_flag = None
> > +hugepagesize_kb = None
> > +mount_flag = None
> > +unmount_flag = None
> > +
> > +
> > +def usage():
> > +    '''Print usage information for the program'''
> > +    global hugedir
> > +    mnt = hugedir
> > +    argv0 = basename(sys.argv[0])
> > +    print("""
> > +Usage:
> > +------
> > +    %(argv0)s [options]
> > +
> > +Options:
> > +    --help, --usage:
> > +        Display usage information and quit
> > +
> > +    -s, --show:
> > +        Print the current huge page configuration.
> > +
> > +    --setup:
> > +        Simplified version of clear, umount, reserve, mount operations
> > +
> > +    -c, --clear:
> > +        Remove all huge pages
> > +
> > +    -r, --reserve:
> > +        Reserve huge pages. The size specified is in bytes, with
> > +        optional K, M or G suffix. The size must be a multiple
> > +        of the page size.
> > +
> > +    -p, --pagesize
> > +        Choose page size to use. If not specified, the default
> > +        system page size will be used.
> > +
> > +    -m, --mount
> > +        Mount the system huge page directory %(mnt)s
> > +
> > +    -u, --umount
> > +        Unmount the system huge page directory %(mnt)s
> > +
> > +
> > +Examples:
> > +---------
> > +
> > +To display current huge page settings:
> > +    %(argv0)s -s
> > +
> > +To a complete setup of with 2 Gigabyte of 1G huge pages:
> > +    %(argv0)s -p 1G --setup 2G
> > +
> > +Equivalent to:
> > +    %(argv0)s -p 1G -c -u -r 2G -m
> > +
> > +To clear existing huge page settings and umount %(mnt)s
> > +    %(argv0)s -c -u
> > +
> > +    """ % locals())
> > +
> > +
> > +def fmt_memsize(sz):
> > +    '''Format memory size in conventional format'''
> > +    sz_kb = int(sz)
> > +    if sz_kb >= 1024 * 1024:
> > +        return '{}Gb'.format(sz_kb / (1024 * 1024))
> > +    elif sz_kb >= 1024:
> > +        return '{}Mb'.format(sz_kb / 1024)
> > +    else:
> > +        return '{}Kb'.format(sz_kb)
> 
> I've lost count how many times i've had to reimplement this code, but there
> is an easier way :) Off the top of my head,
> 
> idx = log2(sz)
> # every 10th power of 2
> return '{}{}b'.format(sz, ' kMG'[int(idx) / 10])
> 
> or something close to that.
> 

Another minor nit, since these are memory sizes, not bandwidth rates, it's
bytes not bits, so the "b" should be "B" in all the prints, whatever way
it's calculated.

  reply	other threads:[~2020-09-04 15:10 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-18 12:39 [dpdk-dev] [RFC] usertools: Replace dpdk-setup with a python curses based script Sarosh Arif
2020-08-18 17:09 ` Stephen Hemminger
2020-09-01 13:30   ` Thomas Monjalon
2020-09-01 16:56     ` [dpdk-dev] [PATCH] usertools: add huge page setup script Stephen Hemminger
2020-09-02  9:47       ` Ferruh Yigit
2020-09-02  9:55       ` Bruce Richardson
2020-09-02 14:50         ` Stephen Hemminger
2020-09-03 22:48       ` [dpdk-dev] [PATCH v2] " Stephen Hemminger
2020-09-04  9:22         ` Bruce Richardson
2020-09-04 17:18           ` Stephen Hemminger
2020-09-04 14:58         ` Burakov, Anatoly
2020-09-04 15:10           ` Bruce Richardson [this message]
2020-09-04 18:35       ` [dpdk-dev] [PATCH] " Stephen Hemminger
2020-09-04 23:13         ` Ferruh Yigit
2020-09-04 23:30           ` Stephen Hemminger
2020-09-05  3:07       ` [dpdk-dev] [PATCH v4] " Stephen Hemminger
2020-09-06  3:42       ` [dpdk-dev] [PATCH v5] " Stephen Hemminger
2020-09-07  8:54         ` Ferruh Yigit
2020-09-07  8:58           ` Bruce Richardson
2020-09-07 17:20             ` Stephen Hemminger
2020-09-08  8:18               ` Bruce Richardson
2020-09-08 14:58                 ` Stephen Hemminger
2020-09-08 21:49             ` Thomas Monjalon
2020-09-08 15:17       ` [dpdk-dev] [PATCH v6] usertools: add a " Stephen Hemminger
2020-09-09 11:46         ` Ferruh Yigit
2020-09-09 19:26         ` Ajit Khaparde
2020-09-09 18:51       ` [dpdk-dev] [PATCH v7] " Stephen Hemminger
2020-09-14 15:31         ` Burakov, Anatoly
2020-10-20 18:01           ` Ferruh Yigit
2020-11-22 21:39             ` Thomas Monjalon
2020-09-24  4:31         ` Stephen Hemminger
2020-11-22 21:30           ` Thomas Monjalon
2020-11-23  0:12             ` Stephen Hemminger
2020-11-24 17:45             ` Stephen Hemminger
2020-11-24 21:37               ` Thomas Monjalon
2020-11-25  9:16                 ` Ferruh Yigit
2020-08-28 12:09 ` [dpdk-dev] [RFC] usertools: Replace dpdk-setup with a python curses based script Morten Brørup

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200904151014.GB305@bricha3-MOBL.ger.corp.intel.com \
    --to=bruce.richardson@intel.com \
    --cc=anatoly.burakov@intel.com \
    --cc=dev@dpdk.org \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).