diff --git a/target/linux/oxnas/base-files/init.d/set-irq-affinity b/target/linux/oxnas/base-files/init.d/set-irq-affinity
new file mode 100755
index 0000000000000000000000000000000000000000..8ab066ff4cab00e68f7f78b3c37392a54c445f80
--- /dev/null
+++ b/target/linux/oxnas/base-files/init.d/set-irq-affinity
@@ -0,0 +1,22 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+
+get_irq() {
+	local name="$1"
+	grep -m 1 "$name" /proc/interrupts | cut -d: -f1 | sed 's, *,,'
+}
+
+set_irq_affinity() {
+	local name="$1"
+	local val="$2"
+	local irq="$(get_irq "$name")"
+	[ -n "$irq" ] || return
+	echo "$val" > "/proc/irq/$irq/smp_affinity"
+}
+
+start() {
+	set_irq_affinity ehci_hcd 2
+	set_irq_affinity xhci_hcd 2
+	set_irq_affinity sata 2
+}