我已经为linux编写了虚拟输入驱动程序,以及一个通过/dev节点与它们通信的服务器。
现在,其中一个是虚拟鼠标,很重要的一点是,服务器接收到的信号尽快到达驱动程序,让鼠标感觉平滑。
为此,我将服务器进程的ionice设置为1(仍然无法获得比重要的linux守护进程更高的优先级):

    if (ioprio_set(IOPRIO_WHO_PROCESS,getpid(), 1 | IOPRIO_CLASS_RT << IOPRIO_CLASS_SHIFT) == -1) {
        logger->error("ioprio_set() error",errno);
    }

但我不确定它是否值得。即使存在差异,也无法察觉。在涉及I/O优先级时,/dev/中是否考虑了字符特殊文件,尽管没有授予对实际磁盘的访问权限?

最佳答案

据我所知,ionice影响操作系统的层是i/o调度程序。至少在内核2.6.17之前,cfq是唯一真正支持ionice的调度程序,我相信没有任何变化,至少在内核提供的默认调度程序方面是这样。
I/O调度程序仅用于块设备,在这种情况下,可以对操作进行排队或更改其顺序、延迟或合并操作等(例如,请参见here)。这也符合这样一个事实,即您可以通过/sys虚拟文件系统仅为块设备(如/sys/devices/pci0000:00/0000:00:08.0/host0/target0:0:0/0:0:0:0/block/sda/queue/scheduler文件)更改调度程序。鼠标驱动程序是一个字符设备,因此,它完全不受I/O调度程序或ionice的影响。

10-07 15:22