<br><br><div class="gmail_quote">On Tue, Feb 1, 2011 at 3:53 PM, Jason Nymble <span dir="ltr">&lt;<a href="mailto:jason.nymble@gmail.com">jason.nymble@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I was using memset on a reserved area of memory (64bit x86 kernel and system), and noticed that as soon as I exceed a size of 2GB, the function becomes extremely slow, e.g just below 2GB it takes typically about 0.3s, and just above 2GB is takes about 39s to complete...<br>

<br>
I tried tracing the eventual function that is called in the kernel, and I think it resolves to the below (even on x86_64 if I&#39;m not mistaken):<br>
static inline void *__memset_generic(void *s, char c, size_t count)<br>
{<br>
        int d0, d1;<br>
        asm volatile(&quot;rep\n\t&quot;<br>
                     &quot;stosb&quot;<br>
                     : &quot;=&amp;c&quot; (d0), &quot;=&amp;D&quot; (d1)<br>
                     : &quot;a&quot; (c), &quot;1&quot; (s), &quot;0&quot; (count)<br>
                     : &quot;memory&quot;);<br>
        return s;<br>
}<br>
<br>
size_t is defined as (unsigned long) on my platform, but I suspect the d0 and d1 variables above cause problems because they are int... Is this a kernel bug, or known limitation, or what?<br>
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</blockquote></div><br><div><br></div><div>Hi Jason,</div><div><br></div><div>How did you allocate the memory? What is the size of physical memory that is attached to your machine ?</div><div><br></div><div>-Vinit</div>