By default, your controller adapter polls at a rate of 125 Hz, or every eight milliseconds. However, by overclocking it, we can increase that rate to nearly 10 times at 1,000 Hz. The result of this overclock, per the document by SSBM_Arte, results in “a much closer experience to console play. It considerably improves the latency stability, which directly impacts execution, and also reduces input lag.”
You might have seen this in action with a mouse. Increasing the poll rate allows for smoother motion and less input latency. We’ll apply these same steps with a GameCube controller.
As people were quick to point out to me on Twitter, third-party controller adapters will not work with overclocking. So I went and got myself a Mayflash adapter. Works like a charm. You can either use this, or the official Wii U GC adapter. The latter has less latency volatility, but they’re expensive and hard to find. Make sure both USB ports are plugged into your desktop.
In time I may update this guide with Steam Deck instructions, but for the time being, it’s a hassle, so I don’t recommend overclocking your adapter on Deck.
Is Overclocking Dangerous?⌗
No. Per the document:
“Overclocking” a USB device is specification compliant. USB devices say to the PC “I would like to be polled at least every X ms when I’m in use.” Polling less often than that is not specification compliant…nothing changes inside the device, we’re just polling it faster than it asked for. Operating systems by default poll devices as rarely as they’re allowed to so as to preserve USB bandwidth. Then depending on the philosophy of the OS, the difficulty of explaining to the OS you don’t want to poll as seldom as possible differs.
It’s actually quite simple. Hopefully you’ve got some familiarity with the terminal (and pro-tip: pressing TAB while putting in a command or folder path name will auto-complete it, making your life easier). We’ll make use of a kernel module called gcadapter_oc_kmod. Make sure you have
linux-headers installed on your system (sounds like a no-brainer, but believe me, I didn’t have the headers when I first ran this script and it wouldn’t run). Then clone the repository:
git clone https://github.com/hannesmann/gcadapter-oc-kmod.git
If you’re on Arch, your life has been made simple. Change into the
gcadapter-oc-kmod/packaging/arch/ directory, then run
makepkg -si. You should be all set. If Dolphin/Slippi was open while you installed the module, restart the emulator and you should see the changes. Polling rate should stay consistent across reboots and kernel updates thanks to the use of DKMS.
On distros outside of Arch, change into the new directory:
Run “make” to build gcadapter_oc.ko:
Load the module into the running kernel:
sudo insmod gcadapter_oc.ko
Restart Slippi and you should be good.
In the event you want to revert the poll rate back to 125 Hz, simply run
sudo rmmod gcadapter_oc.ko.
Steam Deck…Yeah, It’s a Work-in-Progress⌗
I wish I could just say you could follow the instructions on GitHub, but unfortunately they are NOT working for me. I do not recommend following these steps as you will run into issues installing
make through Pacman, which requires unlocking the file system first. Even after unlocking the file system, you’re going to get into a spaghetti mess of issues trying to install pretty much anything from Pacman.
So, I’m hoping the developer of this kernel module will have some pre-compiled builds. Then in theory all you would need to do is run
sudo insmod gcadapter_oc.ko to install the module. But for now, I do NOT recommend trying to overclock your GC adapter on Deck.
Change Polling Rate⌗
You shouldn’t need to do this, but if for some reason setting the adapter to 1,000 Hz causes stutter or dropped inputs, you can reduce the polling rate to a lower value, such as 500 Hz. There’s one of two ways to do this. The first way would be (this needs to be run inside the directory where you built the kernel module; make sure the kernel module has been removed before doing this):
sudo insmod gcadapter_oc.ko rate=X
Change “X” to the polling rate in milliseconds. For example, if you wanted to set the rate to 250 Hz, you would replace “X” with “4” (without quotes). To set it to 500 Hz, you would use “2”. 1,000 Hz would be “1”. You get the idea.
Alternatively, you can do it this way:
sudo su cd /sys/module/gcadapter_oc/parameters/ echo X > rate
When I run
echo 4 > rate and restart Slippi, now my adapter’s polling rate is 250 Hz:
For some reason, if you connect your GC controller to port 2 in the Mayflash adapter in single player, you’ll get “the best experience.” It’s apparently better than using port 1, although the document doesn’t mention why. I’d love if someone could fill me in on that. Use ports 1 and 2 for doubles.
If you’re using the official adapter, plug a spare controller into port 1, and the one you’re planning on using into port 2. The document notes: “I am dead serious” and they get into why.
If you need more info about overclocking, see the document.