On Sep 8, 2007, at 7:46 PM, Dale Ghent wrote:

2) Option 2 would be to use the above mentioned ioctl-based method, but to remove it entirely from the critical code path. We could, at AFSinit() time, create a worker thread which would periodically update a global struct of interface telemetry. The worker thread would wake up every, say, 30 seconds (tunable), lock the struct via mutex, update it, unlock, and return to sleep. The RX and ServerPredfs code can read their desired values from this struct when they need it, spinning if need be.

FWIW, I've committed my own time and work towards this method since we could also see at least a slight performance increase over current code because we're not walking interface lists for every packet.

So, the ioctl method I described, and the worker thread is actually a Solaris task queue. See the ddi_taskq_create man page for details on that.

So far, my implementation uses Public interfaces. I'm desperately trying to keep away from Solaris's, err, Privates.

/dale

--
Dale Ghent
Specialist, Storage and UNIX Systems
UMBC - Office of Information Technology
ECS 201 - x51705



_______________________________________________
OpenAFS-devel mailing list
[email protected]
https://lists.openafs.org/mailman/listinfo/openafs-devel

Reply via email to