如何禁用 Linux 媒体轮询?

如何禁用 Linux 媒体轮询?

我有一个 USB 软盘驱动器(至于原因,不要问)。当将其插入装有 Debian 和 udev 的现代 PC 时,每隔几秒钟就会有东西 ping 驱动器 --- 我相信它是在查看驱动器中是否有磁盘。

这会导致驱动器发出咔嗒声,非常烦人。

blktrace已经确认有东西正在通过网络发送命令:

  8,64   7        3     2.047998323  2930  I   N 0 [kworker/7:0]
  8,64   7        4     2.048002857  2930  D   N 0 [kworker/7:0]
  8,64   5        2     2.094203959    36  C   N [65531]
  8,64   7        5     4.095999615  2930  I   N 0 [kworker/7:0]
  8,64   7        6     4.096004486  2930  D   N 0 [kworker/7:0]
  8,64   5        3     4.142187593    36  C   N [65531]

(ETC)

不幸的是,进程 2930 是一个通用的 kworker,而进程 36 是 ksoftirqd,所以我只能说它来自内核的某个地方。

搜索互联网后发现,udev 曾经像这样进行媒体轮询,但自 2014 年左右以来,它已被内核媒体轮询所取代。进一步搜索发现,可以使用命令禁用此功能hal-disable-polling。然而,进一步搜索显示,这些命令已从 Debian 中删除。我还没有弄清楚它们被什么取代了。

有谁知道如何做到这一点?

答案1

您应该能够使用以下命令停止该设备:

# udisks --inhibit-polling /dev/your_device

或适用于所有具有以下功能的设备:

# udisks --inhibit-all-polling

答案2

我找到了解决此问题的部分方法:

该解决方案已在 Ubuntu 14.04 下测试过,并且也适用于较新版本的 Ubuntu 或 Debian。

此解决方案仅适用于廉价的 Teac USB 软盘控制器(对于其他 USB 控制器,您可能必须自行调整解决方案):

在终端中只需输入

lsscsi 

(如果尚未安装,请输入 sudo apt-get install lsscsi):

Output: [6:0:0:0]    disk    TEAC     USB UF000x       0.00  

如果在软盘驱动器连接时没有看到 TEAC 和 USB UF000x,则此解决方案不适合您。

使用管理员权限创建此文件:/etc/udev/rules.d/00-teacfloppy.rules

粘贴此行:

ACTION=="add", SUBSYSTEM=="block", ATTR{removable}=="1", ATTRS{idVendor}=="0644", ATTRS{idProduct}=="0000", ATTR{events_poll_msecs}="-1"

保存并重新启动。

驱动器将搜寻几秒钟然后电机将快速停止。

答案3

配置内核轮询间隔的另一种方法是通过/syssysfs 文件系统。

找到路径的最简单方法是:

find /sys -name events_poll_msecs

此后,可以使用以下命令更改间隔:

echo 0 > /sys/devices/..../block/sr0/events_poll_msecs

值 0 表示禁用轮询,值 -1 表示使用默认值/sys/module/block/parameters/events_dfl_poll_msecs

相关内容