-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Windows] psutil.net_io_counters I/O is limited to 32bit unsigned integer because of MIB_IFROW #816
Comments
Okay I did a little digging and I am wondering if we can work around this; Here is the code in psutil I was looking at: for windows the net IO counters are coming from a MIB, The structure of Would it be possible to check for the existence of the Edit: A little more digging, here is |
Tried doing a little more with this but since I haven't done any major C programming I could not figure out how to get the |
It occurred to me there was a PR for using MIB_IF_ROW2 that has been languishing for 2 years:
|
Ahh okay great, thanks! I actually somehow completely missed that pull request. Those are almost the exact changes I had made. I believe I have a Windows XP box, actually, so I will try to test this out too along with trying a workaround for XP. |
Yeah sorry I couldn't get to signal you that earlier. It would have saved you a lot of troubles. |
No problem, I don't mind learning new things! Is there any particular reason to keep XP / Server 2003 support though? Windows XP has been officially EOL for over 2 years now, anyone running anything in it could just use psutil < 4.3.0 or whatever release it'd be in. I'll still try and test it, I have both Server 2003 and XP for testing but it may take a little while. |
Yeah, I've been thinking about that, also because Win XP support was dropped in Python 3.3. Let's just say that if it's not too much effort (see psutil currently works on Win XP - and I don't know) I don't think it would be worth it to drop support for such a small change. |
I've got it working... Actually have to change the output to read with K not k (for Python unisgned long 64bit)
Before I even continue I'd like to mention that the reason I couldn't get it working before was that |
Closing this since you merged in #835 |
* origin/master: (121 commits) update HISTORY/README giampaolo#810: rename windows wheels to make pip 7.1.2 happy add doc warning about disk_io_counter() numbers which may overlap (se giampaolo#802) update HISTORY git travis/osx error fix typo fix travis err add STAT for ps.py Convert string arguments to bytes appveyor download script: check the num of download files and print a warning if it's < than expected win / CI: try not to upgrade pip version and see whether pip produces compatible wheels refactor makefile makefile refactoring makefile refactoring Updated to use better if/else/endif values (my bad) Updated HISTORY to explain better that Win XP still uses 32bit values Reverted test code, will add in a different PR Styling fixes (spaces instead of tabs) PEP 8 compliance and history update (Vista+ only for fix) Type fix Continue on RuntimeError when running df on partitions it can't run on Fix disk_usage test to use 1 kB block size due to issues with OS X Add comment lines to ifs for win versions Actually does need it in XP/2000 unfortunately Tried to keep the mingw32 support but win 7 sdk is causing issues Whoops, whitespace issue Add back in ws2tcpip.h in the proper place in Win XP / Win 2000 Fixes for compiling on Win XP/Win 200 Update HISTORY.rst with giampaolo#816 issue bug fix Fix for windows net_io_counters wrapping after 4.3GB due to MIB_IFROW using DWORD. Updated to use MIB_IF_ROW2 which gives ULONG values instead. This causes more breaking changes for Windows XP and all Windows versions less than Vista / Server 2008 meaning that it should have no problems working on Vista / Server 2008 and beyond. fix doc indentation doc indentation fix giampaolo#829: disk_usage().percent takes reserved root space into account giampaolo#829: add tests to compare disk_usage() with 'df' cmdline utility small refactoring update comment update badges move stuff around reorganize (move stuff in) _common.py def __all__ for _common.py module reorganize (move) test utils update __all__ small @memoize refactoring Fix psutil.virtual_memory() type mismatch for NetBSD. prettyfy code prettyfy code update README Sets Makefile variable for imports compatible with Python 3.x fix linux test memory_maps: use bytes fir unpackment err refactor smaps code linux memory_maps refactoring fix typo update doc update version and HISTORY re-enable win services re-enable all tests on windows try to upgrade pip try to upgrade pip try to upgrade pip try to install pip globally try to upgrade pip force build of old 4.1.0 ver giampaolo#817: add script to download exes/whels from appveyor appveyor exp 5 appveyor exp 4 appveyor exp 3 appveyor exp 2 appveyor/ci#806 (comment) appveyor exp appveyor/ci#806 (comment) appveyor experiment appveyor experiment appveyor: attempt differe VS config for py 3.5 fix typo restore previous appveyor conf + try to add python 3.5 64 bits try easier appveyor conf, see pypa/packaging.python.org#172 try to make appveyor create exes/wheels add freebsd dev notes refactor ctx switches uids/gids refactoring refactor num_threads more refactoring [Linux] Process.name() is 25% faster (on python 3) ignore me remove outdated test [Linux] speedup Process.status() by 28% [Linux] speedup Process.pid() by 20% by reading it from /proc/pid/stat instead of /proc/pid/status set ppid linux set ppid fix 813: have as_dict() ignore extraneous attribute names which getsattached to the Process instance pep8 fixes fix giampaolo#812: [NetBSD] fix compilation on NetBSD-5.x. build fix: MNT_RELATIME and MNT_EXTATTR are not available on NetBSD-5 build fix: declare warn() update IDEAS fix win tests better AD error handling on win service descr: handle unicode errors service descr: handle empty description str check PyUnicodeDecode return value add services memory leak tests update doc ...
Interesting problem I have seen for a while with using psutil. I'm by no means an expert with this but it is strange that when I approach 4 billion bytes it seems to rollover... I thought Python accounted for 32-bit integers and whatnot. Can someone explain if this can be accounted for?
What I'm using:
Python 2.7.11 (tried both 32 and 64 bit)
Windows 10 64 bit
psutil 4.1.0
Is this a product of Windows? Are the counters only a certain size? Because in my windows ethernet status screen under 'Activity' it shows:
Bytes sent: 337,887,481
Byes recieved: 30,797,026,512
While the bytes_sent is off it doesn't surprise me that there may be small differences but the bytes_recv about a hour ago showed a value of around 3,400,000,000 bytes and now it is only showing in the 800 millions.
The text was updated successfully, but these errors were encountered: