12633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall#!/bin/bash
22633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
32633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken SumrallPERF="rand_emmc_perf"
42633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
52633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallif [ ! -r "$PERF" ]
62633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallthen
72633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  echo "Cannot read $PERF test binary"
82633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfi
92633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
102633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallif ! adb shell true >/dev/null 2>&1
112633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallthen
122633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  echo "No device detected over adb"
132633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfi
142633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
152633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken SumrallHARDWARE=`adb shell getprop ro.hardware | tr -d "\r"`
162633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
172633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallcase "$HARDWARE" in
182633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  tuna | steelhead)
192633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq"
202633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    CACHE="/dev/block/platform/omap/omap_hsmmc.0/by-name/cache"
21ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall    MMCDEV="mmcblk0"
222633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    ;;
232633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
242633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  stingray | wingray)
252633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq"
262633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    CACHE="/dev/block/platform/sdhci-tegra.3/by-name/cache"
27ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall    MMCDEV="mmcblk0"
282633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    ;;
292633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
302633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  herring)
312633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    echo "This test will wipe the userdata partition on $HARDWARE devices."
322633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    read -p "Do you want to proceed? " ANSWER
332633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
342633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    if [ "$ANSWER" != "yes" ]
352633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    then
362633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall      echo "aborting test"
372633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall      exit 1
382633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    fi
392633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
402633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq"
412633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    CACHE="/dev/block/platform/s3c-sdhci.0/by-name/userdata"
42ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall    MMCDEV="mmcblk0"
432633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    ;;
442633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
452633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  grouper)
462633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq"
472633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    CACHE="/dev/block/platform/sdhci-tegra.3/by-name/CAC"
48ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall    MMCDEV="mmcblk0"
492633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    ;;
502633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
51b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall  manta)
52b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall    CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq"
53b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall    CACHE="/dev/block/platform/dw_mmc.0/by-name/cache"
54ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall    MMCDEV="mmcblk0"
55b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall    ;;
56b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall
572633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  *)
582633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    echo "Unknown hardware $HARDWARE.  Exiting."
592633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall    exit 1
602633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallesac
612633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
622633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# prepare the device
632633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb root
642633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb wait-for-device
652633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb push "$PERF" /dev
662633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop
672633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop sdcard
682633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop ril-daemon
692633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop media
702633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop drm
712633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop keystore
722633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop tf_daemon
732633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop bluetoothd
742633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell stop hciattach
75ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumralladb shell stop p2p_supplicant
76ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumralladb shell stop wpa_supplicant
77ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumralladb shell stop mobicore
782633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell umount /sdcard >/dev/null 2>&1
79ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumralladb shell umount /mnt/shell/sdcard0 >/dev/null 2>&1
802633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell umount /data >/dev/null 2>&1
812633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell umount /cache >/dev/null 2>&1
822633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Add more services here that other devices need to stop.
832633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# So far, this list is sufficient for:
842633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall#   Prime
852633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
862633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# At this point, the device is quiescent, need to crank up the cpu speed,
872633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# then run tests
882633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell "cat $CPUFREQ/cpuinfo_max_freq > $CPUFREQ/scaling_max_freq"
892633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell "cat $CPUFREQ/cpuinfo_max_freq > $CPUFREQ/scaling_min_freq"
902633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
912633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Start the tests
922633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
932633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Sequential read test
942633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfor I in 1 2 3
952633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldo
96ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall  adb shell "echo 3 > /proc/sys/vm/drop_caches"
972633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  echo "Sequential read test $I"
982633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  adb shell dd if="$CACHE" of=/dev/null bs=1048576 count=200
992633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldone
1002633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
1012633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Sequential write test
1022633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfor I in 1 2 3
1032633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldo
1042633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  echo "Sequential write test $I"
1052633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  adb shell dd if=/dev/zero of="$CACHE" bs=1048576 count=200
1062633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldone
1072633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
108ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# Random read tests require that we read from a much larger range of offsets
109ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# into the emmc chip than the write test.  If we only read though 100 Megabytes
110ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# (and with a read-ahead of 128K), we quickly fill the buffer cache with 100
111ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# Megabytes of data, and subsequent reads are nearly instantaneous.  Since
112ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# reading is non-destructive, and we've never shipped a device with less than
113ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# 8 Gbytes, for this test we read from the raw emmc device, and randomly seek
114ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# in the first 6 Gbytes.  That is way more memory than any device we currently
115ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# have and it should keep the cache from being poluted with entries from
116ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# previous random reads.
117ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall#
118ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# Also, test with the read-ahead set very low at 4K, and at the default
119ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall
120ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# Random read test, 4K read-ahead
121ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen SumrallORIG_READAHEAD=`adb shell cat /sys/block/$MMCDEV/queue/read_ahead_kb | tr -d "\r"`
122ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumralladb shell "echo 4 > /sys/block/$MMCDEV/queue/read_ahead_kb"
123ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrallfor I in 1 2 3
124ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumralldo
125ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall  adb shell "echo 3 > /proc/sys/vm/drop_caches"
126ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall  echo "Random read (4K read-ahead) test $I"
127ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall  adb shell /dev/"$PERF" -r 6000 "/dev/block/$MMCDEV"
128ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumralldone
129ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall
130ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall# Random read test, default read-ahead
131ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumralladb shell "echo $ORIG_READAHEAD > /sys/block/$MMCDEV/queue/read_ahead_kb"
1322633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfor I in 1 2 3
1332633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldo
134b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall  adb shell "echo 3 > /proc/sys/vm/drop_caches"
135ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall  echo "Random read (default read-ahead of ${ORIG_READAHEAD}K) test $I"
136ecb600d0d9de4eacfd619dfe380a94af1abee0ddKen Sumrall  adb shell /dev/"$PERF" -r 6000 "/dev/block/$MMCDEV"
1372633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldone
1382633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
1392633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Random write test
1402633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfor I in 1 2 3
1412633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldo
1422633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  echo "Random write test $I"
1432633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  adb shell /dev/"$PERF" -w 100 "$CACHE"
1442633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldone
1452633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
1462633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Random write test with O_SYNC
1472633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrallfor I in 1 2 3
1482633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldo
1492633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall  echo "Random write with o_sync test $I"
150b20f33f727e77c00b5b8176a541d5ddfbd469fefKen Sumrall  adb shell /dev/"$PERF" -w -o 100 "$CACHE"
1512633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralldone
1522633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
1532633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall# Make a new empty /cache filesystem
1542633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumralladb shell make_ext4fs "$CACHE"
1552633ce5ca5024d5565c9068c29ec39a8c3ed10e9Ken Sumrall
156