The latest performance boost in v4.6 on classification and refinement jobs, seems to relate to particles on SSD cache and the use of the io_uring kernel module.
Although I have updated kernel to 5.4 and kernel config says “CONFIG_IO_URING=y”, I still get the new v4.6.1 warning “io_uring support disabled (not supported by kernel), I/O performance may degrade”.
What else is needed to enable io_uring usage in CS jobs?
Why is a optional optimization setting show as warning when not used?
io_uring is a bit controversial - security wise:
https://en.wikipedia.org/wiki/Io_uring
In June 2023, Google’s security team reported that 60% of the exploits submitted to their bug bounty program in 2022 were exploits of the Linux kernel’s io_uring vulnerabilities. As a result, io_uring was disabled for apps in Android, and disabled entirely in ChromeOS as well as Google servers.[11] Docker also consequently disabled io_uring from their default seccomp profile.[12]
Maybe a warning should be shown when io_uring is used?
Regarding the security aspects of io_uring - thank you for raising the question. While io_uring (and many other kernel/software subcomponents) can be a security issue for applications that are hosted on the internet or are accessed by untrusted users, we operate under the requirement that CryoSPARC should always be deployed within a trusted environment, with access and authentication provided through external systems (e.g. VPN, reverse proxy, etc). This requirement is unchanged regardless of whether io_uring is used.
Although I still run Rocky Linux 8 (w. elrepo kernel-lt 5.4) and here io_uring does not want to be controlled through sysctl.
io_uring seems enabled nevertheless:
grep io_uring_setup /proc/kallsyms
ffffffffb27575f0 t io_uring_setup
ffffffffb27576b0 T __x64_sys_io_uring_setup
ffffffffb27576d0 T __ia32_sys_io_uring_setup
ffffffffb3b007e0 d event_exit__io_uring_setup
ffffffffb3b00880 d event_enter__io_uring_setup
ffffffffb3b00920 d __syscall_meta__io_uring_setup
ffffffffb3b00960 d args__io_uring_setup
ffffffffb3b00970 d types__io_uring_setup
ffffffffb41f18b8 t __event_exit__io_uring_setup
ffffffffb41f18c0 t __event_enter__io_uring_setup
ffffffffb41f36a8 t __p_syscall_meta__io_uring_setup
ffffffffb41f6f20 t _eil_addr___ia32_sys_io_uring_setup
ffffffffb41f6f30 t _eil_addr___x64_sys_io_uring_setup
Even original Rocky Linux 8 w. kernel-4.18 seems to have some io_uring features backported:
grep io_uring_setup /proc/kallsyms
ffffffff985214f0 W __ia32_sys_io_uring_setup
ffffffff985214f0 W __x64_sys_io_uring_setup
I am just wondering how does cryoSPARC worker detect if io_uring is enabled or not?
To detect io_uring support, we call io_uring_get_probe() from liburing. This allows us to check what io_uring features are supported by the running kernel. It appears that some old kernels (the first few that supported io_uring) don’t actually support this kind of probing. So it is possible that your kernel has early io_uring support, but doesn’t being interrogated in this way. If that’s the case, then the only workaround at this time would be to update your kernel.
–Harris
I am using cryoparc v 4.7.1.
I have the “WARNING: io_uring support disabled (not supported by kernel), I/O performance may degrade”, and tried to Biocit’s tricks “[biocit, post:7, topic:15564”] kernel.io_uring_disabled=0
[/quote], but did not work out.
By the way, does this warning really affect the refinement performance if I do not use SSD?
What’s the output of uname -a? io_uring has been supported since kernel 2.6 (at least with async support)…
Not supported by kernel implies you’re running a really old install, have a kernel compiled without io_uring support, or it’s been disabled by boot flags.
If you really want io_uring, you’ll need to update to a kernel which supports it. I’m not familiar with RedHat kernel naming schemes (after some bad experiences I’ve always avoided RHEL and it’s downstream distros) but if the reporting is correct, you’re running a three year old kernel! I’d really recommend a major update.
I wouldn’t recommend downgrading CryoSPARC unless absolutely necessary. Earliest I would go back to would probably be 4.4… some versions (I forget which) change the database version and so are incompatible.
HI res_sci,
Another change I made was to store the processed CS jobs on an external hard drive due to limited internal space. Could this be the major problem for the very slow processing?
Well, yes. External drives (I presume USB as Firewire and eSATA have effectively died out) have a lot of limitations. It’s difficult to break 90MB/s via USB HDDs (sustained) and USB has significantly higher latency than SATA.