Thread (54 messages) flat view 54 messages, 19 authors, 2009-08-17

Re: Discard support (was Re: [PATCH] swap: send callback when swap slot is freed)

From: Bryan Donlan <hidden>
Date: 2009-08-13 20:55:00
Also in: linux-ide, linux-mm, linux-scsi, lkml

On Thu, Aug 13, 2009 at 4:44 PM, [off-list ref] wrote:
On Thu, 13 Aug 2009, Greg Freemyer wrote:
quoted
On Thu, Aug 13, 2009 at 12:33 PM, [off-list ref] wrote:
quoted
On Thu, 13 Aug 2009, Markus Trippelsdorf wrote:
quoted
On Thu, Aug 13, 2009 at 08:13:12AM -0700, Matthew Wilcox wrote:
quoted
I am planning a complete overhaul of the discard work.  Users can send
down discard requests as frequently as they like.  The block layer will
cache them, and invalidate them if writes come through.  Periodically,
the block layer will send down a TRIM or an UNMAP (depending on the
underlying device) and get rid of the blocks that have remained
unwanted
in the interim.
That is a very good idea. I've tested your original TRIM implementation
on
my Vertex yesterday and it was awful ;-). The SSD needs hundreds of
milliseconds to digest a single TRIM command. And since your
implementation
sends a TRIM for each extent of each deleted file, the whole system is
unusable after a short while.
An optimal solution would be to consolidate the discard requests, bundle
them and send them to the drive as infrequent as possible.
or queue them up and send them when the drive is idle (you would need to
keep track to make sure the space isn't re-used)

as an example, if you would consider spinning down a drive you don't hurt
performance by sending accumulated trim commands.

David Lang
An alternate approach is the block layer maintain its own bitmap of
used unused sectors / blocks. Unmap commands from the filesystem just
cause the bitmap to be updated.  No other effect.
how does the block layer know what blocks are unused by the filesystem?

or would it be a case of the filesystem generating discard/trim requests to
the block layer so that it can maintain it's bitmap, and then the block
layer generating the requests to the drive below it?
Perhaps an interface (ioctl, etc) can be added to ask a filesystem to
discard all unused blocks in a certain range? (That is, have the
filesystem validate the request under any necessary locks before
passing it to the block IO layer)

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help