From owner-freebsd-arch Thu Apr 6 22:48:30 2000 Delivered-To: freebsd-arch@freebsd.org Received: from ns1.yes.no (ns1.yes.no [195.204.136.10]) by hub.freebsd.org (Postfix) with ESMTP id DB43637BDD8 for ; Thu, 6 Apr 2000 22:48:25 -0700 (PDT) (envelope-from eivind@bitbox.follo.net) Received: from bitbox.follo.net (bitbox.follo.net [195.204.143.218]) by ns1.yes.no (8.9.3/8.9.3) with ESMTP id HAA16958 for ; Fri, 7 Apr 2000 07:52:00 +0200 (CEST) Received: (from eivind@localhost) by bitbox.follo.net (8.8.8/8.8.6) id HAA35433 for freebsd-arch@freebsd.org; Fri, 7 Apr 2000 07:48:24 +0200 (CEST) Received: from apollo.backplane.com (apollo.backplane.com [216.240.41.2]) by hub.freebsd.org (Postfix) with ESMTP id E242137C217 for ; Thu, 6 Apr 2000 22:47:23 -0700 (PDT) (envelope-from dillon@apollo.backplane.com) Received: (from dillon@localhost) by apollo.backplane.com (8.9.3/8.9.1) id WAA94276; Thu, 6 Apr 2000 22:47:19 -0700 (PDT) (envelope-from dillon) Date: Thu, 6 Apr 2000 22:47:19 -0700 (PDT) From: Matthew Dillon Message-Id: <200004070547.WAA94276@apollo.backplane.com> To: Jonathan Lemon Cc: Archie Cobbs , freebsd-arch@freebsd.org Subject: Re: RFC: kqueue API and rough code References: <200004070107.SAA97591@bubba.whistle.com> <200004070220.TAA92896@apollo.backplane.com> <20000406220454.J80578@prism.flugsvamp.com> <200004070401.VAA93492@apollo.backplane.com> <20000406234905.K80578@prism.flugsvamp.com> <200004070510.WAA93968@apollo.backplane.com> <20000407003819.O80578@prism.flugsvamp.com> Sender: owner-freebsd-arch@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG : :> I don't understand your comment about 'binding the implementation'. :> No such thing is occuring. Sure, the user structure has to stay around.. :> that's not a big deal, it's how aio works. It certainly does not : :Yes, but that's not how this necessarily works, it isn't AIO. I can :create a huge buffer to copy in 10,000 events at once, and then read :events out into another buffer in chunks of 100 if I want. I don't :necessarily have to, in fact I definitely *don't* want to keep the :original structures around where I copied data from. If you have 100 events which would you rather do: (1) Pass an array of 100 kevent structures, each 16 bytes, and have to copyout 16x100 = 1600 bytes between the kernel and user space. Or (2) Pass an array of 100 kevent pointers and have to copyout 4x100 = 400 bytes (representing 400 pointers) between the kernel and user space. I don't know about you, but I'll take #2 any day. And if I have to keep the original kevent structure I passed to the kernel around, so what? The cost is virtually nil and I'd probably wind up wasting the same amount of space (and considerably more code) with my tracking structures (indexed by the descriptor and filter id, or by udata) anyway. What I want to do is this: struct myevent { struct kevent kev; ... MY STUFF GOES HERE ... }; Then I want to pass an array of pointers to myevent's to the kernel, and have it pass an array of pointers of ready events back. Simple, straightforward, who cares if we are 'wasting' sizeof(struct kevent) space? The amount of space is zilch compared other things! -Matt To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-arch" in the body of the message