Preview only show first 10 pages with watermark. For full document please download

Similar Pages

   EMBED


Share

Transcript

Performance evaluation of Linux Discard Support (Overview, benchmark results, current status) Red Hat Luk´aˇs Czerner February 12, 2011 © Copyright 2011 Luk´aˇs Czerner, Red Hat. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the COPYING file. Part I Discard Background Agenda 1 SSD Description 2 Thinly Provisioned Storage 3 Introducing Linux Discard Support SSD Description Solid-State Drive Flash memory block device Wear-leveling needed Firmware = black box SSD Description ATA TRIM Command Helps handle garbage collection overhead Subsequent READ of TRIM’ed blocks 1 2 Read data should NOT change between READ’s Read data should NOT be retrieved from data previously written to any other LBA. As long as the device has enough free pages to write to we do not necessarily need it. In a nutshell: TRIM command tells the device what LBA’a is not used by the OS anymore. Thinly Provisioned Storage Thin Provisioning Unlike in traditional storage, there is no fixed one-to-one logical bock to physical storage mapping More efficient use of storage space Block reclamation interface needed Thinly Provisioned Storage SCSI UNMAP / WRITE SAME Storage space reclamation interface Subsequent READ of unmapped blocks 1 2 Read data should NOT change between READ’s Read data should NOT be retrieved from data previously written to any other LBA. Unlike with SSD’s we can not afford to wait until we run out of space for reclamation. Introducing Linux Discard Support Linux Discard Implementation Abstraction for the two underlying specifications: 1 2 ATA TRIM Command SCSI UNMAP / WRITE SAME API for user-space BLKDISCARD ioctl Added with v2.6.27-rc9-30-gd30a260 API for File Sytems 1 2 sb issue discard() blkdev issue discard() Part II Discard Performance Agenda 4 Testing Methodology 5 Results Testing Methodology What do we need to find out ? Does discard really work ? Is it reliable ? How fast/slow is it ? Is there any difference between devices from different vendors ? What is the ideal discard size ? SSD performance degradation Testing Methodology How do we test it ? BLKDISCARD ioctl() Automatic discard of different ranges Different discard patterns 1 2 3 sequential performance random IO peformance discard already discarded blocks test-discard - discard benchmarking tool http://sourceforge.net/projects/test-discard/ impression - filesystem aging tool Results Sequential discard performance Duration Summary Throughput 1200 250 1000 200 800 150 600 100 400 50 200 0 10 100 Record size [kB] 0 1000 Throughput [MB/s] Duration [s] 300 Results Different modes comparison 1200 Throughput (sequential) Throughput (random IO) Throughput (discard2) Throughput [MB/s] 1000 800 600 400 200 0 10 100 Record size [kB] 1000 Results Difference between various vendors 1200 Throughput Vendor 1 Throughput Vendor 2 Throughput Vendor 3 Throughput [MB/s] 1000 800 600 400 200 0 10 100 Record size [kB] 1000 Results SSD performance degradation 70 Vendor1 Vendor2 Vendor3 Vendor3 discard Write performance [MB/s] 60 50 40 30 20 10 0 50 100 150 200 250 Filesystem saturation [%] 300 350 400 Part III Discard Support for Linux File systems Agenda 6 Periodic Discard 7 Discard Batching 8 Different Approach Periodic Discard Periodic discard Easy to implement File system support 1 2 3 4 ext4 (v2.6.27-5185-g8a0aba7) btrfs (since upstream) gfs2 (v2.6.29-9-gf15ab56) fat, swap, nilfs mount -o discard /dev/sdc /mnt/test TRIM is non-queueable command - implications ? Periodic Discard Benchmarking periodic discard Expectations ? Testing methodology 1 2 3 Metadata intensive load Load with removing files Reasonable file size distribution Discard-kit 1 2 Using PostMark http://sourceforge.net/projects/test-discard/files/ Periodic Discard Ext4 performance (18% hit) 800 Deleted/s Append/s Read/s Files-created/s Transactions/s Read[B/s] Write[B/s] 700 Opetation/s 600 500 400 300 200 100 nodiscard discard Periodic Discard Performance with various file systems Transactions/s 750 ext4 700 btrfs 650 gfs2 600 550 500 450 400 350 d -63% d ar sc ar di sc di no d d -7% d ar sc ar di sc di no d ar sc ar di sc di no -18% Discard Batching Discard Batching - The idea Fine-grained discard is not necessarily needed Small extents are slow With time, freed extents tends to coalesce Disadvantages There is a price for tracking freed extents Discarding already discarded blocks should be easy, but... Daemon (in-kernel, user-space) needed. 4 File system independent solution would most likely be pain to do right (if possible). 1 2 3 Discard Batching Batched discard support File system specific solution Provide ioctl() interface - FITRIM Do not disturb other ongoing IO too much 1 2 Prevent allocations while trimming How to handle huge filesystem ? File system support 1 2 3 ext4 (v2.6.36-rc6-35-g7360d17) ext3 (v2.6.37-11-g9c52749) xfs (v2.6.37-rc4-63-ga46db60) Discard Batching FITRIM ioctl Ioctl with one RW parameter defined in linux/fs.h struct fstrim range { u64 start; u64 len; u64 minlen; } fstrim tool http://sourceforge.net/projects/fstrim/ util-linux-ng Since v2.18-165-gd9e2d0d Discard Batching Batched discard benchmark results 6 FITRIM on ext4 BLKDISCARD 5 Duration [s] 4 3 2 1 0 0 20 40 60 Filesystem saturation [%] 80 100 Different Approach Alternative approach It is always a compromise The future of SSD’s and thinly provisioned LUN’s (???) Part IV Discard Support in user-space Agenda 9 e2fsprogs 10 Other utilities e2fsprogs Discard in e2fsprogs tools Using BLKDISCARD ioctl() mke2fs 1 2 3 Refresh SSD’s garbage collector discard zeroes data - significant speed boost mkfs.ext4 -E discard /dev/sdc e2fsck 1 2 3 After the last check discard free space Non detected file system errors ? oops fsck.ext4 -E discard /dev/sdc resize2fs 1 2 3 Refresh SSD’s garbage collector discard zeroes data - significant speed boost resize2fs -E discard /dev/sdc e2fsprogs File system creation 30 nodiscard discard 25 Duration [s] 20 15 10 5 0 EXT4 XFS File system Other utilities Fstrim tool Very simple tool to invoke FITRIM ioctl on mounted file system Stand-alone tool http://sourceforge.net/projects/fstrim/ Since v2.18-165-gd9e2d0d part of util-linux-ng Part V Summary Summary Linux Discard support is a abstraction for underlying specification Exported via BLKDISCARD ioctl to user-space and blkdev issue discard() for filesystems Discard testing kit (Discard-kit) 1 2 test-discard PostMark Filesystem support 1 2 Fine grained (online) discard - mount -o discard Batched discard support - fstrim from util-linux-ng Support in user-space utilities 1 2 3 4 Filesystem creation (mkfs) e2fsprogs - mkfs,e2fsck,resize2fs xfsprogs - mkfs fstrim The end. Thanks for listening. Useful links http://sourceforge.net/projects/fstrim/ http://sourceforge.net/projects/test-discard/ http://people.redhat.com/lczerner/discard/