On 11 May 2016 at 11:43, Maxim Uvarov <[email protected]> wrote:
> > > On 11 May 2016 at 10:37, Savolainen, Petri (Nokia - FI/Espoo) < > [email protected]> wrote: > >> Other option would be to loop though the /sys/kernel/mm/hugepages >> directory and see which size are available (nr_hugepages > 0). > > > available 1 Gb page and 1000 2Mb page what is your decision which > allocation give what memory? I think in api we need modify call to return > list of available HPs with it's sizes. And if size is closer to maximum HP > size that we can give that HP for requested allocation. For now quickest > way is to use default HP and maybe change api for Tiger release. > > >> I'd expect that /sys/kernel/mm/... content is better "standardized" than >> proc file content. >> Does all platforms (x86, arm, mips, power, ...) have the same content in >> proc/meminfo? > > > yes, it has to. > > >> Does every platform spell "Hugepagesize:" the same way, or is there small >> variation like "HugePageSize:"... >> >> > It's common file for all arches: > look at hugetlb_report_node_meminfo() > hugetlb_report_meminfo() function. Maxim. > > https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/mm/hugetlb.c?id=refs/tags/v4.6-rc7 > which called directly when you read meminfo fs/proc/meminfo.c > > Maxim. > > > >> -Petri >> >> >> > -----Original Message----- >> > From: lng-odp [mailto:[email protected]] On Behalf Of >> Maxim >> > Uvarov >> > Sent: Tuesday, May 10, 2016 5:45 PM >> > To: [email protected] >> > Subject: [lng-odp] [PATCH] linux-generic: use default huge page size >> > >> > 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 <[email protected]> >> > Signed-off-by: Maxim Uvarov <[email protected]> >> > --- >> > platform/linux-generic/odp_system_info.c | 46 >> +++++++++++++-------------- >> > ----- >> > 1 file changed, 18 insertions(+), 28 deletions(-) >> > >> > diff --git a/platform/linux-generic/odp_system_info.c b/platform/linux- >> > generic/odp_system_info.c >> > index 0f1f3c7..14244c3 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,30 @@ static int systemcpu_cache_line_size(void) >> > #endif >> > >> > >> > -static int huge_page_size(void) >> > +static int default_huge_page_size(void) >> > { >> > - DIR *dir; >> > - struct dirent *dirent; >> > - int size = 0; >> > + char str[1024]; >> > + char *pos; >> > + uint64_t 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) { >> > + pos = strstr(str, "Hugepagesize:"); >> > + if (pos) { >> > + *(pos - 1) = '\0'; >> > + if (sscanf(pos, "@ %ld kB", &sz) == 1) { >> > + fclose(file); >> > + return sz * 1024; >> > + } >> > + } >> > } >> > >> > - return size * 1024; >> > + fclose(file); >> > + return 0; >> > } >> > >> > - >> > /* >> > * Analysis of /sys/devices/system/cpu/ files >> > */ >> > @@ -137,7 +127,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 >> > [email protected] >> > https://lists.linaro.org/mailman/listinfo/lng-odp >> > >
_______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
