-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi,
I'm currently trying to optimize my multicast UDP streaming application as much as I can, and was wondering if there is a way to read() multiple pending packets from the socket layer. I'm trying to squeeze every last bit of performance out of the machine (Netra 240), since I'm trying to receive a stream of several hundred Mbit/s worth of TV channels for integrity monitoring. Currently I top out at ~640Mbit/s and ~57000 packets/s. However, due to me only being able to read() on a per-packet basis, the machine ends up doing roughly 60000 syscalls every second. Between every read cycle I do a usleep(50000) to make sure that there are several packets waiting for me in the kernel buffers (to avoid extensive context switching). Also, I can see that all interrupts from the NIC (bge1) are hitting CPU0, which is significantly more loaded as a result (mpstat): CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 0 0 0 5 11145 11038 213 31 34 78 0 1455 0 92 0 7 1 0 0 5 293 286 229 35 36 66 0 59380 7 64 0 29 Even though my app supports running in multiple threads, currently CPU0 is completely occupied by interrupt handling from the NIC. Is there a way to load-balance interrupts from a single NIC between both CPUs, or do I have to connect another NIC to the network and try to load-balance the bitrates at a higher level? (e.g. request half of the channels through one NIC, and half through the other) Currently I'm running S10 on the machine (Generic_137111-08), but if OSol supported this kind of functionality, I'd happily reinstall it. Thanks in advance for any advice. Regards, - -- Saso -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAktJClQACgkQRO8UcfzpOHBUEQCgjB7EMjIV7E8KzpIyt/p6756+ YHkAoKqbOHZuQx5lPRG4+mZ9+5Bf8ynf =wxY3 -----END PGP SIGNATURE----- _______________________________________________ networking-discuss mailing list networking-discuss@opensolaris.org