From mboxrd@z Thu Jan 1 00:00:00 1970 From: Minchan Kim Subject: Re: [PATCH v6v3 02/12] mm: migrate: support non-lru movable page migration Date: Thu, 30 Jun 2016 15:18:56 +0900 Message-ID: <20160630061856.GA10526@bbox> References: <20160531000117.GB18314@bbox> <575E7F0B.8010201@linux.vnet.ibm.com> <20160615023249.GG17127@bbox> <5760F970.7060805@linux.vnet.ibm.com> <20160616002617.GM17127@bbox> <5762200F.5040908@linux.vnet.ibm.com> <20160616053754.GQ17127@bbox> <5770BEC5.3010807@linux.vnet.ibm.com> <20160628063912.GA25560@bbox> <5774B49D.6080000@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lgeamrelo12.lge.com (LGEAMRELO12.lge.com [156.147.23.52]) by gabe.freedesktop.org (Postfix) with ESMTP id 1B2866E7FD for ; Thu, 30 Jun 2016 06:18:27 +0000 (UTC) In-Reply-To: <5774B49D.6080000@linux.vnet.ibm.com> Content-Disposition: inline List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Anshuman Khandual Cc: Rik van Riel , Sergey Senozhatsky , Rafael Aquini , Jonathan Corbet , Hugh Dickins , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, John Einar Reitan , linux-mm@kvack.org, Gioh Kim , Mel Gorman , Andrew Morton , Joonsoo Kim , Vlastimil Babka List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBKdW4gMzAsIDIwMTYgYXQgMTE6MjY6NDVBTSArMDUzMCwgQW5zaHVtYW4gS2hhbmR1 YWwgd3JvdGU6Cgo8c25pcD4KCj4gPj4gRGlkIHlvdSBnZXQgYSBjaGFuY2UgdG8gdGVzdCB0aGUg ZHJpdmVyIG91dCA/IEkgYW0gc3RpbGwgY29uY2VybmVkIGFib3V0IGhvdyB0bwo+ID4+IGhhbmRs ZSB0aGUgc3RydWN0IGFkZHJlc3Nfc3BhY2Ugb3ZlcnJpZGUgcHJvYmxlbSB3aXRoaW4gdGhlIHN0 cnVjdCBwYWdlLgo+ID4gCj4gPiBIaSBBbnNodW1hbiwKPiA+IAo+ID4gU2xvdyBidXQgSSBhbSB3 b3JraW5nIG9uIHRoYXQuIDopIEhvd2V2ZXIsIGFzIEkgc2FpZCwgSSB3YW50IHRvIGRvIGl0Cj4g Cj4gSSByZWFsbHkgYXBwcmVjaWF0ZS4gV2FzIGp1c3QgY3VyaW91cyBhYm91dCB0aGUgcHJvYmxl bSBhbmQgYW55IHBvdGVudGlhbAo+IHNvbHV0aW9uIHdlIGNhbiBsb29rIGludG8uCj4gCj4gPiBh ZnRlciBzb2Z0IGxhbmRpbmcgb2YgY3VycmVudCBub24tbHJ1LW5vLW1hcHBlZCBwYWdlIG1pZ3Jh dGlvbiB0byBzb2x2ZQo+ID4gY3VycmVudCByZWFsIGZpZWxkIGlzc3Vlcy4KPiAKPiB5ZWFoIGl0 IG1ha2VzIHNlbnNlLgo+IAo+ID4gCj4gPiBBYm91dCB0aGUgb3ZlcnJpZGluZyBwcm9ibGVtIG9m IG5vbi1scnUtbWFwcGVkLXBhZ2UsIEkgaW1wbGVtZW50ZWQgZHVtbXkKPiA+IGRyaXZlciBhcyBt aXNjZWxsYW5lb3VzIGRldmljZSBhbmQgaW4gdGVzdF9tbWFwKGZpbGVfb3BlcmF0aW9ucy5tbWFw KSwKPiA+IEkgY2hhbmdlZCBhX29wcyB3aXRoIG15IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucy4K PiA+IAo+ID4gaW50IHRlc3RfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFf c3RydWN0ICp2bWEpCj4gPiB7Cj4gPiAgICAgICAgIGZpbHAtPmZfbWFwcGluZy0+YV9vcHMgPSAm dGVzdF9hb3BzOwo+ID4gICAgICAgICB2bWEtPnZtX29wcyA9ICZ0ZXN0X3ZtX29wczsKPiA+ICAg ICAgICAgdm1hLT52bV9wcml2YXRlX2RhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7Cj4gPiAgICAg ICAgIHJldHVybiAwOwo+ID4gfQo+ID4gCj4gCj4gT2theS4KPiAKPiA+IHRlc3RfYW9wcyBzaG91 bGQgaGF2ZSAqc2V0X3BhZ2VfZGlydHkqIG92ZXJyaWRpbmcuCj4gPiAKPiA+IHN0YXRpYyBpbnQg dGVzdF9zZXRfcGFnX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKQo+ID4gewo+ID4gICAgICAgICBp ZiAoIVBhZ2VEaXJ0eShwYWdlKSkKPiA+ICAgICAgICAgICAgICAgICBTZXRQYWdlRGlydHkqcGFn ZSk7Cj4gPiAgICAgICAgIHJldHVybiAwOwo+ID4gfQo+ID4gCj4gPiBPdGhlcndpc2UsIGl0IGdv ZXMgQlVHX09OIGR1cmluZyByYWRpeCB0cmVlIG9wZXJhdGlvbiBiZWNhdXNlCj4gPiBjdXJyZW50 bHkgdHJ5X3RvX3VubWFwIGlzIGRlc2lnbmVkIGZvciBmaWxlLWxydSBwYWdlcyB3aGljaCBsaXZl cwo+ID4gaW4gcGFnZSBjYWNoZSBzbyBpdCBwcm9wYWdhdGVzIHBhZ2UgdGFibGUgZGlydHkgYml0 IHRvIFBHX2RpcnR5IGZsYWcKPiA+IG9mIHN0cnVjdCBwYWdlIGJ5IHNldF9wYWdlX2RpcnR5LiBB bmQgc2V0X3BhZ2VfZGlydHkgd2FudCB0byBtYXJrCj4gPiBkaXJ0eSB0YWcgaW4gcmFkaXggdHJl ZSBub2RlIGJ1dCBpdCdzIGNoYXJhY3RlciBkcml2ZXIgc28gdGhlIHBhZ2UKPiA+IGNhY2hlIGRv ZXNuJ3QgaGF2ZSBpdC4gVGhhdCdzIHdoeSB3ZSBlbmNvdW50ZXIgQlVHX09OIGluIHJhZGl4IHRy ZWUKPiA+IG9wZXJhdGlvbi4gQW55d2F5LCB0byB0ZXN0LCBJIGltcGxlbWVudGVkIHNldF9wYWdl X2RpcnR5IGluIG15IGR1bW15Cj4gPiBkcml2ZXIuCj4gCj4gT2theSBhbmQgdGhlIGFib3ZlIHRl c3Rfc2V0X3BhZ2VfZGlydHkoKSBleGFtcGxlIGlzIHN1ZmZpY2llbnQgPwoKSSBndWVzcyBqdXN0 IHJldHVybiAwIGlzIHN1ZmZpY2VpbnQgd2l0aG91dCBhbnkgZGlydGluZyBhIHBhZ2UuCgo+IAo+ ID4gCj4gPiBXaXRoIG9ubHkgdGhhdCwgaXQgZG9lc24ndCB3b3JrIGJlY2F1c2UgSSBuZWVkIHRv IG1vZGlmeSBtaWdyYXRlLmMgdG8KPiA+IHdvcmsgbm9uLWxydS1tYXBwZWQtcGFnZSBhbmQgY2hh bmdpbmcgUEdfaXNvbGF0ZWQgZmxhZyB3aGljaCBpcwo+ID4gb3ZlcnJpZGUgb2YgUEdfcmVjbGFp bSB3aGljaCBpcyBjbGVhcmVkIGluIHNldF9wYWdlX2RpcnR5Lgo+IAo+IEdvdCBpdCwgc28gd2hh dCBjaGFuZ2VzIHlvdSBkaWQgPyBJbXBsZW1lbnRlZCBQR19pc29sYXRlZCBkaWZmZXJlbnRseQo+ IG5vdCBieSBvdmVycmlkaW5nIFBHX3JlY2xhaW0gb3Igc29tZXRoaW5nIGVsc2UgPyBZZXMgc2V0 X3BhZ2VfZGlydHkKPiBpbmRlZWQgY2xlYXJzIHRoZSBQR19yZWNsYWltIGZsYWcuCj4gCj4gPiAK PiA+IFdpdGggdGhhdCwgaXQgc2VlbXMgdG8gd29yay4gQnV0IEknbSBub3Qgc2F5aW5nIGl0J3Mg cmlnaHQgbW9kZWwgbm93Cj4gCj4gU28gdGhlIG1hcHBlZCBwYWdlcyBtaWdyYXRpb24gd2FzIHN1 Y2Nlc3NmdWwgPyBFdmVuIGFmdGVyIG92ZXJsb2FkaW5nCj4gZmlscC0+Zl9tYXBwaW5nLT5hX29w cyA9ICZ0ZXN0X2FvcHMsIHdlIHN0aWxsIGhhdmUgdGhlIFJNQVAgaW5mb3JtYXRpb24KPiBpbnRh Y3Qgd2l0aCBmaWxwLT5mX21hcHBpbnAgcG9pbnRlZCBpbnRlcnZhbCB0cmVlLiBCdXQgd291bGQg cmVhbGx5IGxpa2UKPiB0byBzZWUgdGhlIGNvZGUgY2hhbmdlcy4KPiAKPiA+IGZvciBkZXZpY2Ug ZHJpdmVycy4gSW4gcnVudGltZSwgcmVwbGFjaW5nIGZpbHAtPmZfbWFwcGluZy0+YV9vcHMgd2l0 aAo+ID4gY3VzdG9tIGFfb3BzIG9mIG93biBkcml2ZXIgc2VlbXMgdG8gYmUgaGFja3kgdG8gbWUu Cj4gCj4gWWVhaCBJIHRob3VnaHQgc28uCj4gCj4gPiBTbywgSSdtIGNvbnNpZGVyaW5nIG5vdyBu ZXcgcHNldWRvIGZzICJtb3ZhYmxlX2lub2RlIiB3aGljaCB3aWxsCj4gPiBzdXBwb3J0IAo+ID4g Cj4gPiBzdHJ1Y3QgZmlsZSAqbW92YWJsZV9pbm9kZV9nZXRmaWxlKGNvbnN0IGNoYXIgKm5hbWUs Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z ICpmb3AsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmVzc19z cGFjZV9vcGVyYXRpb25zICphX29wcykKPiA+IHsKPiA+ICAgICAgICAgc3RydWN0IHBhdGggcGF0 aDsKPiA+ICAgICAgICAgc3RydWN0IHFzdHIgdGhpczsKPiA+ICAgICAgICAgc3RydWN0IGlub2Rl ICppbm9kZTsKPiA+ICAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKPiA+IAo+ID4gICAg ICAgICB0aGlzLm5hbWUgPSBuYW1lOwo+ID4gICAgICAgICB0aGlzLmxlbiA9IHN0cmxlbihuYW1l KTsKPiA+ICAgICAgICAgdGhpcy5oYXNoID0gMDsKPiA+ICAgICAgICAgc2IgPSBtb3ZhYmxlX21u dC5tbnRfc2I7Cj4gPiAgICAgICAgIHBhdGNoLmRlbnR5ID0gZF9hbGxvY19wc2V1ZG8obW92YWJs ZV9pbm9kZV9tbnQtPm1udF9zYiwgJnRoaXMpOwo+ID4gICAgICAgICBwYXRjaC5tbnQgPSBtbnRn ZXQobW92YWJsZV9pbm9kZV9tbnQpOwo+ID4gICAgICAgICAKPiA+ICAgICAgICAgaW5vZGUgPSBu ZXdfaW5vZGUoc2IpOwo+ID4gICAgICAgICAuLgo+ID4gICAgICAgICAuLgo+ID4gICAgICAgICBp bm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9IGFfb3BzOwo+ID4gICAgICAgICBkX2luc3RhbnRpYXRl KHBhdGguZGVudHJ5LCBpbm9kZSk7Cj4gPiAKPiA+ICAgICAgICAgcmV0dXJuIGFsbG9jX2ZpbGUo JnBhdGgsIEZNT0RFX1dSSVRFIHwgRk1PREVfUkVBRCwgZl9vcCk7Cj4gPiB9Cj4gPiAKPiA+IEFu ZCBpbiBvdXIgZHJpdmVyLCB3ZSBjYW4gY2hhbmdlIHZtYS0+dm1fZmlsZSB3aXRoIG5ldyBvbmUu Cj4gPiAKPiA+IGludCB0ZXN0X21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdGQgKnZtYSkKPiA+IHsKPiA+ICAgICAgICAgc3RydWN0IGZpbGUgKm5ld2ZpbGUgPSBt b3ZhYmxlX2lub2RlX2dldGZpbGUoIlt0ZXN0Il0sCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZpbGVwLT5mX29wLCAmdGVzdF9hb3BzKTsKPiA+ICAgICAgICAgdm1hLT52bV9m aWxlID0gbmV3ZmlsZTsKPiA+ICAgICAgICAgLi4KPiA+ICAgICAgICAgLi4KPiA+IH0KPiA+IAo+ ID4gV2hlbiBJIHJlYWQgbW1hcF9yZWdpb24gaW4gbW0vbW1hcC5jLCBpdCdzIHJlYXNvbmFibGUg dXNlY2FzZQo+ID4gd2hpY2ggZGlydmVyJ3MgbW1hcCBjaGFuZ2VzIHZtYS0+dm1fZmlsZSB3aXRo IG93biBmaWxlLgo+IAo+IEkgd2lsbCBsb29rIGludG8gdGhlc2UgZGV0YWlscy4KPiAKPiA+IEFu eXdheSwgaXQgbmVlZHMgbWFueSBzdWJ0bGUgY2hhbmdlcyBpbiBtbS92ZnMvZHJpdmVyIHNpZGUg c28KPiA+IG5lZWQgdG8gcmV2aWV3IGZyb20gZWFjaCBtYWludGFpbmVycyByZWxhdGVkIHN1YnN5 c3RlbSBzbyBJCj4gPiB3YW50IHRvIG5vdCBiZSBodXJyeS4KPiAKPiBTdXJlLCBtYWtlcyBzZW5z ZS4gTWVhbiB3aGlsZSBpdCB3aWxsIGJlIHJlYWxseSBncmVhdCBpZiB5b3UgY291bGQgc2hhcmUK PiB5b3VyIGNvZGUgY2hhbmdlcyBhcyBkZXNjcmliZWQgYWJvdmUsIHNvIHRoYXQgSSBjYW4gdHJ5 IHRoZW0gb3V0Lgo+IAoKSXQncyBhbG1vc3QgZG9uZSBmb3IgZHJhZnQgdmVyc2lvbiBhbmQgSSdt IGRvaW5nIHN0cmVzcyB0ZXN0IG5vdyBhbmQKZm9ydHVuYXRlbHksIGRvZXNuJ3Qgc2VlIHRoZSBw cm9ibGVtIHVudGlsIG5vdy4KCkkgd2lsbCBzZW5kIHlvdSB3aGVuIEknbSByZWFkeS4KClRoYW5r cy4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi0-f70.google.com (mail-oi0-f70.google.com [209.85.218.70]) by kanga.kvack.org (Postfix) with ESMTP id 3D6C06B0005 for ; Thu, 30 Jun 2016 02:18:30 -0400 (EDT) Received: by mail-oi0-f70.google.com with SMTP id u81so57976051oia.3 for ; Wed, 29 Jun 2016 23:18:30 -0700 (PDT) Received: from lgeamrelo12.lge.com (LGEAMRELO12.lge.com. [156.147.23.52]) by mx.google.com with ESMTP id m74si3040902ioi.125.2016.06.29.23.18.28 for ; Wed, 29 Jun 2016 23:18:29 -0700 (PDT) Date: Thu, 30 Jun 2016 15:18:56 +0900 From: Minchan Kim Subject: Re: [PATCH v6v3 02/12] mm: migrate: support non-lru movable page migration Message-ID: <20160630061856.GA10526@bbox> References: <20160531000117.GB18314@bbox> <575E7F0B.8010201@linux.vnet.ibm.com> <20160615023249.GG17127@bbox> <5760F970.7060805@linux.vnet.ibm.com> <20160616002617.GM17127@bbox> <5762200F.5040908@linux.vnet.ibm.com> <20160616053754.GQ17127@bbox> <5770BEC5.3010807@linux.vnet.ibm.com> <20160628063912.GA25560@bbox> <5774B49D.6080000@linux.vnet.ibm.com> MIME-Version: 1.0 In-Reply-To: <5774B49D.6080000@linux.vnet.ibm.com> Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline Sender: owner-linux-mm@kvack.org List-ID: To: Anshuman Khandual Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Rik van Riel , Vlastimil Babka , Joonsoo Kim , Mel Gorman , Hugh Dickins , Rafael Aquini , virtualization@lists.linux-foundation.org, Jonathan Corbet , John Einar Reitan , dri-devel@lists.freedesktop.org, Sergey Senozhatsky , Gioh Kim On Thu, Jun 30, 2016 at 11:26:45AM +0530, Anshuman Khandual wrote: > >> Did you get a chance to test the driver out ? I am still concerned about how to > >> handle the struct address_space override problem within the struct page. > > > > Hi Anshuman, > > > > Slow but I am working on that. :) However, as I said, I want to do it > > I really appreciate. Was just curious about the problem and any potential > solution we can look into. > > > after soft landing of current non-lru-no-mapped page migration to solve > > current real field issues. > > yeah it makes sense. > > > > > About the overriding problem of non-lru-mapped-page, I implemented dummy > > driver as miscellaneous device and in test_mmap(file_operations.mmap), > > I changed a_ops with my address_space_operations. > > > > int test_mmap(struct file *filp, struct vm_area_struct *vma) > > { > > filp->f_mapping->a_ops = &test_aops; > > vma->vm_ops = &test_vm_ops; > > vma->vm_private_data = filp->private_data; > > return 0; > > } > > > > Okay. > > > test_aops should have *set_page_dirty* overriding. > > > > static int test_set_pag_dirty(struct page *page) > > { > > if (!PageDirty(page)) > > SetPageDirty*page); > > return 0; > > } > > > > Otherwise, it goes BUG_ON during radix tree operation because > > currently try_to_unmap is designed for file-lru pages which lives > > in page cache so it propagates page table dirty bit to PG_dirty flag > > of struct page by set_page_dirty. And set_page_dirty want to mark > > dirty tag in radix tree node but it's character driver so the page > > cache doesn't have it. That's why we encounter BUG_ON in radix tree > > operation. Anyway, to test, I implemented set_page_dirty in my dummy > > driver. > > Okay and the above test_set_page_dirty() example is sufficient ? I guess just return 0 is sufficeint without any dirting a page. > > > > > With only that, it doesn't work because I need to modify migrate.c to > > work non-lru-mapped-page and changing PG_isolated flag which is > > override of PG_reclaim which is cleared in set_page_dirty. > > Got it, so what changes you did ? Implemented PG_isolated differently > not by overriding PG_reclaim or something else ? Yes set_page_dirty > indeed clears the PG_reclaim flag. > > > > > With that, it seems to work. But I'm not saying it's right model now > > So the mapped pages migration was successful ? Even after overloading > filp->f_mapping->a_ops = &test_aops, we still have the RMAP information > intact with filp->f_mappinp pointed interval tree. But would really like > to see the code changes. > > > for device drivers. In runtime, replacing filp->f_mapping->a_ops with > > custom a_ops of own driver seems to be hacky to me. > > Yeah I thought so. > > > So, I'm considering now new pseudo fs "movable_inode" which will > > support > > > > struct file *movable_inode_getfile(const char *name, > > const struct file_operations *fop, > > const struct address_space_operations *a_ops) > > { > > struct path path; > > struct qstr this; > > struct inode *inode; > > struct super_block *sb; > > > > this.name = name; > > this.len = strlen(name); > > this.hash = 0; > > sb = movable_mnt.mnt_sb; > > patch.denty = d_alloc_pseudo(movable_inode_mnt->mnt_sb, &this); > > patch.mnt = mntget(movable_inode_mnt); > > > > inode = new_inode(sb); > > .. > > .. > > inode->i_mapping->a_ops = a_ops; > > d_instantiate(path.dentry, inode); > > > > return alloc_file(&path, FMODE_WRITE | FMODE_READ, f_op); > > } > > > > And in our driver, we can change vma->vm_file with new one. > > > > int test_mmap(struct file *filp, struct vm_area_structd *vma) > > { > > struct file *newfile = movable_inode_getfile("[test"], > > filep->f_op, &test_aops); > > vma->vm_file = newfile; > > .. > > .. > > } > > > > When I read mmap_region in mm/mmap.c, it's reasonable usecase > > which dirver's mmap changes vma->vm_file with own file. > > I will look into these details. > > > Anyway, it needs many subtle changes in mm/vfs/driver side so > > need to review from each maintainers related subsystem so I > > want to not be hurry. > > Sure, makes sense. Mean while it will be really great if you could share > your code changes as described above, so that I can try them out. > It's almost done for draft version and I'm doing stress test now and fortunately, doesn't see the problem until now. I will send you when I'm ready. Thanks. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751827AbcF3GSb (ORCPT ); Thu, 30 Jun 2016 02:18:31 -0400 Received: from LGEAMRELO12.lge.com ([156.147.23.52]:55254 "EHLO lgeamrelo12.lge.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750937AbcF3GS3 (ORCPT ); Thu, 30 Jun 2016 02:18:29 -0400 X-Original-SENDERIP: 156.147.1.127 X-Original-MAILFROM: minchan@kernel.org X-Original-SENDERIP: 165.244.98.203 X-Original-MAILFROM: minchan@kernel.org X-Original-SENDERIP: 10.177.223.161 X-Original-MAILFROM: minchan@kernel.org Date: Thu, 30 Jun 2016 15:18:56 +0900 From: Minchan Kim To: Anshuman Khandual CC: Andrew Morton , , , Rik van Riel , Vlastimil Babka , Joonsoo Kim , Mel Gorman , Hugh Dickins , Rafael Aquini , , Jonathan Corbet , John Einar Reitan , , Sergey Senozhatsky , Gioh Kim Subject: Re: [PATCH v6v3 02/12] mm: migrate: support non-lru movable page migration Message-ID: <20160630061856.GA10526@bbox> References: <20160531000117.GB18314@bbox> <575E7F0B.8010201@linux.vnet.ibm.com> <20160615023249.GG17127@bbox> <5760F970.7060805@linux.vnet.ibm.com> <20160616002617.GM17127@bbox> <5762200F.5040908@linux.vnet.ibm.com> <20160616053754.GQ17127@bbox> <5770BEC5.3010807@linux.vnet.ibm.com> <20160628063912.GA25560@bbox> <5774B49D.6080000@linux.vnet.ibm.com> MIME-Version: 1.0 In-Reply-To: <5774B49D.6080000@linux.vnet.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-MIMETrack: Itemize by SMTP Server on LGEKRMHUB01/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2016/06/30 15:18:25, Serialize by Router on LGEKRMHUB01/LGE/LG Group(Release 8.5.3FP6|November 21, 2013) at 2016/06/30 15:18:26, Serialize complete at 2016/06/30 15:18:26 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 30, 2016 at 11:26:45AM +0530, Anshuman Khandual wrote: > >> Did you get a chance to test the driver out ? I am still concerned about how to > >> handle the struct address_space override problem within the struct page. > > > > Hi Anshuman, > > > > Slow but I am working on that. :) However, as I said, I want to do it > > I really appreciate. Was just curious about the problem and any potential > solution we can look into. > > > after soft landing of current non-lru-no-mapped page migration to solve > > current real field issues. > > yeah it makes sense. > > > > > About the overriding problem of non-lru-mapped-page, I implemented dummy > > driver as miscellaneous device and in test_mmap(file_operations.mmap), > > I changed a_ops with my address_space_operations. > > > > int test_mmap(struct file *filp, struct vm_area_struct *vma) > > { > > filp->f_mapping->a_ops = &test_aops; > > vma->vm_ops = &test_vm_ops; > > vma->vm_private_data = filp->private_data; > > return 0; > > } > > > > Okay. > > > test_aops should have *set_page_dirty* overriding. > > > > static int test_set_pag_dirty(struct page *page) > > { > > if (!PageDirty(page)) > > SetPageDirty*page); > > return 0; > > } > > > > Otherwise, it goes BUG_ON during radix tree operation because > > currently try_to_unmap is designed for file-lru pages which lives > > in page cache so it propagates page table dirty bit to PG_dirty flag > > of struct page by set_page_dirty. And set_page_dirty want to mark > > dirty tag in radix tree node but it's character driver so the page > > cache doesn't have it. That's why we encounter BUG_ON in radix tree > > operation. Anyway, to test, I implemented set_page_dirty in my dummy > > driver. > > Okay and the above test_set_page_dirty() example is sufficient ? I guess just return 0 is sufficeint without any dirting a page. > > > > > With only that, it doesn't work because I need to modify migrate.c to > > work non-lru-mapped-page and changing PG_isolated flag which is > > override of PG_reclaim which is cleared in set_page_dirty. > > Got it, so what changes you did ? Implemented PG_isolated differently > not by overriding PG_reclaim or something else ? Yes set_page_dirty > indeed clears the PG_reclaim flag. > > > > > With that, it seems to work. But I'm not saying it's right model now > > So the mapped pages migration was successful ? Even after overloading > filp->f_mapping->a_ops = &test_aops, we still have the RMAP information > intact with filp->f_mappinp pointed interval tree. But would really like > to see the code changes. > > > for device drivers. In runtime, replacing filp->f_mapping->a_ops with > > custom a_ops of own driver seems to be hacky to me. > > Yeah I thought so. > > > So, I'm considering now new pseudo fs "movable_inode" which will > > support > > > > struct file *movable_inode_getfile(const char *name, > > const struct file_operations *fop, > > const struct address_space_operations *a_ops) > > { > > struct path path; > > struct qstr this; > > struct inode *inode; > > struct super_block *sb; > > > > this.name = name; > > this.len = strlen(name); > > this.hash = 0; > > sb = movable_mnt.mnt_sb; > > patch.denty = d_alloc_pseudo(movable_inode_mnt->mnt_sb, &this); > > patch.mnt = mntget(movable_inode_mnt); > > > > inode = new_inode(sb); > > .. > > .. > > inode->i_mapping->a_ops = a_ops; > > d_instantiate(path.dentry, inode); > > > > return alloc_file(&path, FMODE_WRITE | FMODE_READ, f_op); > > } > > > > And in our driver, we can change vma->vm_file with new one. > > > > int test_mmap(struct file *filp, struct vm_area_structd *vma) > > { > > struct file *newfile = movable_inode_getfile("[test"], > > filep->f_op, &test_aops); > > vma->vm_file = newfile; > > .. > > .. > > } > > > > When I read mmap_region in mm/mmap.c, it's reasonable usecase > > which dirver's mmap changes vma->vm_file with own file. > > I will look into these details. > > > Anyway, it needs many subtle changes in mm/vfs/driver side so > > need to review from each maintainers related subsystem so I > > want to not be hurry. > > Sure, makes sense. Mean while it will be really great if you could share > your code changes as described above, so that I can try them out. > It's almost done for draft version and I'm doing stress test now and fortunately, doesn't see the problem until now. I will send you when I'm ready. Thanks.