Re: High Performance I/O stuff (more)

Jordan Mendelson (jordy@wserv.com)
Wed, 15 Sep 1999 13:31:46 -0400


This is a multi-part message in MIME format.
--------------15876512C7F918C24B551AB4
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Jayson Nordwick wrote:
> If you find an available signal, set the handler for it, the block it,
> this signal number now effectively becomes the completion port. You then
> can fcntl() a file descriptor with F_SETSIG and the signal number. Then to
> fetch the blocked signals, use sigwaitinfo(). I guess you could also use
> aio_{read,write}() and set sigevent appropriately. This actually seems
> preferable since you can then use aio_return() to find the return value
> out and use aio_cancel() to cancel the request if wanted.

You probably don't need the aio_*() interfaces to be honest. It's just as easy
to set the socket nonblocking and deal with the event system as it is.

> Basically, unless anybody can see anything wrong with this get to work
> implementing!

I really haven't seen any examples of how to work with the event system.

Attached to this message is a basic example using sigwaitinfo() for linux
2.2.x and glibc 2.1. Once si_band information is integrated into the stable
tree, this will actually be an effective way to eliminate polling, although it
could use a bit of speeding up.

If I have made any mistakes, please email me. There wasn't that much
documentation on how to do it correctly.

Jordan

--
Jordan Mendelson     : http://jordy.wserv.com
Web Services, Inc.   : http://www.wserv.com
--------------15876512C7F918C24B551AB4
Content-Type: application/x-unknown-content-type-cfile;
 name="sigio2.c"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="sigio2.c"

LyoqKgogKiBTSUdJTzIuQyAtIEZ1biB3aXRoIHNpZ25hbHMKICoKICogVGhpcyBpcyBhIHZl cnkgc2ltcGxlIGV4YW1wbGUgd2hpY2ggcmVhZHMgc3RhbmRhcmQgaW5wdXQgYW5kIHByaW50 cwogKiB2aWEgc3RhbmRhcmQgb3V0cHV0LiBJdCB1c2VzIHNpZ3dhaXRpbmZvKCkgaW5zdGVh ZCBvZiBhIHNpZ25hbCBoYW5kbGVyCiAqIHRvIGRlcXVldWUgc2lnbmFscy4KICoKICogSSBh dHRlbXB0ZWQgdG8gbWFrZSB0aGlzIGFzIFBPU0lYJ2x5IGNvcnJlY3QgYXMgcG9zc2libGUs IGJ1dCB3aXRob3V0CiAqIGFjY2VzcyB0byByZWFsIFBPU0lYIGRvY3VtZW50YXRpb24sIEkg aGFkIHRvIHJlbHkgb24gb25saW5lIGluZm9ybWF0aW9uCiAqIHdoaWNoIHdhcyB2YWd1ZSBh dCBiZXN0LgogKgogKiBVbmxpbWl0ZWQgcmVkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlv biBvZiB0aGlzIHNvdXJjZSBpcyBncmFudGVkLgogKgogKiBKb3JkYW4gTWVuZGVsc29uIChq b3JkeUB3c2Vydi5jb20pCiAqKi8KCi8qIFdlIG5lZWQgRl9TRVRTSUcgKi8KI2RlZmluZSBf R05VX1NPVVJDRSAxCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNp bmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c2lnbmFs Lmg+CiNpbmNsdWRlIDx0ZXJtaW9zLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUg PHN5cy9maWxlLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zb2Nr ZXQuaD4KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KCnZvaWQgc2V0X2tleXByZXNzKHZvaWQp IHsKCXN0cnVjdCB0ZXJtaW9zIG5ldzsKCgl0Y2dldGF0dHIoMCwgJm5ldyk7CgoJbmV3LmNf bGZsYWcgJj0gKH5JQ0FOT04pOwoJbmV3LmNfY2NbVlRJTUVdID0gMDsKCW5ldy5jX2NjW1ZN SU5dID0gMTsKCgl0Y3NldGF0dHIoMCwgVENTQU5PVywgJm5ldyk7Cn0KCnZvaWQgZWNob19v ZmYodm9pZCkgewoJc3RydWN0IHRlcm1pb3MgbmV3OwoKCXRjZ2V0YXR0cigwLCAmbmV3KTsK CgluZXcuY19sZmxhZyAmPSAofkVDSE8pOwoJdGNzZXRhdHRyKDAsIFRDU0FOT1csICZuZXcp Owp9Cgp2b2lkIGVjaG9fb24odm9pZCkgewoJc3RydWN0IHRlcm1pb3MgbmV3OwoKCXRjZ2V0 YXR0cigwLCAmbmV3KTsKCgluZXcuY19sZmxhZyB8PSBFQ0hPOwoJdGNzZXRhdHRyKDAsIFRD U0FOT1csICZuZXcpOwp9CgovKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBzaWduYWwgcXVl dWUgb3ZlcmxvYWRzIC0gd2Ugc2hvdWxkIHNlbGVjdCgpCiAgIG9yIHBvbGwoKSBoZXJlICov CnZvaWQgc2lnaW9faGFuZGxlcihpbnQgc2lnbm8pIHsKCXByaW50Zigic2lnaW8gY2FsbGVk XG4iKTsKCWZmbHVzaChzdGRvdXQpOwp9CgppbnQgbWFpbigpIHsKICAgICAgICBpbnQgZmxh Z3MsIGZkOwogICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7CiAgICAgICAgc2lnaW5mb190 IGluZm87CiAgICAgICAgc2lnc2V0X3QgYmxvY2tlZF9zaWdzOwoKCS8qIE9wZW4gU1RESU4g Ki8KCWZkID0gb3BlbigiL2Rldi90dHkiLCBPX1JET05MWSk7CgogICAgICAgIC8qIFRlbGwg dGhlIE9TIHRoYXQgd2Ugc2hvdWxkIGdldCBTSUdJTyBmb3IgYSBwYXJ0aWN1bGFyIEZEICov CiAgICAgICAgaWYgKGZjbnRsKGZkLCBGX1NFVE9XTiwgZ2V0cGlkKCkpID09IC0xKSB7CiAg ICAgICAgCXBlcnJvcigiZmNudGwgRl9TRVRPV04iKTsKCQlyZXR1cm4gMTsKICAgICAgICB9 CgogICAgICAgIC8qIFNldCB0aGUgRkQgbm9uYmxvY2tpbmcgKi8KICAgICAgICBmbGFncyA9 IGZjbnRsKGZkLCBGX0dFVEZMLCAwKTsKCiAgICAgICAgaWYgKGZjbnRsKGZkLCBGX1NFVEZM LCBmbGFncyB8IE9fTk9OQkxPQ0sgfCBPX0FTWU5DKSA9PSAtMSkgewoJCXBlcnJvcigiZmNu dGwgRl9TRVRGTCIpOwoJCXJldHVybiAxOwogICAgICAgIH0KCgogICAgICAgIC8qIEZEIHNo b3VsZCByYWlzZSBTSUdSVE1JTisxIHdoZW4gYW4gZXZlbnQgaGFwcGVucyAqLwoJZmNudGwo ZmQsIEZfU0VUU0lHLCBTSUdSVE1JTisxKTsKCiAgICAgICAgLyogU0lHSU8gc2hvdWxkbid0 IGJlIHF1ZXVlZCBzaW5jZSBpdCByZXByZXNlbnRzIGEgcXVldWUgb3ZlcmZsb3cgKi8KCXNp Z2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKICAgICAgICBzYS5zYV9mbGFncyA9IDA7CiAgICAg ICAgc2Euc2FfaGFuZGxlciA9IHNpZ2lvX2hhbmRsZXI7CiAgICAgICAgaWYgKHNpZ2FjdGlv bihTSUdJTywgJnNhLCAwKSA9PSAtMSkgewogICAgICAgICAgIHBlcnJvcigic2lnYWN0aW9u IFNJR0lPIik7CiAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSAgICAgICAgCgogICAg ICAgIC8qIFF1ZXVlIHRoZXNlIHNpZ25hbHMgKi8KICAgICAgICBzaWdlbXB0eXNldCgmYmxv Y2tlZF9zaWdzKTsKICAgICAgICBzaWdhZGRzZXQoJmJsb2NrZWRfc2lncywgU0lHUlRNSU4r MSk7CiAgICAgICAgc2lnYWRkc2V0KCZibG9ja2VkX3NpZ3MsIFNJR0lOVCk7CiAgICAgICAg c2lncHJvY21hc2soU0lHX0JMT0NLLCAmYmxvY2tlZF9zaWdzLCAmc2Euc2FfbWFzayk7CgoJ LyogT25seSB3YW50IG9uZSBjaGFyIGF0IGEgdGltZSAqLwogICAgICAgIHNldF9rZXlwcmVz cygpOwoKCS8qIFNodXQgdXAgKi8KCWVjaG9fb2ZmKCk7CgoJcHJpbnRmKCJFbnRlciB0ZXh0 IChwcmVzcyBeQyB0byBleGl0KVxuIik7CiAgICAgICAgZmZsdXNoKHN0ZG91dCk7CgoJLyog VGhlIGlkZWEgaGVyZSBpcyB0byBlbGltaW5hdGUgdGhlIGNvc3QgYW5kIGNvbXBsZXhpdHkg b2YKCSAgIGEganVtcCBpbnRvIGEgc2lnbmFsIGhhbmRsZXIuIEluc3RlYWQgd2UganVzdCBk ZXF1ZXVlIHNpZ25hbHMKCSAgIGFzIHRoZXkgYmVjb21lIGF2YWlsYWJsZSAqLwoJd2hpbGUg KDEpIHsKICAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgYSBibG9ja2luZyBjYWxsLCB3ZSBj b3VsZCB1c2Ugc2lndGltZWRpbmZvCiAgICAgICAgICAgICAgICAgICB3aGljaCB0YWtlcyBh IHRpbWVvdXQgdmFsdWUgYW5kIHRoZW4gZG8gb3RoZXIgd29yawogICAgICAgICAgICAgICAg ICAgaW4gdGhpcyBsb29wLCBidXQgd2Ugb25seSBoYXZlIG9uZSBGRC4gKi8KCgkJaWYgKHNp Z3dhaXRpbmZvKCZibG9ja2VkX3NpZ3MsICZpbmZvKSA8IDApIHsKCQkJaWYgKGVycm5vICE9 IEVJTlRSKSB7CgkJCQlwZXJyb3IoInNpZ3dhaXRpbmZvIik7CgkJCQlyZXR1cm4gMTsKCQkJ fQoJCX0KCgkJaWYgKGluZm8uc2lfc2lnbm8gPT0gU0lHUlRNSU4rMSkgewoJCQljaGFyIGJ1 ZlsxXTsKCQkJaW50IG47CgoJCQkvKiBJZiB3ZSBoYWQgc2lfYmFuZCB3ZSBjb3VsZCB0ZWxs IHdoYXQga2luZCBvZgoJCQkgICBvcGVyYXRpb24gdG8gZG8gb24gdGhpcyBGRCwgYnV0IHNp bmNlIHdlIGFyZQoJCQkgICBvbmx5IHVzaW5nIFNURElOIHRoZW4gd2Uga25vdyBpdCdzIGEg cmVhZCAqLwoKCQkJbiA9IHJlYWQoaW5mby5zaV9mZCwgYnVmLCAxKTsKCgkJCWlmIChuID09 IDApIHsKCQkJCXBlcnJvcigicmVhZCIpOwoJCQkJcmV0dXJuIDE7CgkJCX0KCgkJCXByaW50 ZigiJWMiLCBidWZbMF0pOwoJCQlmZmx1c2goc3Rkb3V0KTsKICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoaW5mby5zaV9zaWdubyA9PSBTSUdJTlQpIHsKCQkJcHJpbnRmKCJcbkV4aXRp bmdcbiIpOwoJCQllY2hvX29uKCk7CgkJCXJldHVybiAwOwoJCX0KICAgICAgICB9CgogICAg ICAgIHJldHVybiAwOwp9Cg== --------------15876512C7F918C24B551AB4--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/