From owner-freebsd-arch@FreeBSD.ORG Sat Jan 3 19:06:49 2004 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AC97D16A4CE for ; Sat, 3 Jan 2004 19:06:49 -0800 (PST) Received: from relay.pair.com (relay.pair.com [209.68.1.20]) by mx1.FreeBSD.org (Postfix) with SMTP id 0AF4543D64 for ; Sat, 3 Jan 2004 19:06:43 -0800 (PST) (envelope-from silby@silby.com) Received: (qmail 40035 invoked from network); 4 Jan 2004 03:06:41 -0000 Received: from niwun.pair.com (HELO localhost) (209.68.2.70) by relay.pair.com with SMTP; 4 Jan 2004 03:06:41 -0000 X-pair-Authenticated: 209.68.2.70 Date: Sat, 3 Jan 2004 21:06:39 -0600 (CST) From: Mike Silbersack To: arch@freebsd.org Message-ID: <20040103205152.G5165@odysseus.silby.com> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-581488147-1073185599=:5165" Subject: RFC: Sendfile patch X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 Jan 2004 03:06:49 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-581488147-1073185599=:5165 Content-Type: TEXT/PLAIN; charset=US-ASCII The attached patch (also available from the following url): http://www.silby.com/patches/raw/sendfile-wip4.patch modifies sendfile to ensure that the header is sent in the same packet as the data from the file. This greatly helps performance when dealing with http servers, as it allows small files to fit in one packet, instead of two. In order to keep the implementation relatively simple, I have created two helper functions, iov_to_uio, and m_uiotombuf. You'll note that iov_to_uio contains the body of readv/writev almost exactly, and m_uiotombuf does much the same thing as sosend. (In the future, I may attempt to make readv/writev use iov_to_uio, and have sosend use m_uiotombuf, but that's a project for another day.) I'm going to be gone for two weeks, so that should allow plenty of time for testing / review of the patch. The location(s) of iov_to_uio and m_uiotombuf in both source and header files sounds like an easy thing to bikeshed about, so please don't bring that up. Such matters can be discussed when I get back, because I commit it. What I am interested in are reviews of the actual code, specifically regarding any possible security holes which I may be introducing. Also, I would appreciate it if someone could verify that I have the old sendfile compatibility part working correctly, as it is quite messy. If you're not in the mood to review the patch, please feel free to test it. I have only tested with apache2 and thttpd (with alfred's sf patches from the port enabled), there are undoubtedly many other programs which make use of sendfile and should be tested. If you have any sort of web benchmark which helps to show the performance increase given by this patch, please run it; it's always great to include statistics in a commit message. Naturally, the patch is against -current. If you have any questions, please ask quickly, or prepare to wait a long time for an answer. :) Mike "Silby" Silbersack --0-581488147-1073185599=:5165 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="sendfile-wip4.patch" Content-Transfer-Encoding: BASE64 Content-ID: <20040103210639.K5165@odysseus.silby.com> Content-Description: Content-Disposition: attachment; filename="sendfile-wip4.patch" ZGlmZiAtdSAtciAvdXNyL3NyYy9zeXMub2xkL2tlcm4vdWlwY19tYnVmLmMg L3Vzci9zcmMvc3lzL2tlcm4vdWlwY19tYnVmLmMNCi0tLSAvdXNyL3NyYy9z eXMub2xkL2tlcm4vdWlwY19tYnVmLmMJU2F0IEphbiAgMyAxOTo1MToyOSAy MDA0DQorKysgL3Vzci9zcmMvc3lzL2tlcm4vdWlwY19tYnVmLmMJU2F0IEph biAgMyAyMDoxNDowMyAyMDA0DQpAQCAtNDMsNiArNDMsNyBAQA0KICNpbmNs dWRlIDxzeXMvcGFyYW0uaD4NCiAjaW5jbHVkZSA8c3lzL3N5c3RtLmg+DQog I2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4NCisjaW5jbHVkZSA8c3lzL2xpbWl0 cy5oPg0KICNpbmNsdWRlIDxzeXMvbG9jay5oPg0KICNpbmNsdWRlIDxzeXMv bWFjLmg+DQogI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4NCkBAIC01MCw2ICs1 MSw3IEBADQogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4NCiAjaW5jbHVkZSA8 c3lzL2RvbWFpbi5oPg0KICNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPg0KKyNp bmNsdWRlIDxzeXMvdWlvLmg+DQogDQogaW50CW1heF9saW5raGRyOw0KIGlu dAltYXhfcHJvdG9oZHI7DQpAQCAtMTAyOCwzICsxMDMwLDk5IEBADQogfQ0K IA0KICNlbmRpZg0KKw0KK3N0cnVjdCBtYnVmICoNCittX3Vpb3RvbWJ1Zihz dHJ1Y3QgdWlvICp1aW8sIGludCBob3csIGludCBsZW4pDQorew0KKwlzdHJ1 Y3QgbWJ1ZgkqbV9uZXcgPSBOVUxMLCAqbV9maW5hbCA9IE5VTEw7DQorCWlu dAkJcHJvZ3Jlc3MgPSAwLCBlcnJvciA9IDAsIGxlbmd0aCwgdG90YWw7DQor DQorCWlmIChsZW4gPiAwKQ0KKwkJdG90YWwgPSBtaW4odWlvLT51aW9fcmVz aWQsIGxlbik7DQorCWVsc2UNCisJCXRvdGFsID0gdWlvLT51aW9fcmVzaWQ7 DQorDQorCWlmICh0b3RhbCA+IE1ITEVOKQ0KKwkJbV9maW5hbCA9IG1fZ2V0 Y2woaG93LCBNVF9EQVRBLCBNX1BLVEhEUik7DQorCWVsc2UNCisJCW1fZmlu YWwgPSBtX2dldGhkcihob3csIE1UX0RBVEEpOw0KKw0KKwlpZiAobV9maW5h bCA9PSBOVUxMKQ0KKwkJZ290byBub3NwYWNlOw0KKw0KKwltX25ldyA9IG1f ZmluYWw7DQorDQorCXdoaWxlIChwcm9ncmVzcyA8IHRvdGFsKSB7DQorCQls ZW5ndGggPSB0b3RhbCAtIHByb2dyZXNzOw0KKwkJaWYgKGxlbmd0aCA+IE1D TEJZVEVTKQ0KKwkJCWxlbmd0aCA9IE1DTEJZVEVTOw0KKw0KKwkJaWYgKG1f bmV3ID09IE5VTEwpIHsNCisJCQlpZiAobGVuZ3RoID4gTUxFTikNCisJCQkJ bV9uZXcgPSBtX2dldGNsKGhvdywgTVRfREFUQSwgMCk7DQorCQkJZWxzZQ0K KwkJCQltX25ldyA9IG1fZ2V0KGhvdywgTVRfREFUQSk7DQorCQkJaWYgKG1f bmV3ID09IE5VTEwpDQorCQkJCWdvdG8gbm9zcGFjZTsNCisJCX0NCisNCisJ CWVycm9yID0gdWlvbW92ZShtdG9kKG1fbmV3LCB2b2lkICopLCBsZW5ndGgs IHVpbyk7DQorCQlpZiAoZXJyb3IpDQorCQkJZ290byBub3NwYWNlOw0KKwkJ cHJvZ3Jlc3MgKz0gbGVuZ3RoOw0KKwkJbV9uZXctPm1fbGVuID0gbGVuZ3Ro Ow0KKwkJaWYgKG1fbmV3ICE9IG1fZmluYWwpDQorCQkJbV9jYXQobV9maW5h bCwgbV9uZXcpOw0KKwkJbV9uZXcgPSBOVUxMOw0KKwl9DQorCW1fZml4aGRy KG1fZmluYWwpOw0KKwlyZXR1cm4gKG1fZmluYWwpOw0KK25vc3BhY2U6DQor CWlmIChtX25ldykNCisJCW1fZnJlZShtX25ldyk7DQorCWlmIChtX2ZpbmFs KQ0KKwkJbV9mcmVlbShtX2ZpbmFsKTsNCisJcmV0dXJuIChOVUxMKTsNCit9 DQorDQoraW50DQoraW92X3RvX3VpbyhzdHJ1Y3QgaW92ZWMgKmlvdnAsIHVf aW50IGlvdmNudCwgc3RydWN0IHVpbyAqYXVpbykNCit7DQorCWludCBlcnJv ciA9IDAsIGk7DQorCXVfaW50IGlvdmxlbjsNCisJc3RydWN0IGlvdmVjICpp b3YgPSBOVUxMOw0KKw0KKwlpZiAoaW92Y250IDwgMCkNCisJCXBhbmljKCJp b3ZjbnQgPCAwIVxuIik7DQorDQorICAgICAgICAvKiBub3RlOiBjYW4ndCB1 c2UgaW92bGVuIHVudGlsIGlvdmNudCBpcyB2YWxpZGF0ZWQgKi8NCisgICAg ICAgIGlvdmxlbiA9IGlvdmNudCAqIHNpemVvZiAoc3RydWN0IGlvdmVjKTsN CisgICAgICAgIGlmIChpb3ZjbnQgPiBVSU9fTUFYSU9WKSB7DQorICAgICAg ICAgICAgICAgZXJyb3IgPSBFSU5WQUw7DQorICAgICAgICAgICAgICAgZ290 byBkb25lOw0KKyAgICAgICAgfQ0KKyAgICAgICAgTUFMTE9DKGlvdiwgc3Ry dWN0IGlvdmVjICosIGlvdmxlbiwgTV9JT1YsIE1fV0FJVE9LKTsNCisgICAg ICAgIGF1aW8tPnVpb19pb3YgPSBpb3Y7DQorICAgICAgICBhdWlvLT51aW9f aW92Y250ID0gaW92Y250Ow0KKyAgICAgICAgYXVpby0+dWlvX3NlZ2ZsZyA9 IFVJT19VU0VSU1BBQ0U7DQorICAgICAgICBhdWlvLT51aW9fb2Zmc2V0ID0g LTE7DQorICAgICAgICBpZiAoKGVycm9yID0gY29weWluKGlvdnAsIGlvdiwg aW92bGVuKSkpDQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsNCisgICAg ICAgIGF1aW8tPnVpb19yZXNpZCA9IDA7DQorICAgICAgICBmb3IgKGkgPSAw OyBpIDwgaW92Y250OyBpKyspIHsNCisgICAgICAgICAgICAgICAgaWYgKGlv di0+aW92X2xlbiA+IElOVF9NQVggLSBhdWlvLT51aW9fcmVzaWQpIHsNCisg ICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVJTlZBTDsNCisgICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7DQorICAgICAgICAgICAg ICAgIH0NCisgICAgICAgICAgICAgICAgYXVpby0+dWlvX3Jlc2lkICs9IGlv di0+aW92X2xlbjsNCisgICAgICAgICAgICAgICAgaW92Kys7DQorICAgICAg ICB9DQorDQorZG9uZToNCisJaWYgKGVycm9yICYmIGF1aW8tPnVpb19pb3Yp IHsNCisJCUZSRUUoYXVpby0+dWlvX2lvdiwgTV9JT1YpOw0KKwkJYXVpby0+ dWlvX2lvdiA9IE5VTEw7DQorCX0NCisJcmV0dXJuIChlcnJvcik7DQorDQor fQ0KZGlmZiAtdSAtciAvdXNyL3NyYy9zeXMub2xkL2tlcm4vdWlwY19zeXNj YWxscy5jIC91c3Ivc3JjL3N5cy9rZXJuL3VpcGNfc3lzY2FsbHMuYw0KLS0t IC91c3Ivc3JjL3N5cy5vbGQva2Vybi91aXBjX3N5c2NhbGxzLmMJU2F0IEph biAgMyAxOTo1MToyOSAyMDA0DQorKysgL3Vzci9zcmMvc3lzL2tlcm4vdWlw Y19zeXNjYWxscy5jCVNhdCBKYW4gIDMgMjA6MTU6MDggMjAwNA0KQEAgLTE2 NjcsMTMgKzE2NjcsMTUgQEANCiAJc3RydWN0IHZub2RlICp2cDsNCiAJc3Ry dWN0IHZtX29iamVjdCAqb2JqOw0KIAlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5V TEw7DQotCXN0cnVjdCBtYnVmICptOw0KKwlzdHJ1Y3QgbWJ1ZiAqbSwgKm1f aGVhZGVyID0gTlVMTDsNCiAJc3RydWN0IHNmX2J1ZiAqc2Y7DQogCXN0cnVj dCB2bV9wYWdlICpwZzsNCiAJc3RydWN0IHdyaXRldl9hcmdzIG51YXA7DQog CXN0cnVjdCBzZl9oZHRyIGhkdHI7DQorCXN0cnVjdCB1aW8gaGRyX3VpbzsN CiAJb2ZmX3Qgb2ZmLCB4ZnNpemUsIGhkdHJfc2l6ZSwgc2J5dGVzID0gMDsN Ci0JaW50IGVycm9yLCBzOw0KKwlpbnQgZXJyb3IsIHMsIGhlYWRlcnNpemUg PSAwLCBoZWFkZXJzZW50ID0gMDsNCisJc3RydWN0IGlvdmVjICpoZHJfaW92 ID0gTlVMTDsNCiANCiAJbXR4X2xvY2soJkdpYW50KTsNCiANCkBAIC0xNzIx LDE5ICsxNzIzLDI1IEBADQogCQlpZiAoZXJyb3IpDQogCQkJZ290byBkb25l Ow0KIAkJLyoNCi0JCSAqIFNlbmQgYW55IGhlYWRlcnMuIFdpbXAgb3V0IGFu ZCB1c2Ugd3JpdGV2KDIpLg0KKwkJICogU2VuZCBhbnkgaGVhZGVycy4NCiAJ CSAqLw0KIAkJaWYgKGhkdHIuaGVhZGVycyAhPSBOVUxMKSB7DQotCQkJbnVh cC5mZCA9IHVhcC0+czsNCi0JCQludWFwLmlvdnAgPSBoZHRyLmhlYWRlcnM7 DQotCQkJbnVhcC5pb3ZjbnQgPSBoZHRyLmhkcl9jbnQ7DQotCQkJZXJyb3Ig PSB3cml0ZXYodGQsICZudWFwKTsNCisJCQloZHJfdWlvLnVpb190ZCA9IHRk Ow0KKwkJCWhkcl91aW8udWlvX3J3ID0gVUlPX1dSSVRFOw0KKwkJCWVycm9y ID0gaW92X3RvX3VpbyhoZHRyLmhlYWRlcnMsIGhkdHIuaGRyX2NudCwNCisJ CQkJJmhkcl91aW8pOw0KIAkJCWlmIChlcnJvcikNCiAJCQkJZ290byBkb25l Ow0KLQkJCWlmIChjb21wYXQpDQotCQkJCXNieXRlcyArPSB0ZC0+dGRfcmV0 dmFsWzBdOw0KLQkJCWVsc2UNCi0JCQkJaGR0cl9zaXplICs9IHRkLT50ZF9y ZXR2YWxbMF07DQorCQkJLyogQ2FjaGUgaGRyX2lvdiwgbV91aW90b21idWYg bWF5IGNoYW5nZSBpdC4gKi8NCisJCQloZHJfaW92ID0gaGRyX3Vpby51aW9f aW92Ow0KKwkJCWlmIChoZHJfdWlvLnVpb19yZXNpZCA+IDApIHsNCisJCQkJ bV9oZWFkZXIgPSBtX3Vpb3RvbWJ1ZigmaGRyX3VpbywgTV9ET05UV0FJVCwg MCk7DQorCQkJCWlmIChtX2hlYWRlciA9PSBOVUxMKQ0KKwkJCQkJZ290byBk b25lOw0KKwkJCQloZWFkZXJzaXplID0gbV9oZWFkZXItPm1fcGt0aGRyLmxl bjsNCisJCQkJaWYgKGNvbXBhdCkNCisJCQkJCXNieXRlcyArPSBoZWFkZXJz aXplOw0KKwkJCX0NCiAJCX0NCiAJfQ0KIA0KQEAgLTE4OTAsNyArMTg5OCwx MCBAQA0KIAkJLyoNCiAJCSAqIEdldCBhbiBtYnVmIGhlYWRlciBhbmQgc2V0 IGl0IHVwIGFzIGhhdmluZyBleHRlcm5hbCBzdG9yYWdlLg0KIAkJICovDQot CQlNR0VUSERSKG0sIE1fVFJZV0FJVCwgTVRfREFUQSk7DQorCQlpZiAobV9o ZWFkZXIpDQorCQkJTUdFVChtLCBNX1RSWVdBSVQsIE1UX0RBVEEpOw0KKwkJ ZWxzZQ0KKwkJCU1HRVRIRFIobSwgTV9UUllXQUlULCBNVF9EQVRBKTsNCiAJ CWlmIChtID09IE5VTEwpIHsNCiAJCQllcnJvciA9IEVOT0JVRlM7DQogCQkJ c2ZfYnVmX2ZyZWUoKHZvaWQgKilzZl9idWZfa3ZhKHNmKSwgc2YpOw0KQEAg LTE5MDQsNiArMTkxNSwxNCBAQA0KIAkJICAgIEVYVF9TRkJVRik7DQogCQlt LT5tX2RhdGEgPSAoY2hhciAqKXNmX2J1Zl9rdmEoc2YpICsgcGdvZmY7DQog CQltLT5tX3BrdGhkci5sZW4gPSBtLT5tX2xlbiA9IHhmc2l6ZTsNCisNCisJ CWlmIChtX2hlYWRlcikgew0KKwkJCW1fY2F0KG1faGVhZGVyLCBtKTsNCisJ CQltID0gbV9oZWFkZXI7DQorCQkJbV9oZWFkZXIgPSBOVUxMOw0KKwkJCW1f Zml4aGRyKG0pOw0KKwkJfQ0KKw0KIAkJLyoNCiAJCSAqIEFkZCB0aGUgYnVm ZmVyIHRvIHRoZSBzb2NrZXQgYnVmZmVyIGNoYWluLg0KIAkJICovDQpAQCAt MTk2NSw2ICsxOTg0LDcgQEANCiAJCQlzYnVubG9jaygmc28tPnNvX3NuZCk7 DQogCQkJZ290byBkb25lOw0KIAkJfQ0KKwkJaGVhZGVyc2VudCA9IDE7DQog CX0NCiAJc2J1bmxvY2soJnNvLT5zb19zbmQpOw0KIA0KQEAgLTE5ODUsNiAr MjAwNSwxMyBAQA0KIAl9DQogDQogZG9uZToNCisJaWYgKGhlYWRlcnNlbnQp IHsNCisJCWlmICghY29tcGF0KQ0KKwkJCWhkdHJfc2l6ZSArPSBoZWFkZXJz aXplOw0KKwl9IGVsc2Ugew0KKwkJaWYgKGNvbXBhdCkNCisJCQlzYnl0ZXMg LT0gaGVhZGVyc2l6ZTsNCisJfQ0KIAkvKg0KIAkgKiBJZiB0aGVyZSB3YXMg bm8gZXJyb3Igd2UgaGF2ZSB0byBjbGVhciB0ZC0+dGRfcmV0dmFsWzBdDQog CSAqIGJlY2F1c2UgaXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgd3JpdGV2Lg0K QEAgLTIwMDEsNiArMjAyOCwxMCBAQA0KIAkJdnJlbGUodnApOw0KIAlpZiAo c28pDQogCQlmcHV0c29jayhzbyk7DQorCWlmIChoZHJfaW92KQ0KKwkJRlJF RShoZHJfaW92LCBNX0lPVik7DQorCWlmIChtX2hlYWRlcikNCisJCW1fZnJl ZW0obV9oZWFkZXIpOw0KIA0KIAltdHhfdW5sb2NrKCZHaWFudCk7DQogDQpP bmx5IGluIC91c3Ivc3JjL3N5cy9rZXJuOiB1aXBjX3N5c2NhbGxzLmMucmVq Lm9yaWcNCmRpZmYgLXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9zeXMvdWlvLmgg L3Vzci9zcmMvc3lzL3N5cy91aW8uaA0KLS0tIC91c3Ivc3JjL3N5cy5vbGQv c3lzL3Vpby5oCVNhdCBKYW4gIDMgMTk6NTE6MzAgMjAwNA0KKysrIC91c3Iv c3JjL3N5cy9zeXMvdWlvLmgJU2F0IEphbiAgMyAyMDoxNjo1MiAyMDA0DQpA QCAtOTQsNiArOTQsOSBAQA0KIGludAl1aW9tb3ZlX2Zyb21idWYodm9pZCAq YnVmLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdWlvICp1aW8pOw0KIGludAl1aW9t b3ZlY28odm9pZCAqY3AsIGludCBuLCBzdHJ1Y3QgdWlvICp1aW8sIHN0cnVj dCB2bV9vYmplY3QgKm9iaiwNCiAJICAgIGludCBkaXNwb3NhYmxlKTsNCitz dHJ1Y3QgbWJ1ZiAqDQorCW1fdWlvdG9tYnVmKHN0cnVjdCB1aW8gKnVpbywg aW50IGhvdywgaW50IGxlbik7DQoraW50CWlvdl90b191aW8oc3RydWN0IGlv dmVjICppb3ZwLCB1X2ludCBpb3ZjbnQsIHN0cnVjdCB1aW8gKmF1aW8pOw0K IA0KICNlbHNlIC8qICFfS0VSTkVMICovDQogDQo= --0-581488147-1073185599=:5165--