On 09/25/2013 04:14 PM, Srivatsa S. Bhat wrote: > @@ -605,16 +713,22 @@ static inline void __free_one_page(struct page *page, > buddy_idx = __find_buddy_index(combined_idx, order + 1); > higher_buddy = higher_page + (buddy_idx - combined_idx); > if (page_is_buddy(higher_page, higher_buddy, order + 1)) { > - list_add_tail(&page->lru, > - > &zone->free_area[order].free_list[migratetype].list); > + > + /* > + * Implementing an add_to_freelist_tail() won't be > + * very useful because both of them (almost) add to > + * the tail within the region. So we could potentially > + * switch off this entire "is next-higher buddy free?" > + * logic when memory regions are used. > + */ > + add_to_freelist(page, &area->free_list[migratetype]); > goto out; > } > }
Commit 6dda9d55b says that this had some discrete performance gains. It's a bummer that this deoptimizes it, and I think that (expected) performance degredation at least needs to be referenced _somewhere_. I also find it very hard to take code seriously which stuff like this: > +#ifdef CONFIG_DEBUG_PAGEALLOC > + WARN(region->nr_free == 0, "%s: nr_free messed up\n", __func__); > +#endif nine times. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/