[dpdk-dev] [PATCH 2/4] mem: add API to obstain memory-backed file info
Pavel Fedin
p.fedin at samsung.com
Mon Jan 11 12:43:54 CET 2016
Hello!
> -----Original Message-----
> From: Jianfeng Tan [mailto:jianfeng.tan at intel.com]
> Sent: Sunday, January 10, 2016 2:43 PM
> To: dev at dpdk.org
> Cc: rich.lane at bigswitch.com; yuanhan.liu at linux.intel.com; mst at redhat.com;
> nakajima.yoshihiro at lab.ntt.co.jp; huawei.xie at intel.com; mukawa at igel.co.jp;
> p.fedin at samsung.com; michael.qiu at intel.com; ann.zhuangyanying at huawei.com; Jianfeng Tan
> Subject: [PATCH 2/4] mem: add API to obstain memory-backed file info
"obtain" - typo in subject
>
> A new API named rte_eal_get_backfile_info() and a new data
> struct back_file is added to obstain information of memory-
> backed file info.
>
> Signed-off-by: Huawei Xie <huawei.xie at intel.com>
> Signed-off-by: Jianfeng Tan <jianfeng.tan at intel.com>
> ---
> lib/librte_eal/common/include/rte_memory.h | 16 +++++++++++++
> lib/librte_eal/linuxapp/eal/eal_memory.c | 37 ++++++++++++++++++++++++++++++
> 2 files changed, 53 insertions(+)
>
> diff --git a/lib/librte_eal/common/include/rte_memory.h
> b/lib/librte_eal/common/include/rte_memory.h
> index 9c9e40f..75ef8db 100644
> --- a/lib/librte_eal/common/include/rte_memory.h
> +++ b/lib/librte_eal/common/include/rte_memory.h
> @@ -109,6 +109,22 @@ struct rte_memseg {
> } __rte_packed;
>
> /**
> + * This struct is used to store information about memory-backed file that
> + * we mapped in memory initialization.
> + */
> +struct back_file {
> + void *addr; /**< virtual addr */
> + size_t size; /**< the page size */
> + char filepath[PATH_MAX]; /**< path to backing file on filesystem */
> +};
> +
> +/**
> + * Get the hugepage file information. Caller to free.
> + * Return number of hugepage files used.
> + */
> +int rte_eal_get_backfile_info(struct back_file **);
> +
> +/**
> * Lock page in physical memory and prevent from swapping.
> *
> * @param virt
> diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c
> b/lib/librte_eal/linuxapp/eal/eal_memory.c
> index 2bb1163..6ca1404 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_memory.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
> @@ -758,6 +758,9 @@ sort_by_physaddr(struct hugepage_file *hugepg_tbl, struct hugepage_info
> *hpi)
> return 0;
> }
>
> +static struct hugepage_file *hugepage_files;
> +static int num_hugepage_files;
> +
> /*
> * Uses mmap to create a shared memory area for storage of data
> * Used in this file to store the hugepage file map on disk
> @@ -776,9 +779,29 @@ create_shared_memory(const char *filename, const size_t mem_size)
> retval = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
> close(fd);
>
> + hugepage_files = retval;
> + num_hugepage_files = mem_size / (sizeof(struct hugepage_file));
> +
> return retval;
> }
>
> +int
> +rte_eal_get_backfile_info(struct back_file **p)
> +{
> + struct back_file *backfiles;
> + int i, num_backfiles = num_hugepage_files;
> +
> + backfiles = malloc(sizeof(struct back_file) * num_backfiles);
> + for (i = 0; i < num_backfiles; ++i) {
> + backfiles[i].addr = hugepage_files[i].final_va;
> + backfiles[i].size = hugepage_files[i].size;
> + strcpy(backfiles[i].filepath, hugepage_files[i].filepath);
> + }
> +
> + *p = backfiles;
> + return num_backfiles;
> +}
> +
> /*
> * this copies *active* hugepages from one hugepage table to another.
> * destination is typically the shared memory.
> @@ -1157,6 +1180,20 @@ rte_eal_hugepage_init(void)
> mcfg->memseg[0].len = internal_config.memory;
> mcfg->memseg[0].socket_id = socket_id;
>
> + hugepage = create_shared_memory(eal_hugepage_info_path(),
> + sizeof(struct hugepage_file));
> + hugepage->orig_va = addr;
> + hugepage->final_va = addr;
> + hugepage->physaddr = rte_mem_virt2phy(addr);
> + hugepage->size = pagesize;
> + hugepage->socket_id = socket_id;
> + hugepage->file_id = 0;
> + hugepage->memseg_id = 0;
> +#ifdef RTE_EAL_SINGLE_FILE_SEGMENTS
> + hugepage->repeated = internal_config.memory / pagesize;
> +#endif
> + strncpy(hugepage->filepath, filepath, MAX_HUGEPAGE_PATH);
> +
> close(fd);
>
> return 0;
> --
> 2.1.4
Kind regards,
Pavel Fedin
Expert Engineer
Samsung Electronics Research center Russia
More information about the dev
mailing list