writev() inefficiency

Dean Gaudet (dgaudet-list-linux-kernel@arctic.org)
Sat, 25 Jan 1997 14:17:59 -0800 (PST)


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.

--1053580162-874410865-854230679=:25985
Content-Type: TEXT/PLAIN; charset=US-ASCII

It looks like writev() drops separate segments on the wire when used on a
socket. I looked at the behaviour of IRIX 6.2 and Solaris 2.5.1 and both
of them coalesce the vector of buffers into a single segment. I haven't
looked into the code to even know how easy this is to fix, consider this
just a FYI for someone with the time to look into.

Test program included, run a tcpdump alongside the test program to watch
the wire. Usage is "./a.out a.b.c.d port#" ... it just splats 200 'x's in
two 100 byte pieces at the port you give... I've just been splatting it at
port 80 on a nearby webserver.

Dean

--1053580162-874410865-854230679=:25985
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="test-writev.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.95dg1.970125141759.25985C@twinlark.arctic.org>
Content-Description:

I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQoj
aW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4u
aD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4N
CiNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCiNpbmNsdWRlIDxzeXMvdWlvLmg+
DQojaW5jbHVkZSA8ZXJybm8uaD4NCg0KI2lmbmRlZiBJTkFERFJfTk9ORQ0K
I2RlZmluZSBJTkFERFJfTk9ORSAoLTF1bCkNCiNlbmRpZg0KDQp2b2lkIG1h
aW4oIGludCBhcmdjLCBjaGFyICoqYXJndiApDQp7DQogICAgc3RydWN0IHNv
Y2thZGRyX2luIHNlcnZlcl9hZGRyOw0KICAgIGludCBzOw0KICAgIHN0cnVj
dCBpb3ZlYyB2ZWN0b3JbMl07DQogICAgY2hhciBidWZbMTAwXTsNCiAgICBp
bnQgaTsNCg0KICAgIGlmKCBhcmdjICE9IDMgKSB7DQp1c2FnZToNCglmcHJp
bnRmKCBzdGRlcnIsICJ1c2FnZTogdGVzdC13cml0ZXYgYS5iLmMuZCBwb3J0
I1xuIiApOw0KCWV4aXQoIDEgKTsNCiAgICB9DQogICAgc2VydmVyX2FkZHIu
c2luX2ZhbWlseSA9IEFGX0lORVQ7DQogICAgc2VydmVyX2FkZHIuc2luX2Fk
ZHIuc19hZGRyID0gaW5ldF9hZGRyKCBhcmd2WzFdICk7DQogICAgaWYoIHNl
cnZlcl9hZGRyLnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfTk9ORSApIHsN
CglmcHJpbnRmKCBzdGRlcnIsICJib2d1cyBhZGRyZXNzXG4iICk7DQoJZ290
byB1c2FnZTsNCiAgICB9DQogICAgc2VydmVyX2FkZHIuc2luX3BvcnQgPSBo
dG9ucyggYXRvaSggYXJndlsyXSApICk7DQoNCiAgICBzID0gc29ja2V0KCBB
Rl9JTkVULCBTT0NLX1NUUkVBTSwgMCApOw0KICAgIGlmKCBzIDwgMCApIHsN
CglwZXJyb3IoInNvY2tldCIpOw0KCWV4aXQoMSk7DQogICAgfQ0KICAgIGlm
KCBjb25uZWN0KCBzLCAoc3RydWN0IHNvY2thZGRyICopJnNlcnZlcl9hZGRy
LCBzaXplb2YoIHNlcnZlcl9hZGRyICkgKQ0KCSE9IDAgKSB7DQoJcGVycm9y
KCJjb25uZWN0Iik7DQoJZXhpdCgxKTsNCiAgICB9DQoNCiAgICAvKiBub3cg
YnVpbGQgdXAgYSB0d28gcGFydCB3cml0ZXYgYW5kIHdyaXRlIGl0IG91dCAq
Lw0KICAgIGZvciggaSA9IDA7IGkgPCBzaXplb2YoIGJ1ZiApOyArK2kgKSB7
DQoJYnVmW2ldID0gJ3gnOw0KICAgIH0NCiAgICB2ZWN0b3JbMF0uaW92X2Jh
c2UgPSBidWY7DQogICAgdmVjdG9yWzBdLmlvdl9sZW4gPSBzaXplb2YoYnVm
KTsNCiAgICB2ZWN0b3JbMV0uaW92X2Jhc2UgPSBidWY7DQogICAgdmVjdG9y
WzFdLmlvdl9sZW4gPSBzaXplb2YoYnVmKTsNCg0KICAgIGkgPSB3cml0ZXYo
IHMsICZ2ZWN0b3JbMF0sIDIgKTsNCiAgICBmcHJpbnRmKCBzdGRvdXQsICJp
PSVkLCBlcnJubz0lZFxuIiwgaSwgZXJybm8gKTsNCiAgICBleGl0KDApOw0K
fQ0K
--1053580162-874410865-854230679=:25985--