xhci stands for eXtensible Host Controller Interface which is standard for USB 3.0 "SuperSpeed" host controller hardware.
irq/21-xhci-hcd is likely to represent the irq associated to one particular usb bus. (Which can host several different usb devices)
lsusb -t
utility should give you more information (and lsusb -vt
even more) regarding the individual devices, the bus they are connected to as well as the drivers involved (one for the bus and another for the device itself) in particular.
The problem you notice could be the fact of one particular very busy or ill-functionning usb device. You should be able to identify it (thanks to the lsusb utility) and physically remove it (if possible) and re-test.
Time spent servicing software interrupts are likely to be but not necessarily related. You could check if they evolve in the same order of magnitude viewing /proc/stat
watching in particular the "tasklet" soft-irq periodically.
Regarding the latter while the info is reported as part of /proc/stat
, one might find easier to watch /proc/softirqs (because of the explicit labels)