On Mon, 17 Mar 2008, Aminuddin Abdullah wrote:

I have just upgraded 5 of my machines to V7 from 6.3 and then realized that all the machines has a high CPU usage. Almost all of them using 80%-90% CPU with more than 8000 connections. Using previous 6.3, it only uses 40-50% CPU with the same kind of connections.

Using top -S, I can see that swi5: +, PID 17 process is using 30% of CPU time. What is this process?

All the machines are Intel C2D 6300 except one which is a AMD 4000+.

Is this normal for V7? How do I downgrade to 6.3 if this V7 killing the CPU?

'+' is used in a swi name to indicate that the names of the interrupts to put in the thread name are too long, and the code looks like it was written under the assumption that at least one name would fit. It sounds like in this case, none fit. We should fix this code, but in the mean time, what you might consider doing is hacking intr_event_update() in kern_intr.c to print out overflowing names to the console using printf(9) so you can at least see what they are. This is the somewhat suspect bit of code:

212         /*
213          * If the handler names were too long, add +'s to indicate missing
214          * names. If we run out of room and still have +'s to add, change
215          * the last character from a + to a *.
216          */
217         last = &ie->ie_fullname[sizeof(ie->ie_fullname) - 2];
218         while (missed-- > 0) {
219 if (strlen(ie->ie_fullname) + 1 == sizeof(ie->ie_fullname)) {
220                         if (*last == '+') {
221                                 *last = '*';
222                                 break;
223                         } else
224                                 *last = '+';
225                 } else if (space) {
226                         strcat(ie->ie_fullname, " +");
227                         space = 0;
228                 } else
229                         strcat(ie->ie_fullname, "+");
230         }

I've CC'd John, who might have views on what we should do about this. It would be nice if we had a way to export information on all the interrupt event sources, including soft ones, and their mappings to ithreads, including swis, using sysctl. Or maybe we do already and he'll point us at it. :-)

Robert N M Watson
Computer Laboratory
University of Cambridge
_______________________________________________
freebsd-performance@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-performance
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to