<div dir="ltr">I agree !,just i think the problem is still there,memcpy is indeed faster in kernel than in user,i've tried both ways .<div>schedule might be to blame.</div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-07-09 22:04 GMT+08:00 Himanshu Jha <span dir="ltr"><<a href="mailto:himanshujha199640@gmail.com" target="_blank">himanshujha199640@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Bing,<br>
<span class=""><br>
On Sun, Jul 08, 2018 at 10:03:48PM +0800, bing zhu wrote:<br>
> void *p = malloc(4096 * max);<br>
> start = usec();<br>
> for (i = 0; i < max; i++) {<br>
> memcpy(p + i * 4096, page, 4096);<br>
> }<br>
> end = usec();<br>
> printf("%s : %d time use %lu us \n", __func__, max,end - start);<br>
> <br>
> static unsigned long usec(void)<br>
> {<br>
>         struct timeval tv;<br>
>         gettimeofday(&tv, 0);<br>
>         return (unsigned long)tv.tv_sec * 1000000 + tv.tv_usec;<br>
> }<br>
<br>
</span>I think for these benchmarking stuff, to evaluate the cycles and time<br>
correctly you should use the __rdtscp(more info at "AMD64 Architecture<br>
Programmer’s Manual Volume 3: General-Purpose and System Instructions"<br>
Pg 401)<br>
<br>
Userspace:<br>
------------------------------<wbr>------------------------------<wbr>----------<br>
#include <stdio.h><br>
#include <time.h><br>
#include <stdint.h><br>
#include <x86intrin.h><br>
<br>
volatile unsigned sink;<br>
unsigned int junk;<br>
<br>
int main (void)<br>
{<br>
clock_t start = clock();<br>
register uint64_t t=__rdtscp(&junk);<br>
<br>
for(size_t i=0; i<10000000; ++i)<br>
        sink++;<br>
<br>
t=__rdtscp(&junk)-t;<br>
clock_t end = clock();<br>
double cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;<br>
<br>
printf("for loop took %f seconds to execute %zu cylces\n", cpu_time_used, t);<br>
}<br>
------------------------------<wbr>------------------------------<wbr>---------<br>
<br>
Kernelspace:<br>
If you want to dig more:<br>
<a href="https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-32-ia-64-benchmark-code-execution-paper.pdf" rel="noreferrer" target="_blank">https://www.intel.com/content/<wbr>dam/www/public/us/en/<wbr>documents/white-papers/ia-32-<wbr>ia-64-benchmark-code-<wbr>execution-paper.pdf</a><br>
<br>
<br>
Thanks<br>
<span class="HOEnZb"><font color="#888888">-- <br>
Himanshu Jha<br>
Undergraduate Student<br>
Department of Electronics & Communication<br>
Guru Tegh Bahadur Institute of Technology<br>
</font></span></blockquote></div><br></div>