On Mar 12, 2008, at 3:20 AM, Sophie Hu wrote: > I am doing a project, in which 10k users set up connection with one > server. > The server part is originally implemented using select() mode. Since > it consumed a lot of CPU, I replaced select() mode with port_getn(). > Unfortunally, the CPU consumption is not reduced at all. I am trying > to analyze the reason: > > To use select(), you have to store all the interested sockets in an > array or list. Then you check each element of the array/list to see > if any of them is ready to read/write (using FD_ISSET). > > By using port_getn(), you already get the sockets which are ready to > read/write from the eventList. Therefore, you just read/write data > from/to the sockets in the eventList (event. portev_object), you do > not need to search the whole array/list to find the sockets. > > However, in my case, each time I get eventList from port_getn(), I > still need to search the while array/list to get some other client > information based on socketID I get from eventList. Due to this > reason, I did not get benefit from port_getn() and CPU is not > reduced. Is my analysis correct?
Sophie, You shouldn't need to do a search; ports allow you to associate a pointer with each event of interest which you can use directly. You should pass the pointer to your client information as the "user" argument to port_associate(), and it will be sent in the portev_user field of the port_event_t structure port_getn() fills in. See if that helps. Cheers, - jonathan -------------------------------------------------------------------------- Jonathan Adams, Sun Microsystems, ZFS Team http://blogs.sun.com/jwadams _______________________________________________ perf-discuss mailing list perf-discuss@opensolaris.org