为什么 /dev/ramX 设备在 /proc/diskstats 中全为 0?

为什么 /dev/ramX 设备在 /proc/diskstats 中全为 0?

有没有办法/dev/ramX在 Linux 中打开块设备的 IO 统计?我已经尝试过echo 1 > /sys/block/ram1/queue/iostat,但没有成功。

请注意,除了底部的内存设备外,所有设备都有统计信息,因此性能测量工具如dool无法测量 IO 速度:

# cat /proc/diskstats 
  11       0 sr0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  11       1 sr1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   8       0 sda 723676 35000 88332842 15213728 1023996 4665548 516093800 245971648 0 17497453 262613130 0 0 0 0 45125 1427753
   8      16 sdb 160138 25031 9086236 1901857 5894107 1629435 99783746 263249749 0 34043114 273161200 0 0 0 0 319611 8009594
   8      17 sdb1 126 30 8994 751 9 0 24 117 0 862 869 0 0 0 0 0 0
   8      18 sdb2 159872 25001 9072882 1900962 5894094 1629435 99783722 263249569 0 34042604 265150532 0 0 0 0 0 0
 253       0 dm-0 2910 0 55490 64862 6575840 0 52901448 295198662 0 20973198 295263524 0 0 0 0 0 0
 253       1 dm-1 112625 0 3832882 2024582 103580 0 1755640 12405574 0 1639466 14430156 0 0 0 0 0 0
 253       2 dm-2 757922 0 88327794 16122171 5450438 0 516093800 1273579273 0 16577985 1289701444 0 0 0 0 0 0
 253       3 dm-3 729 0 805332 9620 58317 0 13217898 6701775 0 868402 6711395 0 0 0 0 0 0
 253       4 dm-4 68487 0 4373706 650891 766343 0 31908736 44931626 0 13503972 45582517 0 0 0 0 0 0
   7       0 loop0 741 0 32160 69 159 0 912 4296 0 4336 8536 6 0 6 10 45 4160
   1       0 ram0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       1 ram1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       2 ram2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       3 ram3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       4 ram4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       5 ram5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       6 ram6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       7 ram7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       8 ram8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1       9 ram9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1      10 ram10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1      11 ram11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1      12 ram12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1      13 ram13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1      14 ram14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
   1      15 ram15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

答案1

Ramdisk /dev/ram*(或者更确切地说是brd模块)不会更新统计数据(*),我猜是出于效率原因。

如果您不介意小的开销,这里有一个解决方法:使用设备映射器在您的 ramdisk 上创建一个透明(1 对 1)层。然后,您将可以通过 dm 设备访问统计数据。

# ramsize=$(< /sys/block/ram0/size)
# dmsetup create ram0 --table "0 $ramsize linear /dev/ram0 0"
# dmsetup info ram0
(...)
Major, minor:      253, 6
(...)
# grep -Fw dm-6 /proc/diskstats

(*) 补丁被提议2012年但显然被忽视了

相关内容