Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Jan 2004 21:08:38 -0600 (CST)
From:      Mike Silbersack <silby@silby.com>
To:        performance@freebsd.org
Subject:   RFC: Sendfile patch (fwd)
Message-ID:  <20040103210802.M5165@odysseus.silby.com>

next in thread | raw e-mail | index | archive | help
  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
Content-ID: <20040103210802.J5165@odysseus.silby.com>


Eh, I guess this would be on topic for -performance as well.  Especially
the part about benchmarking. :)

---------- Forwarded message ----------
Date: Sat, 3 Jan 2004 21:06:39 -0600 (CST)
From: Mike Silbersack <silby@silby.com>
To: arch@freebsd.org
Subject: RFC: Sendfile patch


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. <g>  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--


Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040103210802.M5165>