blob: c678fb60cbb2b6ef5eba73173daddaffd1779966 [file] [log] [blame]
# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging, os
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
class hardware_StorageTrim(test.test):
"""
Measure write performance before and after trim.
Use fio to measure write performance.
Use mkfs.ext4 to trim device.
"""
version = 1
def run_once(self, dev='/dev/sda'):
"""
Measure write performance before and after trim.
This test use an entire disk so we need to boot from usb.
@param dev: block device to test
"""
logging.info('Target device: %s', dev)
# Check that device exist.
if not os.path.exists(dev):
msg = 'Test failed with error: %s not exist' % dev
raise error.TestFail(msg)
# Check that device is not rootdev.
rootdev = utils.get_root_device()
if dev == rootdev:
raise error.TestFail('Can not test on root device')
# Use fio to fill device first.
self.job.run_test('hardware_StorageFio',
disable_sysinfo=True,
dev=dev,
filesize=0,
requirements=[('disk_fill', [])],
tag='disk_fill')
# Use 4k random write with queue depth = 32 because manufacture usually
# uses this use case in the SSD specification.
# Also, print result every minute to look at the performance drop trend
# over time. Result reported by autotest will be the last minute one.
requirements = [('4k_write_qd32', ['--status-interval=60'])]
# Check write performance
self.job.run_test('hardware_StorageFio',
disable_sysinfo=True,
dev=dev,
filesize=0,
requirements=requirements,
tag='before_trim')
# Unmount drive to make it possible to format.
utils.run('umount %s*' % dev, ignore_status=True)
# Format whole drive to ext4. Mkfs will trim the drive before format.
utils.run('mkfs.ext4 -F %s' % dev, ignore_status=True)
# Check write performance
self.job.run_test('hardware_StorageFio',
disable_sysinfo=True,
dev=dev,
filesize=0,
requirements=requirements,
tag='after_trim')