[Galaxy S I9000 Android Development] hardcore:
Hi guys,

UPDATE: Over time, I've modified some of these values in my SpeedMod kernel. The values here may not be the best ones.

NOTE: These tweaks are now included in kernels based on sztupy's Universal Lagfix, for example:

http://xdaforums.com/showthread.php?t=822756

But they must be manually activated from the recovery menu.

I've been using Linux kernel tweaks in a startup script to make the phone smoother.

With these tweaks, the phone is quite smooth and fast even without using the filesystem lagfixes.

These settings are only useful for you if you know how to create and modify a startup script. I use the old playlogos hack myself, but I'm sure there are many new ways to do it now.

# Tweak cfq io scheduler
for i in $(ls -1 /sys/block/stl*) $(ls -1 /sys/block/mmc*) $(ls -1 /sys/block/bml*) $(ls -1 /sys/block/tfsr*)
do echo "0" > $i/queue/rotational
echo "1" > $i/queue/iosched/low_latency
echo "1" > $i/queue/iosched/back_seek_penalty
echo "1000000000" > $i/queue/iosched/back_seek_max
echo "3" > $i/queue/iosched/slice_idle
done
# Remount all partitions with noatime
for k in $(busybox mount | grep relatime | cut -d " " -f3)
do
sync
busybox mount -o remount,noatime $k
done

# Tweak kernel VM management
echo "0" > /proc/sys/vm/swappiness
#echo "10" > /proc/sys/vm/dirty_ratio
#echo "4096" > /proc/sys/vm/min_free_kbytes

# Tweak kernel scheduler, less aggressive settings
echo "18000000" > /proc/sys/kernel/sched_latency_ns
echo "3000000" > /proc/sys/kernel/sched_wakeup_granularity_ns
echo "1500000" > /proc/sys/kernel/sched_min_granularity_ns

# Misc tweaks for battery life
echo "2000" > /proc/sys/vm/dirty_writeback_centisecs
echo "1000" > /proc/sys/vm/dirty_expire_centisecs

EDIT: Explanations:

# Remount all partitions with noatime

atime is a setting where the filesystem updates the access time of a file. This creates a write-after-every-read which slows things down. By default all partitions are mounted with relatime, which is an optimized version of atime. noatime is the fastest, and afaik we don't need atime.

# Tweak cfq io scheduler

Tweaked settings of the disk io scheduler more for flash memory. Defaults are optimized for spinning harddisks. Lowered the idle wait, re-enable the low latency mode of cfq, removed the penalty for back-seeks and explicitly tell the kernel the storage is not a spinning disk.

# Tweak kernel VM management

Set tendency of kernel to swap to minimum, since we don't use swap anyway.

Lower the amount of unwritten write cache to reduce lags when a huge write is required.

Increase tendency of kernel to keep block-cache to help with slower RFS filesystem.

Increase minimum free memory, in theory this should make the kernel less likely to suddenly run out of memory.

# Tweak kernel scheduler

Make the task scheduler more 'fair' when multiple tasks are running. This has a huge effect on UI and App responsiveness. These values (less aggressive settings) are 20% of the Linux defaults, and about half of the Android defaults.

# Miscellaneous tweaks

Increase the write flush timeouts to save some battery life.

___________________________________

EDIT: How to create/use a startup script:

You need root and busybox for this.

This procedure is adapted from the old OCLF which used this method to create a startup script in /system/userinit.sh

Check if the file /system/userinit.sh exists. If it does, u should just edit that file as the startup script and DO NOT do the procedure below.

Here's how to do it manually. Do this only if some other lagfix/patch has not already done the playlogos hack, otherwise u might overwrite the other script!

Create the startup script on your PC. Use adb to push it to /sdcard/userinit.sh

adb push userinit.sh /sdcard/userinit.sh

On your PC, create a file called playlogos1 with this content:

#!/system/bin/sh

sh /data/userinit.sh

playlogosnow

Use adb to push the playlogos1 file to /sdcard/playlogos1

adb push playlogos1 /sdcard/playlogos1

Now use adb shell, su and do this:

busybox mount -o remount,rw /system;

busybox cp /sdcard/userinit.sh /data/userinit.sh;

busybox mv /system/bin/playlogos1 /system/bin/playlogosnow;

busybox cp /sdcard/playlogos1 /system/bin/playlogos1;

chmod 755 /system/bin/playlogos1;

chmod 755 /data/userinit.sh;

The startup script will be /data/userinit.sh

The reason I put the startup script in /data is so that if you mess up the startup script and get stuck during boot, you can do a "clear data" from recovery, and the startup script will be erased.