On Thu, 19 Jan 2017 19:35:53 +0100 Claudio Imbrenda <imbrenda@xxxxxxxxxxxxxxxxxx> wrote: > Some architectures have a set of zero pages (coloured zero pages) > instead of only one zero page, in order to improve the cache > performance. In those cases, the kernel samepage merger (KSM) would > merge all the allocated pages that happen to be filled with zeroes to > the same deduplicated page, thus losing all the advantages of coloured > zero pages. > > This behaviour is noticeable when a process accesses large arrays of > allocated pages containing zeroes. A test I conducted on s390 shows > that there is a speed penalty when KSM merges such pages, compared to > not merging them or using actual zero pages from the start without > breaking the COW. > > This patch fixes this behaviour. When coloured zero pages are present, > the checksum of a zero page is calculated during initialisation, and > compared with the checksum of the current canditate during merging. In > case of a match, the normal merging routine is used to merge the page > with the correct coloured zero page, which ensures the candidate page > is checked to be equal to the target zero page. > > A sysfs entry is also added to toggle this behaviour, since it can > potentially introduce performance regressions, especially on > architectures without coloured zero pages. The default value is > disabled, for backwards compatibility. > > With this patch, the performance with KSM is the same as with non > COW-broken actual zero pages, which is also the same as without KSM. > > ... > > @@ -2233,6 +2267,28 @@ static ssize_t merge_across_nodes_store(struct kobject *kobj, > KSM_ATTR(merge_across_nodes); > #endif > > +static ssize_t use_zero_pages_show(struct kobject *kobj, > + struct kobj_attribute *attr, char *buf) > +{ > + return sprintf(buf, "%u\n", ksm_use_zero_pages); > +} > +static ssize_t use_zero_pages_store(struct kobject *kobj, > + struct kobj_attribute *attr, > + const char *buf, size_t count) > +{ > + int err; > + bool value; > + > + err = kstrtobool(buf, &value); > + if (err) > + return -EINVAL; > + > + ksm_use_zero_pages = value; > + > + return count; > +} > +KSM_ATTR(use_zero_pages); Please send along an update for Documentation/vm/ksm.txt? Be sure that it fully explains "since it can potentially introduce performance regressions", so our users are able to understand whether or not they should use this. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>