Message ID | 1463424720-32215-2-git-send-email-maxim.uvarov@linaro.org |
---|---|
State | New |
Headers | show |
For this series: Reviewed-by: Bill Fischofer <bll.fischofer@linaro.org: On Mon, May 16, 2016 at 1:51 PM, Maxim Uvarov <maxim.uvarov@linaro.org> wrote: > odp_shm_reserve() relays on huge page size to round up > requested size. If 1 Gb pages present than parser takes > it first as first alphabetical file name in sysfs. That > lead to issue where all allocations wants 1 GB HP. This > patch takes system default huge pages which are usually 2Mb, > and has to be enough for existence odp example apps and > validation tests. > > Reported-by: B.Nousilal <bnousilal@gmail.com> > Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> > --- > platform/linux-generic/odp_system_info.c | 43 > +++++++++++--------------------- > 1 file changed, 15 insertions(+), 28 deletions(-) > > diff --git a/platform/linux-generic/odp_system_info.c > b/platform/linux-generic/odp_system_info.c > index 0f1f3c7..8e95e05 100644 > --- a/platform/linux-generic/odp_system_info.c > +++ b/platform/linux-generic/odp_system_info.c > @@ -24,12 +24,9 @@ > #include <sys/types.h> > #include <dirent.h> > > - > #define CACHE_LNSZ_FILE \ > "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size" > > -#define HUGE_PAGE_DIR "/sys/kernel/mm/hugepages" > - > /* > * Report the number of logical CPUs detected at boot time > */ > @@ -77,37 +74,27 @@ static int systemcpu_cache_line_size(void) > #endif > > > -static int huge_page_size(void) > +static uint64_t default_huge_page_size(void) > { > - DIR *dir; > - struct dirent *dirent; > - int size = 0; > + char str[1024]; > + unsigned long sz; > + FILE *file; > > - dir = opendir(HUGE_PAGE_DIR); > - if (dir == NULL) { > - ODP_ERR("%s not found\n", HUGE_PAGE_DIR); > - return 0; > - } > - > - while ((dirent = readdir(dir)) != NULL) { > - int temp = 0; > - > - if (sscanf(dirent->d_name, "hugepages-%i", &temp) != 1) > - continue; > - > - if (temp > size) > - size = temp; > - } > + file = fopen("/proc/meminfo", "rt"); > > - if (closedir(dir)) { > - ODP_ERR("closedir failed\n"); > - return 0; > + while (fgets(str, sizeof(str), file) != NULL) { > + if (sscanf(str, "Hugepagesize: %8lu kB", &sz) == 1) { > + ODP_DBG("defaut hp size is %" PRIu64 " kB\n", sz); > + fclose(file); > + return (uint64_t)sz * 1024; > + } > } > > - return size * 1024; > + ODP_ERR("unable to get default hp size\n"); > + fclose(file); > + return 0; > } > > - > /* > * Analysis of /sys/devices/system/cpu/ files > */ > @@ -137,7 +124,7 @@ static int systemcpu(odp_system_info_t *sysinfo) > return -1; > } > > - sysinfo->huge_page_size = huge_page_size(); > + sysinfo->huge_page_size = default_huge_page_size(); > > return 0; > } > -- > 2.7.1.250.gff4ea60 > > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org > https://lists.linaro.org/mailman/listinfo/lng-odp >
Merged, Maxim. On 05/16/16 23:53, Bill Fischofer wrote: > For this series: > > Reviewed-by: Bill Fischofer <bll.fischofer@linaro.org > <mailto:bll.fischofer@linaro.org>: > > On Mon, May 16, 2016 at 1:51 PM, Maxim Uvarov <maxim.uvarov@linaro.org > <mailto:maxim.uvarov@linaro.org>> wrote: > > odp_shm_reserve() relays on huge page size to round up > requested size. If 1 Gb pages present than parser takes > it first as first alphabetical file name in sysfs. That > lead to issue where all allocations wants 1 GB HP. This > patch takes system default huge pages which are usually 2Mb, > and has to be enough for existence odp example apps and > validation tests. > > Reported-by: B.Nousilal <bnousilal@gmail.com > <mailto:bnousilal@gmail.com>> > Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org > <mailto:maxim.uvarov@linaro.org>> > --- > platform/linux-generic/odp_system_info.c | 43 > +++++++++++--------------------- > 1 file changed, 15 insertions(+), 28 deletions(-) > > diff --git a/platform/linux-generic/odp_system_info.c > b/platform/linux-generic/odp_system_info.c > index 0f1f3c7..8e95e05 100644 > --- a/platform/linux-generic/odp_system_info.c > +++ b/platform/linux-generic/odp_system_info.c > @@ -24,12 +24,9 @@ > #include <sys/types.h> > #include <dirent.h> > > - > #define CACHE_LNSZ_FILE \ > "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size" > > -#define HUGE_PAGE_DIR "/sys/kernel/mm/hugepages" > - > /* > * Report the number of logical CPUs detected at boot time > */ > @@ -77,37 +74,27 @@ static int systemcpu_cache_line_size(void) > #endif > > > -static int huge_page_size(void) > +static uint64_t default_huge_page_size(void) > { > - DIR *dir; > - struct dirent *dirent; > - int size = 0; > + char str[1024]; > + unsigned long sz; > + FILE *file; > > - dir = opendir(HUGE_PAGE_DIR); > - if (dir == NULL) { > - ODP_ERR("%s not found\n", HUGE_PAGE_DIR); > - return 0; > - } > - > - while ((dirent = readdir(dir)) != NULL) { > - int temp = 0; > - > - if (sscanf(dirent->d_name, "hugepages-%i", &temp) > != 1) > - continue; > - > - if (temp > size) > - size = temp; > - } > + file = fopen("/proc/meminfo", "rt"); > > - if (closedir(dir)) { > - ODP_ERR("closedir failed\n"); > - return 0; > + while (fgets(str, sizeof(str), file) != NULL) { > + if (sscanf(str, "Hugepagesize: %8lu kB", &sz) == > 1) { > + ODP_DBG("defaut hp size is %" PRIu64 " > kB\n", sz); > + fclose(file); > + return (uint64_t)sz * 1024; > + } > } > > - return size * 1024; > + ODP_ERR("unable to get default hp size\n"); > + fclose(file); > + return 0; > } > > - > /* > * Analysis of /sys/devices/system/cpu/ files > */ > @@ -137,7 +124,7 @@ static int systemcpu(odp_system_info_t *sysinfo) > return -1; > } > > - sysinfo->huge_page_size = huge_page_size(); > + sysinfo->huge_page_size = default_huge_page_size(); > > return 0; > } > -- > 2.7.1.250.gff4ea60 > > _______________________________________________ > lng-odp mailing list > lng-odp@lists.linaro.org <mailto:lng-odp@lists.linaro.org> > https://lists.linaro.org/mailman/listinfo/lng-odp > >
diff --git a/platform/linux-generic/odp_system_info.c b/platform/linux-generic/odp_system_info.c index 0f1f3c7..8e95e05 100644 --- a/platform/linux-generic/odp_system_info.c +++ b/platform/linux-generic/odp_system_info.c @@ -24,12 +24,9 @@ #include <sys/types.h> #include <dirent.h> - #define CACHE_LNSZ_FILE \ "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size" -#define HUGE_PAGE_DIR "/sys/kernel/mm/hugepages" - /* * Report the number of logical CPUs detected at boot time */ @@ -77,37 +74,27 @@ static int systemcpu_cache_line_size(void) #endif -static int huge_page_size(void) +static uint64_t default_huge_page_size(void) { - DIR *dir; - struct dirent *dirent; - int size = 0; + char str[1024]; + unsigned long sz; + FILE *file; - dir = opendir(HUGE_PAGE_DIR); - if (dir == NULL) { - ODP_ERR("%s not found\n", HUGE_PAGE_DIR); - return 0; - } - - while ((dirent = readdir(dir)) != NULL) { - int temp = 0; - - if (sscanf(dirent->d_name, "hugepages-%i", &temp) != 1) - continue; - - if (temp > size) - size = temp; - } + file = fopen("/proc/meminfo", "rt"); - if (closedir(dir)) { - ODP_ERR("closedir failed\n"); - return 0; + while (fgets(str, sizeof(str), file) != NULL) { + if (sscanf(str, "Hugepagesize: %8lu kB", &sz) == 1) { + ODP_DBG("defaut hp size is %" PRIu64 " kB\n", sz); + fclose(file); + return (uint64_t)sz * 1024; + } } - return size * 1024; + ODP_ERR("unable to get default hp size\n"); + fclose(file); + return 0; } - /* * Analysis of /sys/devices/system/cpu/ files */ @@ -137,7 +124,7 @@ static int systemcpu(odp_system_info_t *sysinfo) return -1; } - sysinfo->huge_page_size = huge_page_size(); + sysinfo->huge_page_size = default_huge_page_size(); return 0; }
odp_shm_reserve() relays on huge page size to round up requested size. If 1 Gb pages present than parser takes it first as first alphabetical file name in sysfs. That lead to issue where all allocations wants 1 GB HP. This patch takes system default huge pages which are usually 2Mb, and has to be enough for existence odp example apps and validation tests. Reported-by: B.Nousilal <bnousilal@gmail.com> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> --- platform/linux-generic/odp_system_info.c | 43 +++++++++++--------------------- 1 file changed, 15 insertions(+), 28 deletions(-)