我为 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 调度程序仅与块设备一起使用,可以对操作进行排队或更改其顺序、延迟或合并它们等。(看 这里 例如)。这也符合您可以通过以下方式更改调度程序的事实 /sys 仅适用于块设备的虚拟文件系统(诸如 /sys/devices/pci0000:00/0000:00:08.0/host0/target0:0:0/0:0:0:0/block/sda/queue/scheduler)。您的鼠标驱动程序是一个字符设备,因此,它根本不受 I/O 调度程序或 ionice.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top