[Nexus 7 Themes and Apps] bradman117:
update 2.0.0

Updates

There has been a lot of controversy about Seeder/rngd. In newer versions of Dalvik, nothing touches /dev/random, and yet many users (including myself) still notice a lag reduction. There are theories ranging from kernel lock contention to UI polling load when crediting the entropy pool to simply kicking the governor. And many who believe it's all placebo. I'm trying my best to figure out what exactly is happening, and others are as well.

Someone asked how I arrived at the conclusion I did when I started the thread back in November, and I posted this; I think it might be better served here:

A while back one of the webapps I was hosting on Tomcat (server-side) was experiencing some inexplicable latency and while stracing java I saw it frequently hanging on read()'s from /dev/random. I checked the available entropy, and it was constantly under 250 or so. It was a VM, no HWRNG, so I decided to use rngd to push urandom->random.

Dropped session creation times under load from 5-10 seconds to less than a second.

It's worth noting that Linux is one of very few OSes that have a blocking RNG device. Free/OpenBSD, Windows, etc.. essentially only provide urandom. It's generally considered secure, even for long-term crypto keys, so long as the initial seed is big (and random) enough.

Checked on my device, and saw a few processes grabbing /dev/random. /proc/sys/kernel/random/entropy_avail reporting depleted input pool. Figured it was worth a shot, so I rebuilt rngd for arm (with a few patches, linked on first page), and tried it out. It made a significant difference. Posted it up on this thread, and had a lot of positive feedback. Wanted to get into Android development, so figured.. why not wrap a little UI around it. More positive feedback, so I threw it on the market as well.

I had no idea it would take off like this and was shocked when I saw it Thursday morning. I'm in the awkward position now of explaining why it seems to work for some people, and not for others, especially given the fact Dalvik doesn't have references to /dev/random as of ICS. Theories abound, but it looks like it might be an issue of polling the UI for input events when the entropy pool drops (which never happens so long as rngd is running).

I'm doing this as a hobby. I'm a *nix admin by trade, and can only spend time working on this stuff on evenings and weekends, and the last few weeks have been kinda nuts.

I want to stress to everyone that:

a) It doesn't work the way I thought it did on later Android builds, but it does reduce latency for me and many others even on these builds,

b) I'm offering (and always will offer) Seeder for free to everyone on XDA,

c) Like I say in the market description, if anyone has purchased it and it isn't working, PLEASE email me for a refund (and let me know what device you're on if you're willing).

I was one of the first to root the Captivate glide (my first Android phone), and submitted the A2DP bitpool patch; I was active in the n900 community. I hope everyone understands that I'm doing my best here!

I hope the technique proves useful to people, and if there is in fact contention at the kernel level, I hope it's solved so we all benefit.

Version 2.0.0 attached. No changes.

Version 2.0.0b1 attached. New performance profile selector, I/O queue extender, and power saving control. Improved root checking.

Version 1.4.0 attached. Major refactoring. Service control now fully asynchronous.

Version 1.3.1 attached. No changes from 1.3.1-beta.

Version 1.3.1-beta released. New root check method during ANR-sensitive code.

Version 1.3.0 attached. Proper IntentServices for process control, and notification on upgrade / loss of root / autostart failure.

Version 1.2.9 attached. Yet another update to the upgrade/autostart code.

Version 1.2.8 attached. Asynchronous startup of rngd during boot; this should solve the remaining autostart problems some users have reported.

Version 1.2.7 released. This version introduces a much more efficient suspend-on-sleep mode for rngd.

Version 1.2.6 released. This version reverts the suspend-on-sleep rngd change which may have been contributing to new latency. I'm sorting out a better way of implementing it.

Version 1.2.5 released. This version should fix the autostart failure some users have seen.

Version 1.2.4 released. This version implements a progress bar displaying your currently available entropy, as well as automatic rngd restart on upgrade.

Version 1.2 released. This version implements rngd suspend-on-sleep, and contains minor user interface updates, more robust process and superuser checks, and a new icon (thanks Nathanel!)

Version 1.1 released. This version uses the release signature, so you will need to uninstall the old XDA version first!