Improve the message that is printed when Linux taskstats are not found
commit0881c06027b49c3e53fcfe803ba63e11b2090ef3
authorPaul Wise <pabs3@bonedaddy.net>
Thu, 3 May 2018 03:06:09 +0000 (3 11:06 +0800)
committerPaul Wise <pabs3@bonedaddy.net>
Thu, 3 May 2018 04:34:06 +0000 (3 12:34 +0800)
tree20b890da22b3a8f2bab67be53c841793277662bd
parent5bdd01c3b3b1c415c71b00b2374538995f63597c
Improve the message that is printed when Linux taskstats are not found

Usually this means that iotop is being run in a container.
The Linux kernel doesn't support taskstats outside the host net namespace.
There was a patch that looks like it may fix this but it never got merged.

Traceback (most recent call last):
  File "/usr/sbin/iotop", line 17, in <module>
    main()
  File "/usr/lib/python3/dist-packages/iotop/ui.py", line 737, in main
    main_loop()
  File "/usr/lib/python3/dist-packages/iotop/ui.py", line 727, in <lambda>
    main_loop = lambda: run_iotop(options)
  File "/usr/lib/python3/dist-packages/iotop/ui.py", line 618, in run_iotop
    return run_iotop_window(None, options)
  File "/usr/lib/python3/dist-packages/iotop/ui.py", line 609, in run_iotop_window
    taskstats_connection = TaskStatsNetlink(options)
  File "/usr/lib/python3/dist-packages/iotop/data.py", line 151, in __init__
    self.family_id = controller.get_family_id('TASKSTATS')
  File "/usr/lib/python3/dist-packages/iotop/genetlink.py", line 76, in get_family_id
    m = GeNlMessage.recv(self.conn)
  File "/usr/lib/python3/dist-packages/iotop/genetlink.py", line 56, in recv
    msg = conn.recv()
  File "/usr/lib/python3/dist-packages/iotop/netlink.py", line 255, in recv
    raise err
OSError: Netlink error: No such file or directory (2)

See-also: https://blog.outlyer.com/using-netlink-to-calculate-load-averages
See-also: https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg924689.html
See-also: https://bugzilla.redhat.com/show_bug.cgi?id=1290691
See-also: https://bugs.openvz.org/browse/OVZ-5655
iotop/ui.py