| #!/bin/bash |
| |
| PERF="rand_emmc_perf" |
| |
| if [ ! -r "$PERF" ] |
| then |
| echo "Cannot read $PERF test binary" |
| fi |
| |
| if ! adb shell true >/dev/null 2>&1 |
| then |
| echo "No device detected over adb" |
| fi |
| |
| HARDWARE=`adb shell getprop ro.hardware | tr -d "\r"` |
| |
| case "$HARDWARE" in |
| tuna | steelhead) |
| CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" |
| CACHE="/dev/block/platform/omap/omap_hsmmc.0/by-name/cache" |
| MMCDEV="mmcblk0" |
| ;; |
| |
| stingray | wingray) |
| CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" |
| CACHE="/dev/block/platform/sdhci-tegra.3/by-name/cache" |
| MMCDEV="mmcblk0" |
| ;; |
| |
| herring) |
| echo "This test will wipe the userdata partition on $HARDWARE devices." |
| read -p "Do you want to proceed? " ANSWER |
| |
| if [ "$ANSWER" != "yes" ] |
| then |
| echo "aborting test" |
| exit 1 |
| fi |
| |
| CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" |
| CACHE="/dev/block/platform/s3c-sdhci.0/by-name/userdata" |
| MMCDEV="mmcblk0" |
| ;; |
| |
| grouper) |
| CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" |
| CACHE="/dev/block/platform/sdhci-tegra.3/by-name/CAC" |
| MMCDEV="mmcblk0" |
| ;; |
| |
| manta) |
| CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" |
| CACHE="/dev/block/platform/dw_mmc.0/by-name/cache" |
| MMCDEV="mmcblk0" |
| ;; |
| |
| *) |
| echo "Unknown hardware $HARDWARE. Exiting." |
| exit 1 |
| esac |
| |
| # prepare the device |
| adb root |
| adb wait-for-device |
| adb push "$PERF" /dev |
| adb shell stop |
| adb shell stop sdcard |
| adb shell stop ril-daemon |
| adb shell stop media |
| adb shell stop drm |
| adb shell stop keystore |
| adb shell stop tf_daemon |
| adb shell stop bluetoothd |
| adb shell stop hciattach |
| adb shell stop p2p_supplicant |
| adb shell stop wpa_supplicant |
| adb shell stop mobicore |
| adb shell umount /sdcard >/dev/null 2>&1 |
| adb shell umount /mnt/shell/sdcard0 >/dev/null 2>&1 |
| adb shell umount /data >/dev/null 2>&1 |
| adb shell umount /cache >/dev/null 2>&1 |
| # Add more services here that other devices need to stop. |
| # So far, this list is sufficient for: |
| # Prime |
| |
| # At this point, the device is quiescent, need to crank up the cpu speed, |
| # then run tests |
| adb shell "cat $CPUFREQ/cpuinfo_max_freq > $CPUFREQ/scaling_max_freq" |
| adb shell "cat $CPUFREQ/cpuinfo_max_freq > $CPUFREQ/scaling_min_freq" |
| |
| # Start the tests |
| |
| # Sequential read test |
| for I in 1 2 3 |
| do |
| adb shell "echo 3 > /proc/sys/vm/drop_caches" |
| echo "Sequential read test $I" |
| adb shell dd if="$CACHE" of=/dev/null bs=1048576 count=200 |
| done |
| |
| # Sequential write test |
| for I in 1 2 3 |
| do |
| echo "Sequential write test $I" |
| adb shell dd if=/dev/zero of="$CACHE" bs=1048576 count=200 |
| done |
| |
| # Random read tests require that we read from a much larger range of offsets |
| # into the emmc chip than the write test. If we only read though 100 Megabytes |
| # (and with a read-ahead of 128K), we quickly fill the buffer cache with 100 |
| # Megabytes of data, and subsequent reads are nearly instantaneous. Since |
| # reading is non-destructive, and we've never shipped a device with less than |
| # 8 Gbytes, for this test we read from the raw emmc device, and randomly seek |
| # in the first 6 Gbytes. That is way more memory than any device we currently |
| # have and it should keep the cache from being poluted with entries from |
| # previous random reads. |
| # |
| # Also, test with the read-ahead set very low at 4K, and at the default |
| |
| # Random read test, 4K read-ahead |
| ORIG_READAHEAD=`adb shell cat /sys/block/$MMCDEV/queue/read_ahead_kb | tr -d "\r"` |
| adb shell "echo 4 > /sys/block/$MMCDEV/queue/read_ahead_kb" |
| for I in 1 2 3 |
| do |
| adb shell "echo 3 > /proc/sys/vm/drop_caches" |
| echo "Random read (4K read-ahead) test $I" |
| adb shell /dev/"$PERF" -r 6000 "/dev/block/$MMCDEV" |
| done |
| |
| # Random read test, default read-ahead |
| adb shell "echo $ORIG_READAHEAD > /sys/block/$MMCDEV/queue/read_ahead_kb" |
| for I in 1 2 3 |
| do |
| adb shell "echo 3 > /proc/sys/vm/drop_caches" |
| echo "Random read (default read-ahead of ${ORIG_READAHEAD}K) test $I" |
| adb shell /dev/"$PERF" -r 6000 "/dev/block/$MMCDEV" |
| done |
| |
| # Random write test |
| for I in 1 2 3 |
| do |
| echo "Random write test $I" |
| adb shell /dev/"$PERF" -w 100 "$CACHE" |
| done |
| |
| # Random write test with O_SYNC |
| for I in 1 2 3 |
| do |
| echo "Random write with o_sync test $I" |
| adb shell /dev/"$PERF" -w -o 100 "$CACHE" |
| done |
| |
| # Make a new empty /cache filesystem |
| adb shell make_ext4fs "$CACHE" |
| |