DPDK patches and discussions
 help / color / mirror / Atom feed
From: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
To: "shesha Sreenivasamurthy (shesha)" <shesha@cisco.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH v4] mem: command line option to delete hugepage backing files
Date: Thu, 22 Oct 2015 10:21:31 +0100	[thread overview]
Message-ID: <5628AA9B.3090201@intel.com> (raw)
In-Reply-To: <D24D175E.23E76%shesha@cisco.com>

On 21/10/2015 18:21, shesha Sreenivasamurthy (shesha) wrote:
> When an application using huge-pages crash or exists, the hugetlbfs
> backing files are not cleaned up. This is a patch to clean those files.
> There are multi-process DPDK applications that may be benefited by those
> backing files. Therefore, I have made that configurable so that the
> application that does not need those backing files can remove them, thus
> not changing the current default behavior. The application itself can
> clean it up, however the rationale behind DPDK cleaning it up is, DPDK
> created it and therefore, it is better it unlinks it.
>
>
> Signed-off-by: Shesha Sreenivasamurthy <shesha@cisco.com>
> ---
>   lib/librte_eal/common/eal_common_options.c | 12 ++++++++++++
>   lib/librte_eal/common/eal_internal_cfg.h   |  1 +
>   lib/librte_eal/common/eal_options.h        |  2 ++
>   lib/librte_eal/linuxapp/eal/eal_memory.c   | 12 ++++++++++++
>   4 files changed, 27 insertions(+)
>
> diff --git a/lib/librte_eal/common/eal_common_options.c
> b/lib/librte_eal/common/eal_common_options.c
> index 1f459ac..5fe6374 100644
> --- a/lib/librte_eal/common/eal_common_options.c
> +++ b/lib/librte_eal/common/eal_common_options.c
> @@ -79,6 +79,7 @@ eal_long_options[] = {
>   	{OPT_MASTER_LCORE,      1, NULL, OPT_MASTER_LCORE_NUM     },
>   	{OPT_NO_HPET,           0, NULL, OPT_NO_HPET_NUM          },
>   	{OPT_NO_HUGE,           0, NULL, OPT_NO_HUGE_NUM          },
> +	{OPT_HUGE_UNLINK,       0, NULL, OPT_HUGE_UNLINK_NUM      },
>   	{OPT_NO_PCI,            0, NULL, OPT_NO_PCI_NUM           },
>   	{OPT_NO_SHCONF,         0, NULL, OPT_NO_SHCONF_NUM        },
>   	{OPT_PCI_BLACKLIST,     1, NULL, OPT_PCI_BLACKLIST_NUM    },
> @@ -722,6 +723,10 @@ eal_parse_common_option(int opt, const char *optarg,
>   		conf->no_hugetlbfs = 1;
>   		break;
>   
> +	case OPT_HUGE_UNLINK_NUM:
> +		conf->hugepage_unlink = 1;
> +		break;
> +
>   	case OPT_NO_PCI_NUM:
>   		conf->no_pci = 1;
>   		break;
> @@ -856,6 +861,12 @@ eal_check_common_options(struct internal_config
> *internal_cfg)
>   		return -1;
>   	}
>   
> +	if (internal_cfg->no_hugetlbfs && internal_cfg->hugepage_unlink) {
> +		RTE_LOG(ERR, EAL, "Option --"OPT_HUGE_UNLINK" cannot "
> +			"be specified together with --"OPT_NO_HUGE"\n");
> +		return -1;
> +	}
> +
>   	if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) != 0 &&
>   		rte_eal_devargs_type_count(RTE_DEVTYPE_BLACKLISTED_PCI) != 0) {
>   		RTE_LOG(ERR, EAL, "Options blacklist (-b) and whitelist (-w) "
> @@ -906,6 +917,7 @@ eal_common_usage(void)
>   	       "  -h, --help          This help\n"
>   	       "\nEAL options for DEBUG use only:\n"
>   	       "  --"OPT_NO_HUGE"           Use malloc instead of hugetlbfs\n"
> +	       "  --"OPT_HUGE_UNLINK"       Unlink hugepage backing file after
> initalization\n"
The line above (and a couple more in the patch) is getting wrapped, 
causing checkpatch to
report errors and git failing to apply the patch.
>   	       "  --"OPT_NO_PCI"            Disable PCI\n"
>   	       "  --"OPT_NO_HPET"           Disable HPET\n"
>   	       "  --"OPT_NO_SHCONF"         No shared config (mmap'd files)\n"
> diff --git a/lib/librte_eal/common/eal_internal_cfg.h
> b/lib/librte_eal/common/eal_internal_cfg.h
> index e2ecb0d..84b075f 100644
> --- a/lib/librte_eal/common/eal_internal_cfg.h
> +++ b/lib/librte_eal/common/eal_internal_cfg.h
> @@ -64,6 +64,7 @@ struct internal_config {
>   	volatile unsigned force_nchannel; /**< force number of channels */
>   	volatile unsigned force_nrank;    /**< force number of ranks */
>   	volatile unsigned no_hugetlbfs;   /**< true to disable hugetlbfs */
> +	volatile unsigned hugepage_unlink; /** < true to unlink backing files */
>   	volatile unsigned xen_dom0_support; /**< support app running on Xen
> Dom0*/
>   	volatile unsigned no_pci;         /**< true to disable PCI */
>   	volatile unsigned no_hpet;        /**< true to disable HPET */
> diff --git a/lib/librte_eal/common/eal_options.h
> b/lib/librte_eal/common/eal_options.h
> index f6714d9..745f38c 100644
> --- a/lib/librte_eal/common/eal_options.h
> +++ b/lib/librte_eal/common/eal_options.h
> @@ -63,6 +63,8 @@ enum {
>   	OPT_PROC_TYPE_NUM,
>   #define OPT_NO_HPET           "no-hpet"
>   	OPT_NO_HPET_NUM,
> +#define OPT_HUGE_UNLINK        "huge-unlink"
> +	OPT_HUGE_UNLINK_NUM,
>   #define OPT_NO_HUGE           "no-huge"
>   	OPT_NO_HUGE_NUM,
>   #define OPT_NO_PCI            "no-pci"
> diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c
> b/lib/librte_eal/linuxapp/eal/eal_memory.c
> index ac2745e..c6f383b 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_memory.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
> @@ -348,6 +348,12 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl,
>   			|| (hugepage_sz == RTE_PGSIZE_16G)) {
>   			hugepg_tbl[i].final_va = hugepg_tbl[i].orig_va;
>   			hugepg_tbl[i].orig_va = NULL;
> +			if (internal_config.hugepage_unlink &&
> +				unlink(hugepg_tbl[i].filepath)) {
> +				RTE_LOG(ERR, EAL, "%s(): Removing %s failed: %s\n",
> +					__func__, hugepg_tbl[i].filepath, strerror(errno));
> +				return -1;
> +			}
>   			continue;
>   		}
>   #endif
> @@ -407,6 +413,12 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl,
>   		}
>   		else {
>   			hugepg_tbl[i].final_va = virtaddr;
> +			if (internal_config.hugepage_unlink &&
> +				unlink(hugepg_tbl[i].filepath)) {
> +				RTE_LOG(ERR, EAL, "%s(): Removing %s failed: %s\n",
> +					__func__, hugepg_tbl[i].filepath, strerror(errno));
> +				return -1;
> +			}
>   		}
>   
>   		/* set shared flock on the file. */
Current patch does not work when using -m or --socket-mem.
(detailed comments in 
http://dpdk.org/ml/archives/dev/2015-October/025746.html)

Sergio

      reply	other threads:[~2015-10-22  9:21 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1445422509-33553-1-git-send-email-shesha@cisco.com>
2015-10-21 17:21 ` shesha Sreenivasamurthy (shesha)
2015-10-22  9:21   ` Sergio Gonzalez Monroy [this message]

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=5628AA9B.3090201@intel.com \
    --to=sergio.gonzalez.monroy@intel.com \
    --cc=dev@dpdk.org \
    --cc=shesha@cisco.com \
    /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).