[Samsung Galaxy Nexus] ph4zrd:
According to this article, the storage performance of my phone is much more similar to that of the Nexus 7 than the Galaxy Nexus.

Seems like they began to use Nexus 7 eMMC chips in the Galaxy Nexus GSM. Same performance, same problems...

By the way, I did some further performance testing via adb today, especially under low-mem conditions. (I'm writing about the "new" V3U00M chip, production date 08/2012)

What's interesting: The phone was smooth all the time (kept -o discard active), even with 0 Bbytes of free memory.

Write speeds dropped drastically by around 98% but read speeds by only 1/4 (25%).

As a result, apps kept loading a little bit longer and everything that tried to write to the disk was stuck for several seconds.

Commented results for whoever may be interested:

# Storage test #2
# phone model: Galaxy nexus GSM i9250 (maguro)
# rom, kernel: CM10
# emmc chip: V3U00M, 08/2012
# mount optns: noatime,discard
# Androbench: 16M read #1, 32M for others, 2M write all time

# initial situation
localhost / # busybox df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 347.1M 48.0K 347.0M 0% /dev
tmpfs 347.1M 0 347.1M 0% /mnt/asec
tmpfs 347.1M 0 347.1M 0% /mnt/obb
/dev/block/platform/omap/omap_hsmmc.0/by-name/system
643.7M 370.2M 273.5M 58% /system
/dev/block/platform/omap/omap_hsmmc.0/by-name/efs
19.7M 8.1M 11.6M 41% /factory
/dev/block/platform/omap/omap_hsmmc.0/by-name/cache
425.2M 78.3M 346.8M 18% /cache
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
13.3G 11.5G 1.8G 87% /data
/dev/fuse 13.3G 11.5G 1.8G 87% /storage/sdcard0
localhost / # mount
rootfs on / type rootfs (ro,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,relatime,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /acct type cgroup (rw,relatime,cpuacct)
tmpfs on /mnt/asec type tmpfs (rw,relatime,mode=755,gid=1000)
tmpfs on /mnt/obb type tmpfs (rw,relatime,mode=755,gid=1000)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
/dev/block/platform/omap/omap_hsmmc.0/by-name/system on /system type ext4 (ro,relatime,barrier=1,data=ordered,discard)
/dev/block/platform/omap/omap_hsmmc.0/by-name/efs on /factory type ext4 (ro,relatime,barrier=1,data=ordered)
/dev/block/platform/omap/omap_hsmmc.0/by-name/cache on /cache type ext4 (rw,noatime,errors=panic,barrier=1,nomblk_io_submit,data=ordered,discard)
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata on /data type ext4 (rw,noatime,errors=panic,barrier=1,nomblk_io_submit,data=ordered,discard)
/sys/kernel/debug on /sys/kernel/debug type debugfs (rw,relatime)
/dev/fuse on /storage/sdcard0 type fuse (rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other)

# let's fill /data with some files & test speed
localhost / # busybox dd if=/dev/zero of=/data/zero1.tmp bs=32768k count=16
16+0 records in
16+0 records out
536870912 bytes (512.0MB) copied, 33.009032 seconds, 15.5MB/s
localhost / # busybox dd if=/dev/zero of=/data/zero2.tmp bs=32768k count=16
16+0 records in
16+0 records out
536870912 bytes (512.0MB) copied, 82.276001 seconds, 6.2MB/s
localhost / # busybox dd if=/dev/zero of=/data/zero3.tmp bs=32768k count=16
16+0 records in
16+0 records out
536870912 bytes (512.0MB) copied, 264.824097 seconds, 1.9MB/s

# what about removing a file and recreating it?
# seems to be a little bit slower...
localhost / # rm /data/zero3.tmp
localhost / # busybox dd if=/dev/zero of=/data/zero3.tmp bs=32768k count=16
16+0 records in
16+0 records out
536870912 bytes (512.0MB) copied, 311.965118 seconds, 1.6MB/s

# now fill the rest of /data
localhost / # busybox dd if=/dev/zero of=/data/zero4.tmp bs=32768k count=10
10+0 records in
10+0 records out
335544320 bytes (320.0MB) copied, 330.016968 seconds, 992.9KB/s
localhost / # busybox dd if=/dev/zero of=/data/zero5.tmp bs=1024k
dd: writing '/data/zero5.tmp': No space left on device
25+0 records in
23+1 records out
24141824 bytes (23.0MB) copied, 90.873169 seconds, 259.4KB/s
localhost / # busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
13.3G 13.3G 0 100% /data

# let's test what happens without -o discard
localhost / # mount -o remount,nodiscard /data
localhost / # rm /data/zero5.tmp
localhost / # busybox dd if=/dev/zero of=/data/zero5.tmp bs=1024k
dd: writing '/data/zero5.tmp': No space left on device
24+0 records in
22+1 records out
24080384 bytes (23.0MB) copied, 72.880005 seconds, 322.7KB/s
localhost / # busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
13.3G 13.3G 60.0K 100% /data

# re-activate discard, delete file: syncing took a very long time...
localhost / # mount -o remount,discard /data
localhost / # rm /data/zero5.tmp
localhost / # sync

# speed is similar
localhost / # busybox dd if=/dev/zero of=/data/zero5.tmp bs=1024k
dd: writing '/data/zero5.tmp': No space left on device
24+0 records in
22+1 records out
24051712 bytes (22.9MB) copied, 71.819061 seconds, 327.0KB/s
localhost / # rm /data/zero5.tmp
localhost / # sync
localhost / # busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
13.3G 13.3G 23.0M 100% /data

# => Androbench IMAGE #1
# interesting: phone not much slower than with >5GiB free...
# but Androbench was _really_ slow...

# delete another 320MiB
localhost data # rm /data/zero4.tmp
localhost data # sync
localhost data # busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
13.3G 13.0G 342.8M 97% /data

# => Androbench IMAGE #2

# delete another 512MiB
localhost data # rm /data/zero3.tmp
localhost data # sync
localhost data # busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
13.3G 12.5G 854.6M 94% /data

# => Androbench IMAGES #3 and #4

# delete another 512MiB, sync was MUCH, MUCH faster now
localhost / # rm /data/zero2.tmp
localhost / # sync
localhost / # busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
13.3G 12.0G 1.3G 90% /data

# => Androbench IMAGE #5
# this one was a HUGE difference o.O

# delete another 512MiB
localhost / # rm /data/zero1.tmp
localhost / # sync
localhost / # busybox df -h /data
Filesystem Size Used Available Use% Mounted on
/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata
13.3G 11.5G 1.8G 86% /data

# => Androbench IMAGE #6

Androbench images:

(1) 23 MiB free

(2) 342.8 MiB free (deleted 320 MiB file)

(3, 4) 854.6 MiB free (deleted 512 MiB file)

(5) 1.3 GiB free (deleted another 512 MiB file)

(6) 1.8 GiB free (deleted another 512 MiB file)

As a conclusion I can say that with the V3U00M chip you should leave some 1.0-1.3 GiBytes free mem on /data to keep the write speeds on an acceptable level.

But with activated discard option (provided that you once filled the partition thus manually erasing the free blocks) the phone can operate smoothly on even lower free mem conditions.