Hi Shesha,

A few format comments:
- Spacing/tabbing is all wrong for some reason, need to be fixed.
- Signed-off is missing, see 'Contribute by sending patches' in 
http://dpdk.org/dev.
- No capital letters in the commit title - there is a patch submitted 
with more detailed info regarding patch format, etc - 
http://dpdk.org/dev/patchwork/patch/7762/

On 14/10/2015 19:59, 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 therefore, it is 
> better it unlinks it.
>
> ---
> 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,
Just a nit, maybe just call this function unlink_hugepage_files

Sergio
> + 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 via email to