• Introducing XDA Computing: Discussion zones for Hardware, Software, and more!    Check it out!

[TWEAK][APK][CWM] [update2.0.0] Seeder entropy generator to provide lag reduction

Search This thread

bradman117

Senior Member
Jan 20, 2011
1,537
1,518
28
Idaho, Rexburg
OnePlus 6
OnePlus 6T
FULL CREDIT TO lambgx02!
Original Post | CWM
Guys check this out

Best result on Android 4.+
Description
Hey everyone,

So, I was experiencing significant lag as we all do from time to time, and decided I was going to get to the bottom of it.

After tracing and debugging for hours, I discovered the source of 90% of Android's lag. In a word, entropy (or lack thereof).

Google's JVM, like Sun's, reads from /dev/random. For all random data. Yes, the /dev/random that uses a very limited entropy pool.

Random data is used for all kinds of stuff.. UUID generation, session keys, SSL.. when we run out of entropy, the process blocks. That manifests itself as lag. The process cannot continue until the kernel generates more high quality random data.

So, I cross-compiled rngd, and used it to feed /dev/urandom into /dev/random at 1 second intervals.

Result? I have never used an Android device this fast.

It is literally five times faster in many cases. Chrome, maps, and other heavy applications load in about 1/2 a second, and map tiles populate as fast as I can scroll. Task switching is instantaneous. You know how sometimes when you hit the home button, it takes 5-10 seconds for the home screen to repopulate? Yeah. Blocking on read of /dev/random. Problem solved. But don't take my word for it .. give it a shot!

Update!
I've built a very simple Android app that bundles the binary, and starts/stops the service (on boot if selected). I'll be adding more instrumentation, but for now, give it a shot! This APK does not modify /system in any way, so should be perfectly safe.

This is my first userspace Android app, so bear with me!

Note that this APK is actually compatible with all Android versions, and all (armel) devices. It's not at all specific to the Captivate Glide.
Quote Original Post link - Click Here

Requirements
  • An Android device! No iPhone's allowed! :D
  • Need Root
  • [Optional]-Root File manager


Before doing anything, please read the first post of this thread to understand how this thing functions!
Read it here: First post


First things first I am not the OP but things need to be sorted out...Ok...this thread is starting to get more and more attention, which is good because with more people to test things out, the more feedbacks and the more improvements can be done...however, the thread is now cluttered by tons on unhelpful posts, like "how to use this", "do I need root" etc...useful posts get pushed wayyy behind, until it is hard for people who are really trying to discuss to keep track...so I am here to answer the basic questions:

Do you need root for the app?:
Yes

Can it work on xxx device?:
Yes, as long as your device is arm based

Where to download the app?:
Here: http://forum.xda-developers.com/attachment.php?attachmentid=1640660&d=1358063993
Or search Play Store for a donate version...
The other 2 attachments are the rngd binary and a diff patch, which are not really required for end users...

How do I know that it is working?
Prior to starting seeder entropy generator through the app (v1.2.4 onwards), the bar below will only show numbers around 100-200++. After you start it, if the bar fills up and the value shoots up to 4000++, then it is working.

Do I have a risk of bricking my device?
No because the app won't modify system files at all...anything just uninstall...
For the zip, it only adds files to your system partition...does not modify any, so if you want to stop using this, you can disable it via the extended menu script...

It does not do anything/It is placebo/I see no improvements/It is awesome!/Wow!:
Well, this is not constructive or helpful...NOT AT ALL...keep in mind that this is still a WIP...research and discussions are still going on...if it is not working or you feel no change or a great improvement, please describe more and explain...which a lot of others are already doing so...:)...keep it up!


Seems that certain people are so bugged by the app...so...for those who prefer to run this via a script and init.d, read on...(the script works the same as the app, but with a few extra features)


=======================================================================================================================
UPDATE: Seeder_v7 is out, as suggested by pepoluan, it now detects for qrngd (built in rngd for Qualcomm Snapdragon-based devices), if it is there, then it will not start as rngd may conflict with it...the rngd binary is also using the latest version (it is turned off when screen is off)...users of previous versions can just flash it over...

INSTALLING
You need init.d support for this!
Download and flash:


How to use this script?:
After flashing, launch terminal emulator and type
Code:
su
seeder

You will get a menu like this:
FBB94.png


NOTE: There will be NO app after flashing! This only installs the necessary binaries and scripts...


For those who cannot install via recovery:
You get a status 0 error -> replace the update-binary in Seeder_v6.zip with one from another zip that works with your device

OR

Use the new installation method! :D

Instructions:
1. Download Seeder_v7_non-CWM.zip from here:
2. Extract the zip, you will get a folder named "install"
3. Place the folder in the root of your sdcard (/sdcard)
4. Launch terminal emulator, type:
Code:
su
cd /sdcard/install
sh install.sh
5. Ignore any error messages (those are only warnings, only happens to current users)
6. You are done! The script will auto-delete the "install" folder as it is not required anymore...

Sample output:
bUDTA.png



UNINSTALLING:
And now for the way to clean up Seeder_7:
Via recovery:
Flash Seeder_v6&7_Uninstall.zip:

Via terminal:
1. Download Seeder_v6&7_Uninstall_non-CWM.zip:
2. Extract it to the root of your sdcard (/sdcard), you should get a file named uninstall.sh
3. Launch terminal emulator and type this:
Code:
su
cd /sdcard
sh uninstall.sh
4. You are done! Everything gets cleaned up, including uninstall.sh...

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!


Download and flash this if you dont know what to download xD Click here!
 
Last edited:

ÜBER™

Recognized Themer
Nov 9, 2011
13,808
8,904
Texas
Holy crap dude! Using it now on my Gnex. Gunna give a few to see if it really does increase performance. As far as I can tell since installation scrolling in tapatalk has increased tenfold.

Sent from my Galaxy Nexus
 

Larry94

Senior Member
Apr 2, 2011
281
78
I got tired of turning it on every reboot that's why I used flash.

Sent from my Nexus 7 using xda premium

Would you mind doing me a quick favor? The permissions look a little different in ES File explorer. Would you install it, navigate to the different files, long press, properties, and select permissions and grab a screen shot?
 

knuckles1978

Senior Member
Aug 6, 2012
1,329
440
I flashed the CWM version because the app wouldn't stay on or switch on at boot. Haven't really noticed any difference yet, because I don't have any game that lags, including vice city on max settings, and I'm not over clocking yet either.

If MC4 has the occasional stutter then I'll try installing that and see.

Edit: forgot to mention, I also put it on my galaxy s1, and I can tell you that I do notice a definite difference on that.

Sent from my Nexus 7 using Tapatalk HD
 

Top Liked Posts

  • There are no posts matching your filters.
  • 37
    FULL CREDIT TO lambgx02!
    Original Post | CWM
    Guys check this out

    Best result on Android 4.+
    Description
    Hey everyone,

    So, I was experiencing significant lag as we all do from time to time, and decided I was going to get to the bottom of it.

    After tracing and debugging for hours, I discovered the source of 90% of Android's lag. In a word, entropy (or lack thereof).

    Google's JVM, like Sun's, reads from /dev/random. For all random data. Yes, the /dev/random that uses a very limited entropy pool.

    Random data is used for all kinds of stuff.. UUID generation, session keys, SSL.. when we run out of entropy, the process blocks. That manifests itself as lag. The process cannot continue until the kernel generates more high quality random data.

    So, I cross-compiled rngd, and used it to feed /dev/urandom into /dev/random at 1 second intervals.

    Result? I have never used an Android device this fast.

    It is literally five times faster in many cases. Chrome, maps, and other heavy applications load in about 1/2 a second, and map tiles populate as fast as I can scroll. Task switching is instantaneous. You know how sometimes when you hit the home button, it takes 5-10 seconds for the home screen to repopulate? Yeah. Blocking on read of /dev/random. Problem solved. But don't take my word for it .. give it a shot!

    Update!
    I've built a very simple Android app that bundles the binary, and starts/stops the service (on boot if selected). I'll be adding more instrumentation, but for now, give it a shot! This APK does not modify /system in any way, so should be perfectly safe.

    This is my first userspace Android app, so bear with me!

    Note that this APK is actually compatible with all Android versions, and all (armel) devices. It's not at all specific to the Captivate Glide.
    Quote Original Post link - Click Here

    Requirements
    • An Android device! No iPhone's allowed! :D
    • Need Root
    • [Optional]-Root File manager


    Before doing anything, please read the first post of this thread to understand how this thing functions!
    Read it here: First post


    First things first I am not the OP but things need to be sorted out...Ok...this thread is starting to get more and more attention, which is good because with more people to test things out, the more feedbacks and the more improvements can be done...however, the thread is now cluttered by tons on unhelpful posts, like "how to use this", "do I need root" etc...useful posts get pushed wayyy behind, until it is hard for people who are really trying to discuss to keep track...so I am here to answer the basic questions:

    Do you need root for the app?:
    Yes

    Can it work on xxx device?:
    Yes, as long as your device is arm based

    Where to download the app?:
    Here: http://forum.xda-developers.com/attachment.php?attachmentid=1640660&d=1358063993
    Or search Play Store for a donate version...
    The other 2 attachments are the rngd binary and a diff patch, which are not really required for end users...

    How do I know that it is working?
    Prior to starting seeder entropy generator through the app (v1.2.4 onwards), the bar below will only show numbers around 100-200++. After you start it, if the bar fills up and the value shoots up to 4000++, then it is working.

    Do I have a risk of bricking my device?
    No because the app won't modify system files at all...anything just uninstall...
    For the zip, it only adds files to your system partition...does not modify any, so if you want to stop using this, you can disable it via the extended menu script...

    It does not do anything/It is placebo/I see no improvements/It is awesome!/Wow!:
    Well, this is not constructive or helpful...NOT AT ALL...keep in mind that this is still a WIP...research and discussions are still going on...if it is not working or you feel no change or a great improvement, please describe more and explain...which a lot of others are already doing so...:)...keep it up!


    Seems that certain people are so bugged by the app...so...for those who prefer to run this via a script and init.d, read on...(the script works the same as the app, but with a few extra features)


    =======================================================================================================================
    UPDATE: Seeder_v7 is out, as suggested by pepoluan, it now detects for qrngd (built in rngd for Qualcomm Snapdragon-based devices), if it is there, then it will not start as rngd may conflict with it...the rngd binary is also using the latest version (it is turned off when screen is off)...users of previous versions can just flash it over...

    INSTALLING
    You need init.d support for this!
    Download and flash:


    How to use this script?:
    After flashing, launch terminal emulator and type
    Code:
    su
    seeder

    You will get a menu like this:
    FBB94.png


    NOTE: There will be NO app after flashing! This only installs the necessary binaries and scripts...


    For those who cannot install via recovery:
    You get a status 0 error -> replace the update-binary in Seeder_v6.zip with one from another zip that works with your device

    OR

    Use the new installation method! :D

    Instructions:
    1. Download Seeder_v7_non-CWM.zip from here:
    2. Extract the zip, you will get a folder named "install"
    3. Place the folder in the root of your sdcard (/sdcard)
    4. Launch terminal emulator, type:
    Code:
    su
    cd /sdcard/install
    sh install.sh
    5. Ignore any error messages (those are only warnings, only happens to current users)
    6. You are done! The script will auto-delete the "install" folder as it is not required anymore...

    Sample output:
    bUDTA.png



    UNINSTALLING:
    And now for the way to clean up Seeder_7:
    Via recovery:
    Flash Seeder_v6&7_Uninstall.zip:

    Via terminal:
    1. Download Seeder_v6&7_Uninstall_non-CWM.zip:
    2. Extract it to the root of your sdcard (/sdcard), you should get a file named uninstall.sh
    3. Launch terminal emulator and type this:
    Code:
    su
    cd /sdcard
    sh uninstall.sh
    4. You are done! Everything gets cleaned up, including uninstall.sh...

    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!


    Download and flash this if you dont know what to download xD Click here!
    10
    This sounds nice, but can you make some clean instructions for everybody to understand?
    Sure.
    Download entro-tweak.zip
    Extract the contents.
    Using a root explorer, take the 'entro' file and place it in /system/xbin/ and set permissions to rwx,r-x,r-x
    Then take the '20Entropy' file and place it in system/etc/init.d and set the permissions to rwx,r-x,r-x.(I created folders inside the zip to mimic their location)
    Reboot.

    Open terminal and type
    Code:
    entro
    to monitor it.
    It will run the equivalent of "watch -n 1 cat /proc/sys/kernel/random/entropy_avail"


    When I get home later tonight I can just make it flashable if anyone is interested (or these instructions arent clear enough)
    9
    How to check that seeder or other entropy tweak is actually operating as intended:

    1 - open up a terminal emulator window on phone or use adb shell from PC
    2 - run the following command (also not a bad idea to run it before implementing so that you can see what the pool looks like before tweaking):

    Code:
    while :; do cat /proc/sys/kernel/random/entropy_avail; sleep 1;done
    3 - watch the number change as you do things on your phone (easier when connected via adb)... should be between 2000 and 4000 if the tweak is active, otherwise likely to never be greater than 500.
    4
    10 grand... for nothing but snake oil...

    i am not surprised that the developer of the "v6 supercharger" is involved, king of all snake oil salesmen.
    4
    So I did a bit of digging and a bit of research and a bit of testing.
    I really dunno if the tweak makes that big of an effect but I did discover a nice trick to have a nice fat entropy_avail with zero overhead.

    One of the first pages I skimmed was http://linux.die.net/man/4/random which mentioned at the bottom these other files:
    read_wakeup_threshold contains the number of bits of entropy required for waking up processes that sleep waiting for entropy from /dev/random.
    write_wakeup_threshold contains the number of bits of entropy below which we wake up processes that do a select() or poll() for write access to /dev/random.

    Normally, read_wakeup_threshold is 64 and write_wakeup_threshold is 128

    I also wondered why most users report that their entropy_avail was by default in the 200ish range while mine was always by default over 300.

    I had also found this page at linuxinsight. I had used that site alot when researching Kick Ass Kernelizer's sysctl tweaks.

    So I thought, hey I wonder if I can use sysctl to set good values and low and behold, I looked in my script and I already have settings for both lol:
    Code:
    busybox sysctl -e -w kernel.random.read_wakeup_threshold=128;
    busybox sysctl -e -w kernel.random.write_wakeup_threshold=256;
    As you can see, I had doubled the default values - and that's why my entropy_avail was always over 300.

    So I decided to mess with sysctl a bit.

    Connected the phone to the laptop.
    In one command prompt I watched the entropy_avail with this one liner:
    Code:
    while :; do cat /proc/sys/kernel/random/entropy_avail; sleep 1;done
    In a second command prompt I did the sysctl thing...
    I found that write_wakeup_threshold didn't effect entropy_avail at all.

    But read_wakeup_threshold is a totally different story :cool:

    I did
    Code:
    busybox sysctl -w kernel.random.read_wakeup_threshold=2048
    The entropy_avail just started climbing....

    All the way up to 3600+ and just stayed there. Never went down at all.
    Actually, the more I did stuff with the phone, the faster the level would climb.

    So it would never go down and would never get used.
    I thought well maybe I should lower it so it does get used.
    I kept lowering read_wakeup_threshold until it got down to 1200 and finally entropy_avail dropped to 2400+ and kept climbing until 3600 and then would drop to 2400 immediately and up again and so on...

    I played with different values.
    Setting it to 1000... entropy would go up to 3000 and then drop to 2000 and up to 3000 again....
    Setting to 750.... entropy would go up to 2250 and drop to 1500 and up to 2250 again...

    So the pattern is:
    max entropy_avail=read_wakeup_threshold * 3
    min. entropy_avail=read_wakeup_threshold * 2 (ie. read_wakeup_threshold * 3 - read_wakeup_threshold)

    So it builds up 3 times the read_wakeup_threshold and then when it hits that limit, it drops the value of read_wakeup_threshold.

    If you want to lock it it at the highest possible value (4096), you'd do:
    Code:
    echo 1366 > /proc/sys/kernel/random/read_wakeup_threshold
    Or
    Code:
    busybox sysctl -w kernel.random.read_wakeup_threshold=1366
    You can add either of those to any init.d script.
    However, on my device, it won't go over 3600 so you can test for yourself how high yours will go.
    If all you can get is 3600ish just go with 1200 (ie. 3600/3)

    In Kick Ass Kernelizer I'm gonna make it like so:
    Code:
    busybox sysctl -e -w kernel.random.read_wakeup_threshold=1024;
    busybox sysctl -e -w kernel.random.write_wakeup_threshold=2048;
    That will make it bounce between 3072 max and 2048 min.
    I'm making write_wakeup_threshold twice the amount of read_wakeup_threshold simply because that's what it is by default.

    But hey, maybe I can save battery life if I make it 1280 just so it stays locked in at 3600+ and it doesn't have to keep rebuilding entropy_avail lol

    So conclusion is: since there is a definite pattern on how entropy was being built up to a pre-determined level and dropped to a pre-determined level, it wasn't actually being used. That's just how it's programmed.

    If the setting isn't there to "hold" all the entropy, it just drops/flushes it and force feeding it entropy won't make it not spit it out :p

    So at least I found the setting that will make it hold it in lol

    Maybe somebody would like to give it a try and test to see if it actually saves battery by setting read_wakeup_threshold to 1366.

    Just adding this, after reading the whole thread here it seems like this may be a simpler solution (and better on battery life)