Quoting Joonas Lahtinen (2017-09-27 09:52:42)
> On Mon, 2017-09-25 at 21:26 +0100, Chris Wilson wrote:
> > +static void *sys_thp_alloc(void *arg)
> > +{
> > +     struct sys_wait *w = arg;
> > +     struct timespec now;
> > +
> > +     clock_gettime(CLOCK_MONOTONIC, &now);
> > +     while (!done) {
> > +             const size_t sz = 2 << 20;
> > +             const struct timespec start = now;
> > +             void *ptr;
> > +
> > +             ptr = mmap(NULL, sz,
> > +                        PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS,
> > +                        -1, 0);
> > +             assert(ptr != MAP_FAILED);
> > +             madvise(ptr, sz, MADV_HUGEPAGE);
> > +             for (int page = 0; page < 2 << 20 >> 12; page++)
> > +                     *((volatile uint32_t *)ptr + (page << 12 >> 2)) = 0;
> 
> But what's the point in this iteration, we iterate from 0 to 512 page
> index (sz/PAGE_SIZE would be so much easier) and then write to to not
> each page but interleave four page writes per page and 3/4 of pages
> never get written? If this is intentional, please drop a comment.

-               for (int page = 0; page < 2 << 20 >> 12; page++)
-                       *((volatile uint32_t *)ptr + (page << 12 >> 2)) = 0;
+               for (size_t page = 0; page < sz; page += PAGE_SIZE)
+                       *(volatile uint32_t *)(ptr + page) = 0;
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to