Hello chrubis,
On 04/16/2013 12:26 AM, [email protected] wrote:
> Hi!
>>>> + * or not.
>>>> + */
>>>> + sleep(10);
>>>> + count++;
>>>> +
>>>> + SAFE_FILE_SCANF(cleanup, PATH_KHPD "pages_collapsed",
>>>> + "%ld", &pages_collapsed);
>>>> + SAFE_FILE_SCANF(cleanup, PATH_KHPD "max_ptes_none",
>>>> + "%ld", &max_ptes_none);
>>>> + SAFE_FILE_SCANF(cleanup, PATH_KHPD "pages_to_scan",
>>>> + "%ld", &pages_to_scan);
>>>> +
>>>> + if (pages_collapsed != old_pages_collapsed ||
>>>> + max_ptes_none != old_max_ptes_none ||
>>>> + pages_to_scan != old_pages_to_scan) {
>>>> + old_pages_collapsed = pages_collapsed;
>>>> + old_max_ptes_none = max_ptes_none;
>>>> + old_pages_to_scan = pages_to_scan;
>>>> + } else {
>>>> + changing = 0;
>>>> + }
>>>> + }
>>>> +
>>>> + tst_resm(TINFO, "khugepaged daemon takes %ds to scan all thp pages",
>>>> + count * 10);
>>>> +}
>>> Ah, so it acutally does polling, this is fine.
>>>
>>> How long scanning takes. If it is about 10 seconds, we should poll
>>> faster so that the testcase has chance to finish reasonably fast.
>>> (if it takes 10 seconds and we miss the first windows it will sleep
>>> doing noting for another ten seconds)
>> so how about 5 seconds? I will test the value on different systems.
> If the scan takes 10 seconds to finish I would go for 2 seconds sleep as
> that can increase the duration maximally by 20%, which is not as bad as
> 100% or 50%. The overhead of opening and reading a file should be really
> small.
IMO, 2 seconds is a little small for khugepaged to mark or allocate
anonymous huge page,
and khugepaged can't scan until the child finish memset(), which will
also take some time.
so I used 5s in new version, and I tested on several machine, all
passed, please review it again.
>
>>>> + write_file(path, "always");
>>> Where this came from? Does the function check for failures? Why not to
>>> use SAFE_FILE_PRINTF() as the rest of the file?
>> yes, there's some confused issue here.
>>
>> but I have tried to use SAFE_FILE_PRINTF, but it didn't work fine for
>> transparent_hugepage/enabled,
>> if # cat /sys/kernel/mm/transparent_hugepage/enabled
>> always [madvise] never
>> SAFE_FILE_PRINTF only get 'always', expected 'madvise'
>> if # cat /sys/kernel/mm/transparent_hugepage/enabled
>> [always] madvise never
>> SAFE_FILE_PRINTF get '[always]', expected 'always'
>>
>> I didn't find the reason why SAFE_FILE_PRINTF couldn't get the expected
>> value?
> That is strange, the only difference is that SAFE_FILE_PRINTF() uses
> FILE interface while write_file() uses file descriptor directly.
> Otherwise they should do exactly the same in this case. If they don't
> something is broken.
I solved it in new version, the reason is that
transparent_hugepage/enabled contains
three strings, like "[always] madvise never", it gets '[always]' or
'always' if only use one
"%s" format to get the value.
in the new version, I used "$[^\n]" format to get the value, which can
regard one line
as single string:
SAFE_FILE_SCANF(NULL, PATH_THP "enabled", "%[^\n]", pre_thp_enabled);
Thanks,
Zhouping
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list