Presented by

  • Tony Asleson

    Tony Asleson
    http://blog.asleson.org

    Tony Asleson is a Principal Software Engineer at Red Hat, working to improve Linux’s storage APIs. His API work has included external storage array management, dbus interfaces, LIO remote target, and others. Tony has a long history of working in the storage industry and with Linux. Previous work areas include SCSI firmware development and testing, SAN development, and embedded Linux kernel & device driver development. Tony currently resides in Rochester, MN USA.

Abstract

One of the most important characteristics of any operating system is the ability to safely store and retrieve end user data. However, this area can be one of the most difficult things to test completely. Hardware manufacturers strive to make their hardware as reliable as possible, so testing error paths for uncommon conditions is problematic. For developers having a simple easy to use way to create these types of errors is vital for ensuring correctness. Developers have tools like scsi_debug, dm-flakey, and others to exercise these error paths, but they all have limitations. Virtual machines are ubiquitous, but people may not think of using them for purposely and deliberately creating errors for testing. We have a opportunity to provide a test environment that allows easy testing of these infrequent error paths. To force the kernel down read error paths, write error paths, silent data corruption detection/correction, timeouts, etc., during all times of kernel operation and even before the kernel gets loaded by the boot loader. It's the only way to present an error that is just like actual hardware. Attend this talk to learn about: * Importance of testing the storage stack * Difficulties in testing * Different approaches in generating storage errors * Benefits of adding testing capabilities to virtual machine vs. other approaches * Other possibilities (block histograms, access patterns, playback) * A preview proof of concept written for scsi-disk device in QEMU https://github.com/tasleson/qemu/tree/block_error_inject