DPDK patches and discussions
 help / color / mirror / Atom feed
From: "shesha Sreenivasamurthy (shesha)" <shesha@cisco.com>
To: "dev@dpdk.org" <dev@dpdk.org>
Subject: [dpdk-dev] [PATCH] mem: Command line option to delete hugepage backing files
Date: Wed, 14 Oct 2015 17:05:04 +0000	[thread overview]
Message-ID: <D243D903.23656%shesha@cisco.com> (raw)
In-Reply-To: <1444817040-7974-1-git-send-email-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   | 37 ++++++++++++++++++++++++++++++
4 files changed, 52 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"
       "  --"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..016cac6 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memory.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
@@ -786,6 +786,37 @@ copy_hugepages_to_shared_mem(struct hugepage_file * dst, int dest_size,
return 0;
}
+static int
+unlink_hugepage_bkup_files(struct hugepage_file *hugepg_tbl,
+ struct hugepage_info *hpi,
+ unsigned num_hp_info)
+{
+ unsigned socket, size;
+ int page, nrpages = 0;
+
+ /* get total number of hugepages */
+ for (size = 0; size < num_hp_info; size++)
+ for (socket = 0; socket < RTE_MAX_NUMA_NODES; socket++)
+ nrpages += internal_config.hugepage_info[size].num_pages[socket];
+
+ for (size = 0; size < num_hp_info; size++) {
+ for (socket = 0; socket < RTE_MAX_NUMA_NODES; socket++) {
+ for (page = 0; page < nrpages; page++) {
+ struct hugepage_file *hp = &hugepg_tbl[page];
+ if ((hp->size == hpi[size].hugepage_sz) &&
+ (hp->socket_id == (int) socket) &&
+                        hp->final_va != NULL) {
+                    if (unlink(hp->filepath)) {
+                        RTE_LOG(WARNING, EAL, "%s(): Removing %s failed: %s\n",
+                                __func__, hp->filepath, strerror(errno));
+                    }
+                }
+ } /* foreach page */
+ } /* foreach socket */
+ } /* foreach pagesize */
+ return 0;
+}
+
/*
  * unmaps hugepages that are not going to be used. since we originally allocate
  * ALL hugepages (not just those we need), additional unmapping needs to be done.
@@ -1290,6 +1321,12 @@ rte_eal_hugepage_init(void)
}
/* free the temporary hugepage table */
+ if (internal_config.hugepage_unlink &&
+        unlink_hugepage_bkup_files(tmp_hp, used_hp,
+ internal_config.num_hugepage_sizes) < 0) {
+ RTE_LOG(ERR, EAL, "Unlinking hugepage backing files failed!\n");
+ goto fail;
+ }
free(tmp_hp);
tmp_hp = NULL;
--
1.9.1

       reply	other threads:[~2015-10-14 17:05 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1444817040-7974-1-git-send-email-shesha@cisco.com>
2015-10-14 17:05 ` shesha Sreenivasamurthy (shesha) [this message]
2015-10-14 18:59 ` shesha Sreenivasamurthy (shesha)
2015-10-20 15:23   ` Gonzalez Monroy, Sergio
     [not found]   ` <1445335331-9050-1-git-send-email-shesha@cisco.com>
2015-10-20 17:04     ` [dpdk-dev] [PATCH v2] mem: command " shesha Sreenivasamurthy (shesha)
2015-10-20 17:29     ` shesha Sreenivasamurthy (shesha)
2015-10-21 14:25       ` Sergio Gonzalez Monroy

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=D243D903.23656%shesha@cisco.com \
    --to=shesha@cisco.com \
    --cc=dev@dpdk.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).