From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gu Zheng Subject: Re: [PATCH V2 2/2] f2fs: read contiguous sit entry pages by merging for mount performance Date: Wed, 20 Nov 2013 17:38:16 +0800 Message-ID: <528C8308.7040604@cn.fujitsu.com> References: <000101cee293$4eae78d0$ec0b6a70$@samsung.com> <5289F6E3.3020607@cn.fujitsu.com> <001801cee5b2$ce8cdac0$6ba69040$@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193] helo=mx.sourceforge.net) by sfs-ml-4.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1Vj4L4-0004hN-8g for linux-f2fs-devel@lists.sourceforge.net; Wed, 20 Nov 2013 09:44:50 +0000 Received: from [222.73.24.84] (helo=song.cn.fujitsu.com) by sog-mx-3.v43.ch3.sourceforge.com with esmtp (Exim 4.76) id 1Vj4L1-0007FS-U7 for linux-f2fs-devel@lists.sourceforge.net; Wed, 20 Nov 2013 09:44:50 +0000 In-Reply-To: <001801cee5b2$ce8cdac0$6ba69040$@samsung.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net To: Chao Yu Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net SGkgWXUsCk9uIDExLzIwLzIwMTMgMDE6MzcgUE0sIENoYW8gWXUgd3JvdGU6Cgo+IEhpIEd1LAo+ IAo+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBHdSBaaGVuZyBbbWFpbHRv Omd1ei5mbnN0QGNuLmZ1aml0c3UuY29tXQo+PiBTZW50OiBNb25kYXksIE5vdmVtYmVyIDE4LCAy MDEzIDc6MTYgUE0KPj4gVG86IENoYW8gWXUKPj4gQ2M6ICc/Pz8nOyBsaW51eC1mc2RldmVsQHZn ZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgbGludXgtZjJmcy1k ZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ7IMy35q0KPj4gU3ViamVjdDogUmU6IFtmMmZzLWRl dl0gW1BBVENIIFYyIDIvMl0gZjJmczogcmVhZCBjb250aWd1b3VzIHNpdCBlbnRyeSBwYWdlcyBi eSBtZXJnaW5nIGZvciBtb3VudCBwZXJmb3JtYW5jZQo+Pgo+PiBIaSBZdSwKPj4gT25lIG1vcmUg Y29tbWVudCwgcGxlYXNlIHJlZmVyIHRvIGlubGluZS4KPj4gT24gMTEvMTYvMjAxMyAwMjoxNSBQ TSwgQ2hhbyBZdSB3cm90ZToKPj4KPj4+IFByZXZpb3VzbHkgd2UgcmVhZCBzaXQgZW50cmllcyBw YWdlIG9uZSBieSBvbmUsIHRoaXMgbWV0aG9kIGxvc3QgdGhlIGNoYW5jZSBvZiByZWFkaW5nIGNv bnRpZ3VvdXMgcGFnZSB0b2dldGhlci4KPj4+IFNvIHdlIHJlYWQgcGFnZXMgYXMgY29udGlndW91 cyBhcyBwb3NzaWJsZSBmb3IgYmV0dGVyIG1vdW50IHBlcmZvcm1hbmNlLgo+Pj4KPj4+IHYxLS0+ djI6Cj4+PiAgbyBtZXJnZSBqdWRnZW1lbnRzL3VzZSAnQ29udGludWUnIG9yICdCcmVhaycgaW5z dGVhZCBvZiAnR290bycgYXMgR3UgWmhlbmcgc3VnZ2VzdGVkLgo+Pj4gIG8gYWRkIG1hcmtfcGFn ZV9hY2Nlc3NlZCAoKSBiZWZvcmUgcmVsZWFzZSBwYWdlIHRvIGRlbGF5IFZNIHJlY2xhaW1pbmcg dGhlbS4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBDaGFvIFl1IDxjaGFvMi55dUBzYW1zdW5nLmNv bT4KPj4+IC0tLQo+Pj4gIGZzL2YyZnMvc2VnbWVudC5jIHwgIDEwOCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+Pj4gIGZzL2YyZnMvc2VnbWVu dC5oIHwgICAgMiArCj4+PiAgMiBmaWxlcyBjaGFuZ2VkLCA4NCBpbnNlcnRpb25zKCspLCAyNiBk ZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZnMvZjJmcy9zZWdtZW50LmMgYi9mcy9m MmZzL3NlZ21lbnQuYwo+Pj4gaW5kZXggZmEyODRkMy4uNjU2ZmU0MCAxMDA2NDQKPj4+IC0tLSBh L2ZzL2YyZnMvc2VnbWVudC5jCj4+PiArKysgYi9mcy9mMmZzL3NlZ21lbnQuYwo+Pj4gQEAgLTE0 LDYgKzE0LDcgQEAKPj4+ICAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Cj4+PiAgI2luY2x1ZGUg PGxpbnV4L3ByZWZldGNoLmg+Cj4+PiAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KPj4+ICsj aW5jbHVkZSA8bGludXgvc3dhcC5oPgo+Pj4KPj4+ICAjaW5jbHVkZSAiZjJmcy5oIgo+Pj4gICNp bmNsdWRlICJzZWdtZW50LmgiCj4+PiBAQCAtMTQ4MCw0MSArMTQ4MSw5NiBAQCBzdGF0aWMgaW50 IGJ1aWxkX2N1cnNlZyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpCj4+PiAgCXJldHVybiByZXN0 b3JlX2N1cnNlZ19zdW1tYXJpZXMoc2JpKTsKPj4+ICB9Cj4+Pgo+Pj4gK3N0YXRpYyBpbnQgcmFf c2l0X3BhZ2VzKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgaW50IHN0YXJ0LAo+Pj4gKwkJCQkJ aW50IG5ycGFnZXMsIGJvb2wgKmlzX29yZGVyKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGFkZHJlc3Nf c3BhY2UgKm1hcHBpbmcgPSBzYmktPm1ldGFfaW5vZGUtPmlfbWFwcGluZzsKPj4+ICsJc3RydWN0 IHNpdF9pbmZvICpzaXRfaSA9IFNJVF9JKHNiaSk7Cj4+PiArCXN0cnVjdCBwYWdlICpwYWdlOwo+ Pj4gKwlibG9ja190IGJsa19hZGRyOwo+Pj4gKwlpbnQgYmxrbm8gPSBzdGFydCwgcmVhZGNudCA9 IDA7Cj4+PiArCWludCBzaXRfYmxrX2NudCA9IFNJVF9CTEtfQ05UKHNiaSk7Cj4+PiArCj4+PiAr CWZvciAoOyBibGtubyA8IHN0YXJ0ICsgbnJwYWdlcyAmJiBibGtubyA8IHNpdF9ibGtfY250OyBi bGtubysrKSB7Cj4+PiArCj4+PiArCQlpZiAoKCFmMmZzX3Rlc3RfYml0KGJsa25vLCBzaXRfaS0+ c2l0X2JpdG1hcCkgXiAhKmlzX29yZGVyKSkgewo+Pj4gKwkJCSppc19vcmRlciA9ICEqaXNfb3Jk ZXI7Cj4+PiArCQkJYnJlYWs7Cj4+PiArCQl9Cj4+PiArCj4+PiArCQlibGtfYWRkciA9IHNpdF9p LT5zaXRfYmFzZV9hZGRyICsgYmxrbm87Cj4+PiArCQlpZiAoKmlzX29yZGVyKQo+Pj4gKwkJCWJs a19hZGRyICs9IHNpdF9pLT5zaXRfYmxvY2tzOwo+Pj4gK3JlcGVhdDoKPj4+ICsJCXBhZ2UgPSBn cmFiX2NhY2hlX3BhZ2UobWFwcGluZywgYmxrX2FkZHIpOwo+Pj4gKwkJaWYgKCFwYWdlKSB7Cj4+ PiArCQkJY29uZF9yZXNjaGVkKCk7Cj4+PiArCQkJZ290byByZXBlYXQ7Cj4+PiArCQl9Cj4+PiAr CQlpZiAoUGFnZVVwdG9kYXRlKHBhZ2UpKSB7Cj4+PiArCQkJbWFya19wYWdlX2FjY2Vzc2VkKHBh Z2UpOwo+Pj4gKwkJCWYyZnNfcHV0X3BhZ2UocGFnZSwgMSk7Cj4+PiArCQkJcmVhZGNudCsrOwo+ Pj4gKwkJCWNvbnRpbnVlOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJc3VibWl0X3JlYWRfcGFnZShz YmksIHBhZ2UsIGJsa19hZGRyLCBSRUFEX1NZTkMpOwo+Pj4gKwo+Pj4gKwkJbWFya19wYWdlX2Fj Y2Vzc2VkKHBhZ2UpOwo+Pj4gKwkJZjJmc19wdXRfcGFnZShwYWdlLCAwKTsKPj4+ICsJCXJlYWRj bnQrKzsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlmMmZzX3N1Ym1pdF9yZWFkX2JpbyhzYmksIFJFQURf U1lOQyk7Cj4+PiArCXJldHVybiByZWFkY250Owo+Pj4gK30KPj4+ICsKPj4+ICBzdGF0aWMgdm9p ZCBidWlsZF9zaXRfZW50cmllcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpCj4+PiAgewo+Pj4g IAlzdHJ1Y3Qgc2l0X2luZm8gKnNpdF9pID0gU0lUX0koc2JpKTsKPj4+ICAJc3RydWN0IGN1cnNl Z19pbmZvICpjdXJzZWcgPSBDVVJTRUdfSShzYmksIENVUlNFR19DT0xEX0RBVEEpOwo+Pj4gIAlz dHJ1Y3QgZjJmc19zdW1tYXJ5X2Jsb2NrICpzdW0gPSBjdXJzZWctPnN1bV9ibGs7Cj4+PiAtCXVu c2lnbmVkIGludCBzdGFydDsKPj4+IC0KPj4+IC0JZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgVE9U QUxfU0VHUyhzYmkpOyBzdGFydCsrKSB7Cj4+PiAtCQlzdHJ1Y3Qgc2VnX2VudHJ5ICpzZSA9ICZz aXRfaS0+c2VudHJpZXNbc3RhcnRdOwo+Pj4gLQkJc3RydWN0IGYyZnNfc2l0X2Jsb2NrICpzaXRf YmxrOwo+Pj4gLQkJc3RydWN0IGYyZnNfc2l0X2VudHJ5IHNpdDsKPj4+IC0JCXN0cnVjdCBwYWdl ICpwYWdlOwo+Pj4gLQkJaW50IGk7Cj4+PiArCWJvb2wgaXNfb3JkZXIgPSBmMmZzX3Rlc3RfYml0 KDAsIHNpdF9pLT5zaXRfYml0bWFwKSA/IHRydWUgOiBmYWxzZTsKPj4+ICsJaW50IHNpdF9ibGtf Y250ID0gU0lUX0JMS19DTlQoc2JpKTsKPj4+ICsJdW5zaWduZWQgaW50IGksIHN0YXJ0LCBlbmQ7 Cj4+PiArCXVuc2lnbmVkIGludCByZWFkZWQsIHN0YXJ0X2JsayA9IDA7Cj4+Pgo+Pj4gLQkJbXV0 ZXhfbG9jaygmY3Vyc2VnLT5jdXJzZWdfbXV0ZXgpOwo+Pj4gLQkJZm9yIChpID0gMDsgaSA8IHNp dHNfaW5fY3Vyc3VtKHN1bSk7IGkrKykgewo+Pj4gLQkJCWlmIChsZTMyX3RvX2NwdShzZWdub19p bl9qb3VybmFsKHN1bSwgaSkpID09IHN0YXJ0KSB7Cj4+PiAtCQkJCXNpdCA9IHNpdF9pbl9qb3Vy bmFsKHN1bSwgaSk7Cj4+PiAtCQkJCW11dGV4X3VubG9jaygmY3Vyc2VnLT5jdXJzZWdfbXV0ZXgp Owo+Pj4gLQkJCQlnb3RvIGdvdF9pdDsKPj4+ICsJZG8gewo+Pgo+PiBIb3cgYWJvdXQgdXNpbmcg ZmluZF9uZXh0X2JpdCB0byBnZXQgdGhlIHN1aXRhYmxlIHN0YXJ0X2JsayBpZiB0aGUgbmV4dCBi bGsKPj4gaXMgbm90IG9yZGVyZWQgaGVyZT8gQW5kIGl0IGFsc28gY2FuIHNpbXBsaWZ5IHRoZSBs b2dpYyBvZiByYV9zaXRfcGFnZXMoKS4KPiAKPiBUaGF0J3MgYSBnb29kIGlkZWEuCj4gQnV0IEkg dGhvdWdodCB0aGVyZSBtYXliZSBlbmRpYW5uZXNzIHByb2JsZW0gYmV0d2VlbiB0ZXN0X2JpdCBh bmQgCj4gZjJmc190ZXN0X2JpdCwgc28gZmluZF9uZXh0X2JpdCBtYXkgZ2V0IHdyb25nIHJlc3Vs dC4gQW0gSSByaWdodD8KCklNTywgZmluZF9uZXh0X2JpdCBjYW4gZG8gd2VsbCB3aXRoIGVuZGlh bm5lc3MgaXNzdWUgaW50ZXJuYWxseSwgaWYKaXQncyBub3Qgc28sIHRoYXQgbWF5IGJlIGEgd2Vh a25lc3MuCk9uIHRoZSBvdGhlciBzaWRlLCB3aHkgbm90IGludHJvZHVjZSBhICdmMmZzX2ZpbmRf bmV4dF9iaXQnIGlmIGl0J3MKc2VyaW91c2x5IG5lZWRlZD86KQoKUmVnYXJkcywKR3UKCj4gCj4g VGhhbmtzLAo+IFl1Cj4+Cj4+IFRoYW5rcywKPj4gR3UKPj4KPj4+ICsJCXJlYWRlZCA9IHJhX3Np dF9wYWdlcyhzYmksIHN0YXJ0X2Jsaywgc2l0X2Jsa19jbnQsICZpc19vcmRlcik7Cj4+PiArCj4+ PiArCQlzdGFydCA9IHN0YXJ0X2JsayAqIHNpdF9pLT5zZW50c19wZXJfYmxvY2s7Cj4+PiArCQll bmQgPSAoc3RhcnRfYmxrICsgcmVhZGVkKSAqIHNpdF9pLT5zZW50c19wZXJfYmxvY2s7Cj4+PiAr Cj4+PiArCQlmb3IgKDsgc3RhcnQgPCBlbmQgJiYgc3RhcnQgPCBUT1RBTF9TRUdTKHNiaSk7IHN0 YXJ0KyspIHsKPj4+ICsJCQlzdHJ1Y3Qgc2VnX2VudHJ5ICpzZSA9ICZzaXRfaS0+c2VudHJpZXNb c3RhcnRdOwo+Pj4gKwkJCXN0cnVjdCBmMmZzX3NpdF9ibG9jayAqc2l0X2JsazsKPj4+ICsJCQlz dHJ1Y3QgZjJmc19zaXRfZW50cnkgc2l0Owo+Pj4gKwkJCXN0cnVjdCBwYWdlICpwYWdlOwo+Pj4g Kwo+Pj4gKwkJCW11dGV4X2xvY2soJmN1cnNlZy0+Y3Vyc2VnX211dGV4KTsKPj4+ICsJCQlmb3Ig KGkgPSAwOyBpIDwgc2l0c19pbl9jdXJzdW0oc3VtKTsgaSsrKSB7Cj4+PiArCQkJCWlmIChsZTMy X3RvX2NwdShzZWdub19pbl9qb3VybmFsKHN1bSwgaSkpID09IHN0YXJ0KSB7Cj4+PiArCQkJCQlz aXQgPSBzaXRfaW5fam91cm5hbChzdW0sIGkpOwo+Pj4gKwkJCQkJbXV0ZXhfdW5sb2NrKCZjdXJz ZWctPmN1cnNlZ19tdXRleCk7Cj4+PiArCQkJCQlnb3RvIGdvdF9pdDsKPj4+ICsJCQkJfQo+Pj4g IAkJCX0KPj4+IC0JCX0KPj4+IC0JCW11dGV4X3VubG9jaygmY3Vyc2VnLT5jdXJzZWdfbXV0ZXgp Owo+Pj4gLQkJcGFnZSA9IGdldF9jdXJyZW50X3NpdF9wYWdlKHNiaSwgc3RhcnQpOwo+Pj4gLQkJ c2l0X2JsayA9IChzdHJ1Y3QgZjJmc19zaXRfYmxvY2sgKilwYWdlX2FkZHJlc3MocGFnZSk7Cj4+ PiAtCQlzaXQgPSBzaXRfYmxrLT5lbnRyaWVzW1NJVF9FTlRSWV9PRkZTRVQoc2l0X2ksIHN0YXJ0 KV07Cj4+PiAtCQlmMmZzX3B1dF9wYWdlKHBhZ2UsIDEpOwo+Pj4gKwkJCW11dGV4X3VubG9jaygm Y3Vyc2VnLT5jdXJzZWdfbXV0ZXgpOwo+Pj4gKwo+Pj4gKwkJCXBhZ2UgPSBnZXRfY3VycmVudF9z aXRfcGFnZShzYmksIHN0YXJ0KTsKPj4+ICsJCQlzaXRfYmxrID0gKHN0cnVjdCBmMmZzX3NpdF9i bG9jayAqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKPj4+ICsJCQlzaXQgPSBzaXRfYmxrLT5lbnRyaWVz W1NJVF9FTlRSWV9PRkZTRVQoc2l0X2ksIHN0YXJ0KV07Cj4+PiArCQkJZjJmc19wdXRfcGFnZShw YWdlLCAxKTsKPj4+ICBnb3RfaXQ6Cj4+PiAtCQljaGVja19ibG9ja19jb3VudChzYmksIHN0YXJ0 LCAmc2l0KTsKPj4+IC0JCXNlZ19pbmZvX2Zyb21fcmF3X3NpdChzZSwgJnNpdCk7Cj4+PiAtCQlp ZiAoc2JpLT5zZWdzX3Blcl9zZWMgPiAxKSB7Cj4+PiAtCQkJc3RydWN0IHNlY19lbnRyeSAqZSA9 IGdldF9zZWNfZW50cnkoc2JpLCBzdGFydCk7Cj4+PiAtCQkJZS0+dmFsaWRfYmxvY2tzICs9IHNl LT52YWxpZF9ibG9ja3M7Cj4+PiArCQkJY2hlY2tfYmxvY2tfY291bnQoc2JpLCBzdGFydCwgJnNp dCk7Cj4+PiArCQkJc2VnX2luZm9fZnJvbV9yYXdfc2l0KHNlLCAmc2l0KTsKPj4+ICsJCQlpZiAo c2JpLT5zZWdzX3Blcl9zZWMgPiAxKSB7Cj4+PiArCQkJCXN0cnVjdCBzZWNfZW50cnkgKmUgPSBn ZXRfc2VjX2VudHJ5KHNiaSwgc3RhcnQpOwo+Pj4gKwkJCQllLT52YWxpZF9ibG9ja3MgKz0gc2Ut PnZhbGlkX2Jsb2NrczsKPj4+ICsJCQl9Cj4+PiAgCQl9Cj4+PiAtCX0KPj4+ICsJCXN0YXJ0X2Js ayArPSByZWFkZWQ7Cj4+Cj4+Cj4+Cj4+Cj4+PiArCX0gd2hpbGUgKHN0YXJ0X2JsayA8IHNpdF9i bGtfY250KTsKPj4+ICB9Cj4+Pgo+Pj4gIHN0YXRpYyB2b2lkIGluaXRfZnJlZV9zZWdtYXAoc3Ry dWN0IGYyZnNfc2JfaW5mbyAqc2JpKQo+Pj4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMvc2VnbWVudC5o IGIvZnMvZjJmcy9zZWdtZW50LmgKPj4+IGluZGV4IDI2OWY2OTAuLmFkNWI5ZjEgMTAwNjQ0Cj4+ PiAtLS0gYS9mcy9mMmZzL3NlZ21lbnQuaAo+Pj4gKysrIGIvZnMvZjJmcy9zZWdtZW50LmgKPj4+ IEBAIC04Myw2ICs4Myw4IEBACj4+PiAgCShzZWdubyAvIFNJVF9FTlRSWV9QRVJfQkxPQ0spCj4+ PiAgI2RlZmluZQlTVEFSVF9TRUdOTyhzaXRfaSwgc2Vnbm8pCQlcCj4+PiAgCShTSVRfQkxPQ0tf T0ZGU0VUKHNpdF9pLCBzZWdubykgKiBTSVRfRU5UUllfUEVSX0JMT0NLKQo+Pj4gKyNkZWZpbmUg U0lUX0JMS19DTlQoc2JpKQkJCVwKPj4+ICsJKChUT1RBTF9TRUdTKHNiaSkgKyBTSVRfRU5UUllf UEVSX0JMT0NLIC0gMSkgLyBTSVRfRU5UUllfUEVSX0JMT0NLKQo+Pj4gICNkZWZpbmUgZjJmc19i aXRtYXBfc2l6ZShucikJCQlcCj4+PiAgCShCSVRTX1RPX0xPTkdTKG5yKSAqIHNpemVvZih1bnNp Z25lZCBsb25nKSkKPj4+ICAjZGVmaW5lIFRPVEFMX1NFR1Moc2JpKQkoU01fSShzYmkpLT5tYWlu X3NlZ21lbnRzKQo+IAo+IAo+IAoKCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2hhcGUgdGhlIE1v YmlsZSBFeHBlcmllbmNlOiBGcmVlIFN1YnNjcmlwdGlvbgpTb2Z0d2FyZSBleHBlcnRzIGFuZCBk ZXZlbG9wZXJzOiBCZSBhdCB0aGUgZm9yZWZyb250IG9mIHRlY2ggaW5ub3ZhdGlvbi4KSW50ZWwo UikgU29mdHdhcmUgQWRyZW5hbGluZSBkZWxpdmVycyBzdHJhdGVnaWMgaW5zaWdodCBhbmQgZ2Ft ZS1jaGFuZ2luZyAKY29udmVyc2F0aW9ucyB0aGF0IHNoYXBlIHRoZSByYXBpZGx5IGV2b2x2aW5n IG1vYmlsZSBsYW5kc2NhcGUuIFNpZ24gdXAgbm93LiAKaHR0cDovL3B1YmFkcy5nLmRvdWJsZWNs aWNrLm5ldC9nYW1wYWQvY2xrP2lkPTYzNDMxMzExJml1PS80MTQwL29zdGcuY2xrdHJrCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LWYyZnMtZGV2 ZWwgbWFpbGluZyBsaXN0CkxpbnV4LWYyZnMtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0 dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2xpbnV4LWYyZnMtZGV2 ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752659Ab3KTJow (ORCPT ); Wed, 20 Nov 2013 04:44:52 -0500 Received: from cn.fujitsu.com ([222.73.24.84]:54051 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751312Ab3KTJok convert rfc822-to-8bit (ORCPT ); Wed, 20 Nov 2013 04:44:40 -0500 X-IronPort-AV: E=Sophos;i="4.93,735,1378828800"; d="scan'208";a="9084554" Message-ID: <528C8308.7040604@cn.fujitsu.com> Date: Wed, 20 Nov 2013 17:38:16 +0800 From: Gu Zheng User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20110930 Thunderbird/7.0.1 MIME-Version: 1.0 To: Chao Yu CC: "'???'" , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, =?GB2312?B?J8y35q0n?= Subject: Re: [f2fs-dev] [PATCH V2 2/2] f2fs: read contiguous sit entry pages by merging for mount performance References: <000101cee293$4eae78d0$ec0b6a70$@samsung.com> <5289F6E3.3020607@cn.fujitsu.com> <001801cee5b2$ce8cdac0$6ba69040$@samsung.com> In-Reply-To: <001801cee5b2$ce8cdac0$6ba69040$@samsung.com> X-MIMETrack: Itemize by SMTP Server on mailserver/fnst(Release 8.5.3|September 15, 2011) at 2013/11/20 17:42:40, Serialize by Router on mailserver/fnst(Release 8.5.3|September 15, 2011) at 2013/11/20 17:42:43 Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Yu, On 11/20/2013 01:37 PM, Chao Yu wrote: > Hi Gu, > >> -----Original Message----- >> From: Gu Zheng [mailto:guz.fnst@cn.fujitsu.com] >> Sent: Monday, November 18, 2013 7:16 PM >> To: Chao Yu >> Cc: '???'; linux-fsdevel@vger.kernel.org; linux-kernel@vger.kernel.org; linux-f2fs-devel@lists.sourceforge.net; Ì·æ­ >> Subject: Re: [f2fs-dev] [PATCH V2 2/2] f2fs: read contiguous sit entry pages by merging for mount performance >> >> Hi Yu, >> One more comment, please refer to inline. >> On 11/16/2013 02:15 PM, Chao Yu wrote: >> >>> Previously we read sit entries page one by one, this method lost the chance of reading contiguous page together. >>> So we read pages as contiguous as possible for better mount performance. >>> >>> v1-->v2: >>> o merge judgements/use 'Continue' or 'Break' instead of 'Goto' as Gu Zheng suggested. >>> o add mark_page_accessed () before release page to delay VM reclaiming them. >>> >>> Signed-off-by: Chao Yu >>> --- >>> fs/f2fs/segment.c | 108 ++++++++++++++++++++++++++++++++++++++++------------- >>> fs/f2fs/segment.h | 2 + >>> 2 files changed, 84 insertions(+), 26 deletions(-) >>> >>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c >>> index fa284d3..656fe40 100644 >>> --- a/fs/f2fs/segment.c >>> +++ b/fs/f2fs/segment.c >>> @@ -14,6 +14,7 @@ >>> #include >>> #include >>> #include >>> +#include >>> >>> #include "f2fs.h" >>> #include "segment.h" >>> @@ -1480,41 +1481,96 @@ static int build_curseg(struct f2fs_sb_info *sbi) >>> return restore_curseg_summaries(sbi); >>> } >>> >>> +static int ra_sit_pages(struct f2fs_sb_info *sbi, int start, >>> + int nrpages, bool *is_order) >>> +{ >>> + struct address_space *mapping = sbi->meta_inode->i_mapping; >>> + struct sit_info *sit_i = SIT_I(sbi); >>> + struct page *page; >>> + block_t blk_addr; >>> + int blkno = start, readcnt = 0; >>> + int sit_blk_cnt = SIT_BLK_CNT(sbi); >>> + >>> + for (; blkno < start + nrpages && blkno < sit_blk_cnt; blkno++) { >>> + >>> + if ((!f2fs_test_bit(blkno, sit_i->sit_bitmap) ^ !*is_order)) { >>> + *is_order = !*is_order; >>> + break; >>> + } >>> + >>> + blk_addr = sit_i->sit_base_addr + blkno; >>> + if (*is_order) >>> + blk_addr += sit_i->sit_blocks; >>> +repeat: >>> + page = grab_cache_page(mapping, blk_addr); >>> + if (!page) { >>> + cond_resched(); >>> + goto repeat; >>> + } >>> + if (PageUptodate(page)) { >>> + mark_page_accessed(page); >>> + f2fs_put_page(page, 1); >>> + readcnt++; >>> + continue; >>> + } >>> + >>> + submit_read_page(sbi, page, blk_addr, READ_SYNC); >>> + >>> + mark_page_accessed(page); >>> + f2fs_put_page(page, 0); >>> + readcnt++; >>> + } >>> + >>> + f2fs_submit_read_bio(sbi, READ_SYNC); >>> + return readcnt; >>> +} >>> + >>> static void build_sit_entries(struct f2fs_sb_info *sbi) >>> { >>> struct sit_info *sit_i = SIT_I(sbi); >>> struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_COLD_DATA); >>> struct f2fs_summary_block *sum = curseg->sum_blk; >>> - unsigned int start; >>> - >>> - for (start = 0; start < TOTAL_SEGS(sbi); start++) { >>> - struct seg_entry *se = &sit_i->sentries[start]; >>> - struct f2fs_sit_block *sit_blk; >>> - struct f2fs_sit_entry sit; >>> - struct page *page; >>> - int i; >>> + bool is_order = f2fs_test_bit(0, sit_i->sit_bitmap) ? true : false; >>> + int sit_blk_cnt = SIT_BLK_CNT(sbi); >>> + unsigned int i, start, end; >>> + unsigned int readed, start_blk = 0; >>> >>> - mutex_lock(&curseg->curseg_mutex); >>> - for (i = 0; i < sits_in_cursum(sum); i++) { >>> - if (le32_to_cpu(segno_in_journal(sum, i)) == start) { >>> - sit = sit_in_journal(sum, i); >>> - mutex_unlock(&curseg->curseg_mutex); >>> - goto got_it; >>> + do { >> >> How about using find_next_bit to get the suitable start_blk if the next blk >> is not ordered here? And it also can simplify the logic of ra_sit_pages(). > > That's a good idea. > But I thought there maybe endianness problem between test_bit and > f2fs_test_bit, so find_next_bit may get wrong result. Am I right? IMO, find_next_bit can do well with endianness issue internally, if it's not so, that may be a weakness. On the other side, why not introduce a 'f2fs_find_next_bit' if it's seriously needed?:) Regards, Gu > > Thanks, > Yu >> >> Thanks, >> Gu >> >>> + readed = ra_sit_pages(sbi, start_blk, sit_blk_cnt, &is_order); >>> + >>> + start = start_blk * sit_i->sents_per_block; >>> + end = (start_blk + readed) * sit_i->sents_per_block; >>> + >>> + for (; start < end && start < TOTAL_SEGS(sbi); start++) { >>> + struct seg_entry *se = &sit_i->sentries[start]; >>> + struct f2fs_sit_block *sit_blk; >>> + struct f2fs_sit_entry sit; >>> + struct page *page; >>> + >>> + mutex_lock(&curseg->curseg_mutex); >>> + for (i = 0; i < sits_in_cursum(sum); i++) { >>> + if (le32_to_cpu(segno_in_journal(sum, i)) == start) { >>> + sit = sit_in_journal(sum, i); >>> + mutex_unlock(&curseg->curseg_mutex); >>> + goto got_it; >>> + } >>> } >>> - } >>> - mutex_unlock(&curseg->curseg_mutex); >>> - page = get_current_sit_page(sbi, start); >>> - sit_blk = (struct f2fs_sit_block *)page_address(page); >>> - sit = sit_blk->entries[SIT_ENTRY_OFFSET(sit_i, start)]; >>> - f2fs_put_page(page, 1); >>> + mutex_unlock(&curseg->curseg_mutex); >>> + >>> + page = get_current_sit_page(sbi, start); >>> + sit_blk = (struct f2fs_sit_block *)page_address(page); >>> + sit = sit_blk->entries[SIT_ENTRY_OFFSET(sit_i, start)]; >>> + f2fs_put_page(page, 1); >>> got_it: >>> - check_block_count(sbi, start, &sit); >>> - seg_info_from_raw_sit(se, &sit); >>> - if (sbi->segs_per_sec > 1) { >>> - struct sec_entry *e = get_sec_entry(sbi, start); >>> - e->valid_blocks += se->valid_blocks; >>> + check_block_count(sbi, start, &sit); >>> + seg_info_from_raw_sit(se, &sit); >>> + if (sbi->segs_per_sec > 1) { >>> + struct sec_entry *e = get_sec_entry(sbi, start); >>> + e->valid_blocks += se->valid_blocks; >>> + } >>> } >>> - } >>> + start_blk += readed; >> >> >> >> >>> + } while (start_blk < sit_blk_cnt); >>> } >>> >>> static void init_free_segmap(struct f2fs_sb_info *sbi) >>> diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h >>> index 269f690..ad5b9f1 100644 >>> --- a/fs/f2fs/segment.h >>> +++ b/fs/f2fs/segment.h >>> @@ -83,6 +83,8 @@ >>> (segno / SIT_ENTRY_PER_BLOCK) >>> #define START_SEGNO(sit_i, segno) \ >>> (SIT_BLOCK_OFFSET(sit_i, segno) * SIT_ENTRY_PER_BLOCK) >>> +#define SIT_BLK_CNT(sbi) \ >>> + ((TOTAL_SEGS(sbi) + SIT_ENTRY_PER_BLOCK - 1) / SIT_ENTRY_PER_BLOCK) >>> #define f2fs_bitmap_size(nr) \ >>> (BITS_TO_LONGS(nr) * sizeof(unsigned long)) >>> #define TOTAL_SEGS(sbi) (SM_I(sbi)->main_segments) > > >