Home | History | Annotate | Download | only in hardware_StorageTrim
      1 # Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging, os
      6 from autotest_lib.client.bin import test, utils
      7 from autotest_lib.client.common_lib import error
      8 
      9 
     10 class hardware_StorageTrim(test.test):
     11     """
     12     Measure write performance before and after trim.
     13 
     14     Use fio to measure write performance.
     15     Use mkfs.ext4 to trim device.
     16     """
     17 
     18     version = 1
     19 
     20 
     21     def run_once(self, dev='/dev/sda'):
     22         """
     23         Measure write performance before and after trim.
     24 
     25         This test use an entire disk so we need to boot from usb.
     26 
     27         @param dev: block device to test
     28         """
     29         logging.info('Target device: %s', dev)
     30 
     31         # Check that device exist.
     32         if not os.path.exists(dev):
     33             msg = 'Test failed with error: %s not exist' % dev
     34             raise error.TestFail(msg)
     35 
     36         # Check that device is not rootdev.
     37         rootdev = utils.get_root_device()
     38         if dev == rootdev:
     39             raise error.TestFail('Can not test on root device')
     40 
     41         # Use fio to fill device first.
     42         self.job.run_test('hardware_StorageFio',
     43                           disable_sysinfo=True,
     44                           dev=dev,
     45                           filesize=0,
     46                           requirements=[('disk_fill', [])],
     47                           tag='disk_fill')
     48 
     49         # Use 4k random write with queue depth = 32 because manufacture usually
     50         # uses this use case in the SSD specification.
     51         # Also, print result every minute to look at the performance drop trend
     52         # over time. Result reported by autotest will be the last minute one.
     53         requirements = [('4k_write_qd32', ['--status-interval=60'])]
     54 
     55         # Check write performance
     56         self.job.run_test('hardware_StorageFio',
     57                           disable_sysinfo=True,
     58                           dev=dev,
     59                           filesize=0,
     60                           requirements=requirements,
     61                           tag='before_trim')
     62 
     63         # Unmount drive to make it possible to format.
     64         utils.run('umount %s*' % dev, ignore_status=True)
     65         # Format whole drive to ext4. Mkfs will trim the drive before format.
     66         utils.run('mkfs.ext4 -F %s' % dev, ignore_status=True)
     67 
     68         # Check write performance
     69         self.job.run_test('hardware_StorageFio',
     70                           disable_sysinfo=True,
     71                           dev=dev,
     72                           filesize=0,
     73                           requirements=requirements,
     74                           tag='after_trim')
     75 
     76