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