<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/lightnvm/pblk-sysfs.c, branch linux-4.16.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.16.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.16.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2018-01-05T15:50:12Z</updated>
<entry>
<title>lightnvm: pblk: use exact free block counter in RL</title>
<updated>2018-01-05T15:50:12Z</updated>
<author>
<name>Javier González</name>
</author>
<published>2018-01-05T13:16:13Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a7689938ef4c8678ff78c44d11e4b0b897244714'/>
<id>urn:sha1:a7689938ef4c8678ff78c44d11e4b0b897244714</id>
<content type='text'>
Until now, pblk's rate-limiter has used a heuristic to reserve space for
GC I/O given that the over-provision area was fixed.

In preparation for allowing to define the over-provision area on target
creation, define a dedicated free_block counter in the rate-limiter to
track the number of blocks being used for user data.

Signed-off-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Hans Holmberg &lt;hans.holmberg@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;m@bjorling.me&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: make geometry structures 2.0 ready</title>
<updated>2018-01-05T15:50:12Z</updated>
<author>
<name>Matias Bjørling</name>
</author>
<published>2018-01-05T13:16:03Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fae7fae4077c24dc2be720b9f21f53adea98d7dd'/>
<id>urn:sha1:fae7fae4077c24dc2be720b9f21f53adea98d7dd</id>
<content type='text'>
Prepare for the 2.0 revision by adapting the geometry
structures to coexist with the 1.2 revision.

Signed-off-by: Matias Bjørling &lt;m@bjorling.me&gt;
Reviewed-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;m@bjorling.me&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: pblk: gc all lines in the pipeline before exit</title>
<updated>2017-10-13T14:34:57Z</updated>
<author>
<name>Hans Holmberg</name>
</author>
<published>2017-10-13T12:46:41Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d6b992f7ab6279884238d4e2babf100c0879b3d6'/>
<id>urn:sha1:d6b992f7ab6279884238d4e2babf100c0879b3d6</id>
<content type='text'>
Finish garbage collect of the lines that are in the gc pipeline
before exiting. Ensure that all lines already in in the pipeline
goes through, from read to write.

Do this by keeping track of how many lines are in the pipeline
and waiting for that number to reach zero before exiting the gc
reader task.

Since we're adding a new gc line counter, change the name of
inflight_gc to read_inflight_gc to make the distinction clear.

Signed-off-by: Hans Holmberg &lt;hans.holmberg@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;m@bjorling.me&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: pblk: remove unused return variable</title>
<updated>2017-06-30T17:08:18Z</updated>
<author>
<name>Javier González</name>
</author>
<published>2017-06-30T15:56:36Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=653cbb8472b88f0781d9191685bd6603f344214d'/>
<id>urn:sha1:653cbb8472b88f0781d9191685bd6603f344214d</id>
<content type='text'>
Remove unused variable.

Signed-off-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;matias@cnexlabs.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: pblk: fail gracefully on irrec. error</title>
<updated>2017-06-26T22:27:39Z</updated>
<author>
<name>Javier González</name>
</author>
<published>2017-06-26T09:57:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=588726d3ec68b66be2e2881d2b85060ff383078a'/>
<id>urn:sha1:588726d3ec68b66be2e2881d2b85060ff383078a</id>
<content type='text'>
Due to user writes being decoupled from media writes because of the need
of an intermediate write buffer, irrecoverable media write errors lead
to pblk stalling; user writes fill up the buffer and end up in an
infinite retry loop.

In order to let user writes fail gracefully, it is necessary for pblk to
keep track of its own internal state and prevent further writes from
being placed into the write buffer.

This patch implements a state machine to keep track of internal errors
and, in case of failure, fail further user writes in an standard way.
Depending on the type of error, pblk will do its best to persist
buffered writes (which are already acknowledged) and close down on a
graceful manner. This way, data might be recovered by re-instantiating
pblk. Such state machine paves out the way for a state-based FTL log.

Signed-off-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;matias@cnexlabs.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: pblk: redesign GC algorithm</title>
<updated>2017-06-26T22:27:39Z</updated>
<author>
<name>Javier González</name>
</author>
<published>2017-06-26T09:57:27Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b20ba1bc749ce0cd7a74d24f23826a6462c3de53'/>
<id>urn:sha1:b20ba1bc749ce0cd7a74d24f23826a6462c3de53</id>
<content type='text'>
At the moment, in order to get enough read parallelism, we have recycled
several lines at the same time. This approach has proven not to work
well when reaching capacity, since we end up mixing valid data from all
lines, thus not maintaining a sustainable free/recycled line ratio.

The new design, relies on a two level workqueue mechanism. In the first
level, we read the metadata for a number of lines based on the GC list
they reside on (this is governed by the number of valid sectors in each
line). In the second level, we recycle a single line at a time. Here, we
issue reads in parallel, while a single GC write thread places data in
the write buffer. This design allows to (i) only move data from one line
at a time, thus maintaining a sane free/recycled ration and (ii)
maintain the GC writer busy with recycled data.

Signed-off-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;matias@cnexlabs.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: pblk: delete redundant buffer pointer</title>
<updated>2017-06-26T22:27:39Z</updated>
<author>
<name>Javier González</name>
</author>
<published>2017-06-26T09:57:19Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=0880a9aa2d91ff5131ecd0902a758afe760b9c1c'/>
<id>urn:sha1:0880a9aa2d91ff5131ecd0902a758afe760b9c1c</id>
<content type='text'>
After refactoring the metadata path, the backpointer controlling
synced I/Os in a line becomes unnecessary; metadata is scheduled
on the write thread, thus we know when the end of the line is reached
and act on it directly.

Signed-off-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;matias@cnexlabs.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: pblk: delete redundant debug line stat</title>
<updated>2017-06-26T22:27:39Z</updated>
<author>
<name>Javier González</name>
</author>
<published>2017-06-26T09:57:18Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fd1b0158f5f5937d73d5c61e229350c6b905d0da'/>
<id>urn:sha1:fd1b0158f5f5937d73d5c61e229350c6b905d0da</id>
<content type='text'>
Remove a legacy variable that helped verifying the consistency of the
run-time metadata for the free line list. With the new metadata layout,
this check is no longer necessary.

Signed-off-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;matias@cnexlabs.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: pblk: sched. metadata on write thread</title>
<updated>2017-06-26T22:27:39Z</updated>
<author>
<name>Javier González</name>
</author>
<published>2017-06-26T09:57:17Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dd2a43437337a71c4e26fbbe93a423b731bf69c7'/>
<id>urn:sha1:dd2a43437337a71c4e26fbbe93a423b731bf69c7</id>
<content type='text'>
At the moment, line metadata is persisted on a separate work queue, that
is kicked each time that a line is closed. The assumption when designing
this was that freeing the write thread from creating a new write request
was better than the potential impact of writes colliding on the media
(user I/O and metadata I/O). Experimentation has proven that this
assumption is wrong; collision can cause up to 25% of bandwidth and
introduce long tail latencies on the write thread, which potentially
cause user write threads to spend more time spinning to get a free entry
on the write buffer.

This patch moves the metadata logic to the write thread. When a line is
closed, remaining metadata is written in memory and is placed on a
metadata queue. The write thread then takes the metadata corresponding
to the previous line, creates the write request and schedules it to
minimize collisions on the media. Using this approach, we see that we
can saturate the media's bandwidth, which helps reducing both write
latencies and the spinning time for user writer threads.

Signed-off-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;matias@cnexlabs.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
<entry>
<title>lightnvm: pblk: expose max sec per write on sysfs</title>
<updated>2017-06-26T22:24:53Z</updated>
<author>
<name>Javier González</name>
</author>
<published>2017-06-26T09:57:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c2e9f5d457ad6a75516e749a3e544165766ab1ce'/>
<id>urn:sha1:c2e9f5d457ad6a75516e749a3e544165766ab1ce</id>
<content type='text'>
Allow to configure the number of maximum sectors per write command
through sysfs. This makes it easier to tune write command sizes for
different controller configurations.

Signed-off-by: Javier González &lt;javier@cnexlabs.com&gt;
Signed-off-by: Matias Bjørling &lt;matias@cnexlabs.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
</entry>
</feed>
