When running pidgin with SILC account, the wakeups are huge: Top causes for wakeups: 41.1% (316.0) pidgin : schedule_timeout (process_timeout) Once I disabled SILC account pidgin doesn't even show up on the radar.
It looks like the silcclient library has it's own event loop. But in Pidgin we use the glib event loop, so in order to process incoming silc events we have a timer set to run silc_client_run_one() every 5 milliseconds. I changed the timer to run every 50 milliseconds, and I'll let the silc guy know about this bug report and hopefully he can work out something elegantly event-driven.
Latest silc client toolkit (libsilc) in rawhide is fully event based, not using polling at all, so should resolve this completely. Pidgin works with it too! :)