# [SSD HDD] TRIM not working

## canis_lupus

I have a Vertex 3 OCZ SSD hard drive and ext4 filesystem mounted with discard option:

```
pingwiniarnia lupus # mount

rootfs on / type rootfs (rw)

/dev/root on / type ext4 (rw,noatime,discard,barrier=0,commit=0)

```

My SATA controller working in AHCI mode:

```
pingwiniarnia lupus # dmesg |grep ahci

ahci 0000:00:11.0: version 3.0

ahci 0000:00:11.0: AHCI 0001.0200 32 slots 6 ports 6 Gbps 0x3f impl SATA mode

ahci 0000:00:11.0: flags: 64bit ncq sntf ilck pm led clo pmp pio slum part 
```

My HDD support TRIM:

```
pingwiniarnia lupus # hdparm -I /dev/sda | grep TRIM

           *    Data Set Management TRIM supported (limit 1 block)

           *    Deterministic read data after TRIM

```

I updated firmware yesterday but when i tested TRIM witch any script, i get the TRIM is still not working. Where is the bug?

----------

## eccerr0r

What script are you using?

Also I hear that some SSD's unused blocks have indeterministic behavior, which will confuse the results of some TRIM checker scripts.  I did recall seeing OCZ being one of them.  The typical TRIM script that I found works as expected on my Crucial M4.  I have yet to try my Intel 520-series.

----------

## canis_lupus

 *eccerr0r wrote:*   

> What script are you using?
> 
> 

 

```
#!/bin/bash

#

# Test if TRIM is working on your SSD. Tested only with EXT4 filesystems

# in Ubuntu 11.10 and Fedora 16. This script is simply an automation of

# the procedures described by Nicolay Doytchev here:

#

# https://sites.google.com/site/lightrush/random-1/checkiftrimonext4isenabledandworking

#

# Author: Dorian Bolivar <dbolivar@gmail.com>

# Date: 20120129

#

if [ $# -ne 3 ]; then

        echo

        echo "Usage: $0 <filename> <size> <device>"

        echo

        echo "<filename> is a temporary file for the test"

        echo "<size> is the file size in MB"

        echo "<device> is the device being tested, e.g. /dev/sda"

        echo

        echo "Example: $0 tempfile 5 /dev/sda"

        echo

        echo "This would run the test for /dev/sda creating a"

        echo "temporary file named \"tempfile\" with 5 MB"

        echo

        exit 1

fi

FILE="$1"

SIZE=$2

DEVICE="$3"

# Create the temporary file

dd if=/dev/urandom of="$FILE" count=1 bs=${SIZE}M oflag=direct                                                                                                                                                                      

sync                                                                                                                                                                                                                                

                                                                                                                                                                                                                                    

# Get the address of the first sector                                                                                                                                                                                               

hdparm --fibmap "$FILE"                                                                                                                                                                                                             

SECTOR=`hdparm --fibmap "$FILE" | tail -n1 | awk '{ print $2; }'`                                                                                                                                                                   

                                                                                                                                                                                                                                    

# Read the first sector prior to deletion                                                                                                                                                                                           

hdparm --read-sector $SECTOR "$DEVICE"                                                                                                                                                                                              

echo                                                                                                                                                                                                                                

echo "This is a sector of the file. It should have been successfully read"                                                                                                                                                          

echo "and show a bunch of random data."                                                                                                                                                                                             

echo                                                                                                                                                                                                                                

read -n 1 -p "Press any key to continue..."                                                                                                                                                                                         

                                                                                                                                                                                                                                    

# Delete the file and re-read the sector                                                                                                                                                                                            

rm -f $FILE                                                                                                                                                                                                                         

sync                                                                                                                                                                                                                                

echo                                                                                                                                                                                                                                

echo "File deleted. Sleeping for 30 seconds before re-reading the sector."                                                                                                                                                          

echo "If TRIM is working, you should see all 0s now."                                                                                                                                                                               

sleep 30                                                                                                                                                                                                                            

hdparm --read-sector $SECTOR "$DEVICE"                                                                                                                                                                                              

echo                                                                                                                                                                                                                                

echo "If the sector isn't filled with 0s, something is wrong with your"                                                                                                                                                             

echo "configuration. Try googling for \"TRIM SSD Linux\"."                                                                                                                                                                          

echo                                                                                                                                                                                                                                

                                                                                                                                                                                                                                    

exit 0 
```

----------

## eccerr0r

I saw this post...

http://www.ocztechnologyforum.com/forum/showthread.php?100001-Vertex3-linux-ext4-trim-test-fault

If this is the case I don't know if you'll find an answer.

And edited:  I just tested on my Sandforce based Intel SSD520 series - and the trim test works...

I do find it really odd that only OCZ disks don't work?

----------

## Jean-Paul

I use the same SSD with the same filesystem.

 *Quote:*   

> dmesg | grep OCZ
> 
> [    1.262975] ata7.00: ATA-8: OCZ-VERTEX3, 2.11, max UDMA/133

 

mount  *Quote:*   

> mount
> 
> /dev/root on / type ext4 (rw,noatime,discard,data=ordered)

 

I run the script and it seems to work.

 *Quote:*   

> tempfile:
> 
>  filesystem blocksize 4096, begins at LBA 25577472; assuming 512 byte sectors.
> 
>  byte_offset  begin_LBA    end_LBA    sectors
> ...

 

Jean-Paul

----------

## eccerr0r

That is true, if TRIM is working then eventually it should zero out regardless, but it's not clear when it should...

Hmm... should buy another TRIM capable SSD to play with...

----------

## ryao

 *canis_lupus wrote:*   

> I have a Vertex 3 OCZ SSD hard drive and ext4 filesystem mounted with discard option:
> 
> ```
> pingwiniarnia lupus # mount
> 
> ...

 

Until SATA 3.1, TRIM is a non-queued command such that it needs to be done in batches to avoid significant penalties in IO throughput.

With that said, a far better way to test the kernel discard implementation is to use a ZFS zvol, which lets you measure space utilization.

----------

