Hi all. In the month of December arm saw some *sweet* improvements. Here’s what I’ve been up to:
Vastly Better Resolver Performance
By far the most expensive thing that arm does is ps and netstat/lsof/etc lookups. While wandering around development forums I discovered psutil, an awesome library for cross platform resolution of system and process information. For OSX and BSD they’re using ps and lsof lookups just like arm. However, for Linux they had a very different approach, querying proc contents directly. I adapted the functions for arm and it cut the runtime for resource and connection resolution by 90%. Many thanks to the authors of psutil (Jay Loden, Dave Daeschler, and Giampaolo Rodola’)!
For a long time FreeBSD has been arm’s nemesis. Its variant of netstat can’t get connection pids, the ss resolving utility belongs to a spreadsheet program instead, and even pid resolution failed (breaking resource stats and numerous other things). However, thanks to patches and testing by Fabian Keil and Hans Schnehl arm now has BSD counterparts for all of these, plus autodetection for BSD Jails.
Peter and I have finished revisions for the arm deb and it’s now pending feedback from the Debian FTP admins. Arm is also now available on ArchLinux thanks to Spider.007 and Fabian mentioned that he might be interested in doing a FreeBSD port.
Being the lone developer of arm is kinda lonely. I’d love to find other people interested in hacking on the code with me. To this end, and in anticipation of GSOC 2011, I’ve added a project to Tor’s volunteer page (“Client Mode Use Cases for Arm”). I also found other island resident interested in learning Python and possibly working on both arm and OpenWrt (keeping my fingers crossed that he’ll get involved!).
Plus numerous other fixes and improvements. The next release is currently planned for next week, and for January my goal is to get arm’s connection panel rewritten, which is important to the project for a couple reasons:
- The first couple iterations of arm were prototypes, figuring out what worked and what didn’t. As such, the maintainability and performance of the code kinda sucked. My overarching goal this year has been to rewrite the codebase to be both elegant and have the smallest resource usage possible. This rewrite is about 90% done, with the last remnants being the connection panel and controller.
- Client side use cases and several other potential GSOC projects involve the connection panel. Hence getting this code in shape is an important prerequisite for others to be able to hack on it. li>
The connection panel has several potential features queued up (identification of other attached controllers, country statistics for bridge operators, etc) so in February I’ll be implementing some of those. However, there’s looming deadlines for my work with Amazon so I might need to throw some of my weekends at that instead (causing this schedule to slip).