Latest USB3 Memory Sticks and TRIM

John Austin ja at jaa.org.uk
Sat Aug 23 08:22:06 UTC 2014


On Fri, 2014-08-22 at 14:07 -0600, Chris Murphy wrote:
> On Aug 22, 2014, at 1:55 AM, John Austin <ja at jaa.org.uk> wrote:
> 
> > Hi
> > I have a Corsair Flash Voyager GTX USB3 memory stick which is
> > advertised as supporting TRIM.
> > 
> > I assume there are several other manufacturers with similar devices
> > 
> > My device is working well (ext4) and is very fast but does not appear to
> > respond to the TRIM command even though hdparm suggests it should
> > 
> > I have found the same problem referenced here
> > https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1336541
> > but following the kernel link I am not totally convinced things
> > are happening upstream
> > 
> > Should I bugzilla this against Fedora this or just wait?
> 
> You could strace the mount and see if it's checking
> 
> /sys/block/sdb/queue/rotational
> 
> This is commonly done to see if the device supports trim/discard first. If it's a 1 then it may be a udev thing.
> 
> Likewise you can strace mkfs.ext4 which I think defaults to -E discard if the value for ../rotational is 0. I know this is the case for mkfs.btrfs. See thread "zeroing out part of an SDcard" for some things I found relating to SD Cards.
> 
> 
> Chris Murphy
> 

As suggested I have made a few more checks and it would seem that the
system knows all about the device but that it is still unhappy
about applying the TRIM command

[root at paxos:~]$ strace fstrim /media/gtx
...
stat("/media/gtx", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
open("/media/gtx", O_RDONLY)            = 3
ioctl(3, FITRIM, 0x7fffee2fb700)        = -1 EOPNOTSUPP (Operation not supported)
...

Not sure what this is really telling me

John


Details

root at paxos:~]$ mount |grep sdb
/dev/sdb1 on /media/gtx type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,discard,data=ordered)
//-----------------------------------------------------------------
dmesg -ew
[Aug23 08:45] EXT4-fs (sdb1): mounting with "discard" option, but the device does not support discard
[  +0.000002] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: discard
[  +0.000004] SELinux: initialized (dev sdb1, type ext4), uses xattr
//-----------------------------------------------------------------
[root at paxos:~]$ cat /sys/block/sdb/queue/rotational
0
//-----------------------------------------------------------------
root at paxos:~]$ hdparm -I /dev/sdb

/dev/sdb:

ATA device, with non-removable media
        Model Number:       Voyager GTX                             
...                                                                                                                                                           
        Nominal Media Rotation Rate: Solid State Device                                                                                                                                                                                  
...
           *    Data Set Management TRIM supported (limit 8 blocks)
...
//-----------------------------------------------------------------
[root at paxos:~]$ mount|grep sdb1
/dev/sdb1 on /media/gtx type ext4 (rw,nosuid,nodev,noexec,noatime,seclabel,discard,data=ordered)
[root at paxos:~]$ strace fstrim /media/gtx
execve("/sbin/fstrim", ["fstrim", "/media/gtx"], [/* 31 vars */]) = 0
brk(0)                                  = 0x143a000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f856786e000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=170173, ...}) = 0
mmap(NULL, 170173, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f8567844000
close(3)                                = 0
open("/lib64/libmount.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\250 ?9\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=279368, ...}) = 0
mmap(0x393f200000, 2371040, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x393f200000
mprotect(0x393f240000, 2097152, PROT_NONE) = 0
mmap(0x393f440000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x40000) = 0x393f440000
mmap(0x393f442000, 3552, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x393f442000
close(3)                                = 0
open("/lib64/libblkid.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\360\205\240\3572\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=259408, ...}) = 0
mmap(0x32efa00000, 2349960, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x32efa00000
mprotect(0x32efa3a000, 2093056, PROT_NONE) = 0
mmap(0x32efc39000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x39000) = 0x32efc39000
mmap(0x32efc3d000, 2952, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x32efc3d000
close(3)                                = 0
open("/lib64/libuuid.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\25`\3572\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=22624, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8567843000
mmap(0x32ef600000, 2113920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x32ef600000
mprotect(0x32ef604000, 2093056, PROT_NONE) = 0
mmap(0x32ef803000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x32ef803000
close(3)                                = 0
open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240d\240>9\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=144952, ...}) = 0
mmap(0x393ea00000, 2242712, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x393ea00000
mprotect(0x393ea21000, 2093056, PROT_NONE) = 0
mmap(0x393ec20000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x20000) = 0x393ec20000
mmap(0x393ec22000, 6296, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x393ec22000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\36\202\0026\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2100672, ...}) = 0
mmap(0x3602800000, 3924576, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3602800000
mprotect(0x36029b4000, 2097152, PROT_NONE) = 0
mmap(0x3602bb4000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b4000) = 0x3602bb4000
mmap(0x3602bba000, 16992, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3602bba000
close(3)                                = 0
open("/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0p\27`>9\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=421144, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8567842000
mmap(0x393e600000, 2511368, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x393e600000
mprotect(0x393e665000, 2093056, PROT_NONE) = 0
mmap(0x393e864000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x64000) = 0x393e864000
close(3)                                = 0
open("/lib64/liblzma.so.5", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3400\240\330<\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=155400, ...}) = 0
mmap(0x3cd8a00000, 2245240, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3cd8a00000
mprotect(0x3cd8a24000, 2093056, PROT_NONE) = 0
mmap(0x3cd8c23000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x23000) = 0x3cd8c23000
close(3)                                = 0
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\16\300\0026\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=22440, ...}) = 0
mmap(0x3602c00000, 2109744, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3602c00000
mprotect(0x3602c03000, 2093056, PROT_NONE) = 0
mmap(0x3602e02000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x3602e02000
close(3)                                = 0
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340m\0\0036\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=150800, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8567841000
mmap(0x3603000000, 2213104, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3603000000
mprotect(0x3603018000, 2093056, PROT_NONE) = 0
mmap(0x3603217000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x3603217000
mmap(0x3603219000, 13552, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3603219000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f8567840000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f856783e000
arch_prctl(ARCH_SET_FS, 0x7f856783e880) = 0
mprotect(0x606000, 4096, PROT_READ)     = 0
mprotect(0x393f440000, 4096, PROT_READ) = 0
mprotect(0x32efc39000, 12288, PROT_READ) = 0
mprotect(0x32ef803000, 4096, PROT_READ) = 0
mprotect(0x393ec20000, 4096, PROT_READ) = 0
mprotect(0x3602bb4000, 16384, PROT_READ) = 0
mprotect(0x360261f000, 4096, PROT_READ) = 0
mprotect(0x393e864000, 4096, PROT_READ) = 0
mprotect(0x3cd8c23000, 4096, PROT_READ) = 0
mprotect(0x3602e02000, 4096, PROT_READ) = 0
mprotect(0x3603217000, 4096, PROT_READ) = 0
munmap(0x7f8567844000, 170173)          = 0
set_tid_address(0x7f856783eb50)         = 8288
set_robust_list(0x7f856783eb60, 24)     = 0
rt_sigaction(SIGRTMIN, {0x36030068c0, [], SA_RESTORER|SA_SIGINFO, 0x360300f750}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x3603006950, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x360300f750}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/sys/fs/selinux", {f_type=0xf97cff8c, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
statfs("/sys/fs/selinux", {f_type=0xf97cff8c, f_bsize=4096, f_blocks=0, f_bfree=0, f_bavail=0, f_files=0, f_ffree=0, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
stat("/sys/fs/selinux", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
brk(0)                                  = 0x143a000
brk(0x145b000)                          = 0x145b000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=106070960, ...}) = 0
mmap(NULL, 106070960, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f8561315000
close(3)                                = 0
stat("/media/gtx", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
open("/media/gtx", O_RDONLY)            = 3
ioctl(3, FITRIM, 0x7fffee2fb700)        = -1 EOPNOTSUPP (Operation not supported)
close(3)                                = 0
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2492, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f856786d000
read(3, "# Locale name alias data base.\n#"..., 4096) = 2492
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f856786d000, 4096)            = 0
open("/usr/share/locale/en_GB.UTF-8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_GB.utf8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_GB/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "fstrim: ", 8fstrim: )                 = 8
write(2, "/media/gtx: discard operation no"..., 44/media/gtx: discard operation not supported.) = 44
write(2, "\n", 1
)                       = 1
close(1)                                = 0
close(2)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++
[root at paxos:~]$ 




More information about the users mailing list