12633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall#!/bin/bash 22633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 32633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken SumrallPERF="rand_emmc_perf" 41bf4d3345149615ec47e41cd940287a71b241b44Ken SumrallPERF_LOC=/dev 56be6b120c0e73f484360518e39cb17a05e3d1626Ken SumrallSTATS_FILE="/data/local/tmp/stats_test" 66be6b120c0e73f484360518e39cb17a05e3d1626Ken SumrallSTATS_MODE=0 71bf4d3345149615ec47e41cd940287a71b241b44Ken SumrallUSERBUILD_MODE=0 86be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 96be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallif [ "$1" = "-s" ] 106be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallthen 116be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall STATS_MODE=1 121bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallelif [ "$1" = "-u" ] 131bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallthen 141bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall USERBUILD_MODE=1 156be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallfi 162633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 172633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallif [ ! -r "$PERF" ] 182633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallthen 192633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall echo "Cannot read $PERF test binary" 202633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfi 212633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 222633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallif ! adb shell true >/dev/null 2>&1 232633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallthen 242633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall echo "No device detected over adb" 252633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfi 262633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 272633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken SumrallHARDWARE=`adb shell getprop ro.hardware | tr -d "\r"` 282633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 292633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallcase "$HARDWARE" in 302633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall tuna | steelhead) 312633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" 322633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall CACHE="/dev/block/platform/omap/omap_hsmmc.0/by-name/cache" 33ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall MMCDEV="mmcblk0" 342633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall ;; 352633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 362633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall stingray | wingray) 372633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" 382633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall CACHE="/dev/block/platform/sdhci-tegra.3/by-name/cache" 39ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall MMCDEV="mmcblk0" 402633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall ;; 412633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 422633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall herring) 432633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall echo "This test will wipe the userdata partition on $HARDWARE devices." 442633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall read -p "Do you want to proceed? " ANSWER 452633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 462633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall if [ "$ANSWER" != "yes" ] 472633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall then 482633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall echo "aborting test" 492633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall exit 1 502633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall fi 512633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 522633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" 532633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall CACHE="/dev/block/platform/s3c-sdhci.0/by-name/userdata" 54ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall MMCDEV="mmcblk0" 552633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall ;; 562633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 572633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall grouper) 582633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" 592633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall CACHE="/dev/block/platform/sdhci-tegra.3/by-name/CAC" 60ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall MMCDEV="mmcblk0" 612633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall ;; 622633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 63b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall manta) 64b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" 65b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall CACHE="/dev/block/platform/dw_mmc.0/by-name/cache" 66ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall MMCDEV="mmcblk0" 67b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall ;; 68b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall 696be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall flo) 706be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" 716be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall CACHE="dev/block/platform/msm_sdcc.1/by-name/cache" 726be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall MMCDEV="mmcblk0" 736be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall ;; 746be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 752633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall *) 762633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall echo "Unknown hardware $HARDWARE. Exiting." 772633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall exit 1 782633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallesac 792633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 801bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall# We cannot stop and unmount stuff in a user build, so don't even try. 811bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallif [ "$USERBUILD_MODE" -eq 0 ] 826be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallthen 831bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # prepare the device 841bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb root 851bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb wait-for-device 861bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb push "$PERF" /dev 871bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop 881bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop sdcard 891bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop ril-daemon 901bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop media 911bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop drm 921bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop keystore 931bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop tf_daemon 941bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop bluetoothd 951bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop hciattach 961bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop p2p_supplicant 971bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop wpa_supplicant 981bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell stop mobicore 991bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell umount /sdcard >/dev/null 2>&1 1001bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell umount /mnt/sdcard >/dev/null 2>&1 1011bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell umount /mnt/shell/sdcard0 >/dev/null 2>&1 1021bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell umount /mnt/shell/emulated >/dev/null 2>&1 1031bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell umount /cache >/dev/null 2>&1 1041bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall if [ "$STATS_MODE" -ne 1 ] 1051bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall then 1061bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell umount /data >/dev/null 2>&1 1071bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall fi 1081bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallelse 1091bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # For user builds, put the $PERF binary in /data/local/tmp, 1101bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # and also setup CACHE to point to a file on /data/local/tmp, 1111bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # and create that file 1121bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall PERF_LOC=/data/local/tmp 1131bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb push "$PERF" "$PERF_LOC" 1141bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall CACHE=/data/local/tmp/testfile 1151bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall echo "Creating testfile for user builds (can take up to 60 seconds)" 1161bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell dd if=/dev/zero of=$CACHE bs=1048576 count=512 1176be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallfi 1186be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1192633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Add more services here that other devices need to stop. 1202633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# So far, this list is sufficient for: 1212633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Prime 1222633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 1231bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallif [ "$USERBUILD_MODE" -eq 0 ] 1241bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallthen 1251bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # At this point, the device is quiescent, need to crank up the cpu speed, 1261bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # then run tests 1271bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "cat $CPUFREQ/cpuinfo_max_freq > $CPUFREQ/scaling_max_freq" 1281bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "cat $CPUFREQ/cpuinfo_max_freq > $CPUFREQ/scaling_min_freq" 1291bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallfi 1302633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 1312633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Start the tests 1322633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 1336be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallif [ "$STATS_MODE" -eq 1 ] 1346be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallthen 1356be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # This test looks for the average and max random write times for the emmc 1366be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # chip. It should be run with the emmc chip full for worst case numbers, 1376be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # and after fstrim for best case numbers. So first fill the chip, twice, 1386be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # then run the test, then remove the large file, run fstrim, and run the 1396be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # test again. 1406be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1416be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Remove the test file if it exists, then make it anew. 1426be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Filling userdata" 1436be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell rm -f "$STATS_FILE" 1446be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell dd if=/dev/zero of="$STATS_FILE" bs=1048576 1456be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell sync 1466be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1476be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Do it again to make sure to fill up all the reserved blocks used for 1486be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # wear levelling, plus any unused blocks in the other partitions. Yes, 1496be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # this is not precise, just a good heuristic. 1506be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Filling userdata again" 1516be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell rm "$STATS_FILE" 1526be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell sync 1536be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell dd if=/dev/zero of="$STATS_FILE" bs=1048576 1546be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell sync 1556be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1566be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Run the test 1576be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Running stats test after filling emmc chip" 1586be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell /dev/$PERF -w -o -s 20000 -f /dev/full_stats 400 "$CACHE" 1596be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1606be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Remove the file, and have vold do fstrim 1616be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell rm "$STATS_FILE" 1626be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell sync 1636be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Make sure fstrim knows there is work to do 1646be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall sleep 10 1656be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1666be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Get the current number of FSTRIM complete lines in thh logcat 1676be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall ORIGCNT=`adb shell logcat -d | grep -c "Finished fstrim work"` 1686be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1696be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Attempt to start fstrim 1706be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall OUT=`adb shell vdc fstrim dotrim | grep "Command not recognized"` 1716be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1726be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall if [ -z "$OUT" ] 1736be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall then 1746be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Wait till we see another fstrim finished line 1756be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall sleep 10 1766be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall let T=10 1776be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall NEWCNT=`adb shell logcat -d |grep -c "Finished fstrim work"` 1786be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall while [ "$NEWCNT" -eq "$ORIGCNT" ] 1796be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall do 1806be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall sleep 10 1816be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall let T=T+10 1826be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall if [ "$T" -ge 300 ] 1836be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall then 1846be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Error: FSTRIM did not complete in 300 seconds, continuing" 1856be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall break 1866be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall fi 1876be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall NEWCNT=`adb shell logcat -d |grep -c "Finished fstrim work"` 1886be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall done 1896be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1906be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "FSTRIM took "$T" seconds" 1916be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1926be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Run the test again 1936be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Running test after fstrim" 1946be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb shell /dev/$PERF -w -o -s 20000 -f /dev/fstrimmed_stats 400 "$CACHE" 1956be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 1966be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Retrieve the full data logs 1976be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb pull /dev/fstrimmed_stats $HARDWARE-fstrimmed_stats 1986be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall adb pull /dev/full_stats $HARDWARE-full_stats 1996be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall else 2006be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Device doesn't support fstrim, not running test a second time" 2016be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall fi 2026be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 2036be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallelse 2046be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 2056be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Sequential read test 2061bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall if [ "$USERBUILD_MODE" -eq 0 ] 2071bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall then 2081bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # There is no point in running this in USERBUILD mode, because 2091bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # we can't drop caches, and the numbers are ludicrously high 2101bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall for I in 1 2 3 2111bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall do 2121bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "echo 3 > /proc/sys/vm/drop_caches" 2131bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall echo "Sequential read test $I" 2141bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell dd if="$CACHE" of=/dev/null bs=1048576 count=200 2151bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall done 2161bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall fi 2176be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 2186be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Sequential write test 2196be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall for I in 1 2 3 2206be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall do 2216be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Sequential write test $I" 2221bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # It's unclear if this test is useful on USERBUILDS, given the 2231bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # caching on the filesystem 2241bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell dd if=/dev/zero conv=notrunc of="$CACHE" bs=1048576 count=200 2256be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall done 2266be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 2271bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall if [ "$USERBUILD_MODE" -eq 0 ] 2281bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall then 2291bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # Random read tests require that we read from a much larger range of offsets 2301bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # into the emmc chip than the write test. If we only read though 100 Megabytes 2311bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # (and with a read-ahead of 128K), we quickly fill the buffer cache with 100 2321bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # Megabytes of data, and subsequent reads are nearly instantaneous. Since 2331bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # reading is non-destructive, and we've never shipped a device with less than 2341bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # 8 Gbytes, for this test we read from the raw emmc device, and randomly seek 2351bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # in the first 6 Gbytes. That is way more memory than any device we currently 2361bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # have and it should keep the cache from being poluted with entries from 2371bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # previous random reads. 2381bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # 2391bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # Also, test with the read-ahead set very low at 4K, and at the default 2401bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall 2411bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # Random read test, 4K read-ahead 2421bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall ORIG_READAHEAD=`adb shell cat /sys/block/$MMCDEV/queue/read_ahead_kb | tr -d "\r"` 2431bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "echo 4 > /sys/block/$MMCDEV/queue/read_ahead_kb" 2441bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall for I in 1 2 3 2451bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall do 2461bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "echo 3 > /proc/sys/vm/drop_caches" 2471bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall echo "Random read (4K read-ahead) test $I" 2481bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "$PERF_LOC"/"$PERF" -r 6000 "/dev/block/$MMCDEV" 2491bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall done 2506be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 2511bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # Random read test, default read-ahead 2521bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "echo $ORIG_READAHEAD > /sys/block/$MMCDEV/queue/read_ahead_kb" 2531bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall for I in 1 2 3 2541bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall do 2551bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "echo 3 > /proc/sys/vm/drop_caches" 2561bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall echo "Random read (default read-ahead of ${ORIG_READAHEAD}K) test $I" 2571bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "$PERF_LOC"/"$PERF" -r 6000 "/dev/block/$MMCDEV" 2581bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall done 2591bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall fi 2606be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 2616be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Random write test 2626be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall for I in 1 2 3 2636be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall do 2646be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Random write test $I" 2651bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "$PERF_LOC"/"$PERF" -w 100 "$CACHE" 2666be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall done 2676be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall 2686be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall # Random write test with O_SYNC 2696be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall for I in 1 2 3 2706be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall do 2716be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall echo "Random write with o_sync test $I" 2721bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell "$PERF_LOC"/"$PERF" -w -o 100 "$CACHE" 2736be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrall done 2746be6b120c0e73f484360518e39cb17a05e3d1626Ken Sumrallfi 2752633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 2761bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall# cleanup 2771bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallif [ "$USERBUILD_MODE" -eq 0 ] 2781bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallthen 2791bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall # Make a new empty /cache filesystem 2801bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell make_ext4fs -w "$CACHE" 2811bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallelse 2821bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrall adb shell rm -f "$CACHE" "$PERF_LOC"/"$PERF" 2831bf4d3345149615ec47e41cd940287a71b241b44Ken Sumrallfi 2842633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall 285