►
From YouTube: Hackathon Presentations - 2019 OpenZFS DevSummit
A
All
right,
so,
thanks
for
being
here
as
I
said,
we're
gonna,
just
when
you
are
when,
when
you
feel
moved,
come
up
and
share
what
you
work
on,
it
doesn't
have
to
be
like
Curious,
my
awesome
demo
of
like
a
million
lines
of
code
that
you
were
today
I
mean
you're.
Gonna
start.
You
will
see
that
the
bar
is.
A
These
are
the
prices,
because
they're
not
going
to
give
them
up
so
think
about
which
is
your
favorite
hot
spot
project,
as
you
are
seen
them
in
bring
up
a
Google
Form
that
you
could
vote
on
and
the
prizes
are
Bluetooth
speakers
and
wireless
charging
high
for
your
phone
and
there's
a
bunch
of
each
of
them
wherever
it
gets.
First
place
goes
to
picking
them
will
keep
going
down
the
list.
A
A
So
here's
you
found
that
the
performance
for
random
reads
was
not
what
we
expected.
It
was
not.
It
was
not
nearly
twice
what
it
would
be
with
three
discs
so
with
roma
lists.
So
here
we
have
a
pool,
it's
all
simple:
it
has
six
regular
one
actuator
old-school
discs
that
we're
all
familiar
with.
We
did.
We
were
in
FIO
to
create
a
bunch
of
files,
and
then
you
write
a
wreath
on
them.
The
interesting
thing
we
notice
is
that
this
is
how
much
space
is
allocated
for
me
stride.
A
It's
all
five
gigabytes,
everybody
cool
all
right.
Everything
makes
sense
evenly
divided
here
we
did
the
same
thing
on
a
dual
actuator,
so
this
is
six
funds
coming
from
three
different,
three
different
actual
physical
disks
in
the
notice
that,
like
so
F,
G
and
H,
are
one
visible
this
and
then
I
and
J
are
one
and
M
K
are
1
notice
that
the
first
one
refuses
of
those
parents
has
a
lot
more
space
allocated
from
it
at
the
next
one.
A
So
it's
like
I,
you
know
whoever
whoever
runs
the
fastest.
We
make
them
run
even
further,
as
we
want
everyone
to
be
running
all
the
time
by
which
I
mean
we
will
all
miss
to
be
doing,
writes
all
the
time
we
were
trying
to
do
writes,
and
so
it
looks
like
basically
in
these
two
lines
that
come
from
one
physical
disk.
One
of
them
appears
to
be
faster
than
the
other
sheet
operating
system.
You
know
know
exactly
why
that
is
yeah.
C
Great
to
the
latest,
and
since
these
are
like
test
units,
I
had
to
actually
get
a
newer
one.
You
know
I
can't
just
update
the
firmware,
so
I
will
actually
inform
the
community
once
I'm
to
the
latest
and
greatest
and
issue
it's
a
coupling
issue
mechanically
with
the
actuators
or
what's
gonna.
So
hopefully,
you
know
where
we
find
this.
A
D
From
del
phix
and
I
was
inspired
by
Paul
stock
and
a
little
bit
by
Brian
stock,
and
it's
always
we
understand
these
subsystems.
Joyce
I,
don't
want
to
drill
deeper
and
deeper.
So
we
he
was
talking
about
fragmentation
and
we've
been,
you
know,
doing
mitigation
attempts
and
we've
had
a
couple
efforts
to
try
to
create
fragmented
pools
so
that
we
can
run
our
algorithms
Brendan
performance
tasks
and
see
how
we
adapt
your
fragment
pools
and
they
all
involve,
like
you
know,
big
end
for
time,
because
you
have
to
go
over
write
a
bunch
of
stuff.
E
B
D
So
that's
that
was
my
hack.
So
did
you
do
that
hack
I
had
to
understand
like
what?
How
does
the
alligator
work
you
get?
This
giant
get
him
in
flat
with
a
giant
thing
and
then
like?
What
does
it
do
piece
and
it's
like
he's
sorry
I
observe
what
it
was
doing.
That's
always
like
the
first
step
and
then
then
I.
You
know
I
try
to
figure
out
what
this
fragment
fragmentation
score
is
talking
or
scores,
so
that
was
sort
of
my
hack
and
I'll.
Show
you
so
just
by
I
was
just
using
z-test.
D
It's
not
you
know,
but
it's
quick
to
do
get
erases
on.
So
you
typically
see
something
like
this,
where
you
have
whole
bunch
of
smaller
buckets,
and
then
you
have
these
bigger
bucket.
So
my
first
attempt
was
just
a
this
is
always
divided
in
half
every
time
you
speak
on
occasion
and
suddenly
start
like
making
it
smaller.
So
you
can
sort
of
see
well
so
yeah.
So
so
on
that
first
point
it's
like
I
actually
am
printing
out
the
racially
every
time
I'm
going
through
there.
So
I'm,
just
one
of
the
best-loved.
D
D
I
got
some
good
fragmentation
on
the
on
the
big
end,
which
is
what
I
was
doing
and
I'm
currently
working
on
doing
holes
so
like
for
the
smaller
allocations
try
to
skip
around
so
that
I
generated
lots
of
buckets
as
well.
So
that's
my
hack,
I
think
I
think
it'll
be
useful
to
generate
pools
that
are
really
fragmented.
Then
we
can
make
the
the
defrag
or
other.
H
Course
I
need
the
other
adapter
this
time
hi.
My
name
is
Ashe
I'm,
with
Panzer
ax
and
for
my
hack
I
took
one
of
Alan's
low-hanging
fruit
items
from
the
spreadsheet.
From
this
it
was
last
year.
Maybe
he
wanted
to
improve
the
user
experience
so
we're
gonna.
Do
a
little
skit
here,
I'm
going
to
be
a
hapless
to
submit
a
lot
to
make
a
mess
with
my
Z
fool,
so
I'm
gonna
start
not
an
eye
test.
Everyone
can
see
this.
You
can
watch
me
on
type
on
my
computer.
H
A
H
And
here
we
go:
here's!
Here's
the
hack
ad
f
now
requires
an
override
for
check,
replication
or
check
device
in
use
to
force
to
force
a
V
dev
into
a
thing
that
it's
not
supposed
to
be
in
okay.
You
know
what
I'm
really
impatient
so
I'm
gonna
typo
that
to
go
ahead
and
be
a
member
of
the
pool
and
I'm
gonna
say
we're
gonna
force
the
check,
replication.
H
Aha,
okay,
that
says
this
is
also
invalid,
because
da
zero
is
now
a
part
of
an
active
pool.
So
we
caught
that
separately.
So
we
have
separate
Molly
guard
switches
for
everything
that
can
go
wrong,
not
everything
a
lot
of
common
cases
where
people
destroy
their
pools
on
day
to
day
ideas.
So
this
system
in
is
truly
hapless
and
truly
frustrated.
Now
he's
gonna.
Do
the
wrong
thing
now:
he's
gonna
check.
H
H
A
I
On
we
have
put
out
the
most
pressing
fires,
we
have
removed
a
few
bankrupt
companies
and
merged
and
purchased,
and
all
the
things
that
happen
in
this
industry
so
quickly
so
much
on
all
of
it
and
it's
fine
for
say
new
content,
or
why
do
we
still
keep
it
with
a
wiki?
We
don't
know
it
is
running,
it
will
and
you
need
a
new
home
at
some
point,
but
we
have
some
ideas
for
that.
That's
a
easy
part,
but
your
participation
is
very
welcome.
I
If
you're
at
a
company,
virtually
all
of
you,
please
take
a
look
at
it
and
see
if
the
companies
list,
as
you
represent
it
as
you
represented
accurately
and
all
the
things
or
just
some
or
traying,
the
modern,
open
ZFS
that
is
represented
by
this
event,
as
opposed
to
2013.
So
in
other
new
content
territory,
I've
learned
that
both
del
phix
and
Brian's
team
are
using
the
performance
test
suite
in
the
GFS
on
linux,
repo
great
just
there
it
is
it
calls
file
with
a
script.
I
It
does
a
bunch
of
things
hooray,
we
just
heard
from
Don
about
the
built-in,
GPS,
etc.
I
would
very
much
like
to
have
a
page
on
making
that
easy
on
the
wiki,
because
when
wonderful
people
like
Mohammed
join
the
room,
no
X
I
would
like
to
you
know
just
aim
your
filesystem
at
my
new
hardware.
There
are
countless
blog
posts
with
random
BIOS
stuff
from
people
just
like
whatever
and
then
suddenly
it's
like
well,
none
of
us
can
produce
the
same
answers
on
anything,
invest
enough.
K
I
F
L
Right,
well,
that's
large,
but
what
I
worked
on
is
expanding
stbb
tree
Walker
yeah.
So
we
can
use
this
kind
of
lengthy
to
manage
to
find
a
populated
tree.
It's
the
MS
allocatable
one
and
you
can
see.
Oh,
it
has
721
elements.
The
height
is
only
one
and
only
a
three
nodes,
so
it's
only
like
a
node
with
two
things
going
down,
but
that
was
pretty
simple,
but
I
can
walk
it
and
cast
it
to
arrange
strength
and
we
can
see.
L
These
ranges
are
increasing,
which
is
good
and
I
can
also
count
the
objects,
and
we
can
see
that
yeah
we
do
have
we
end
up
with
the
700.
It
changes
like
pretty
quickly
but
700
entries,
and
you
can
see
I
kind
of
printed
out
like
the
strategy
for
traversal.
Like
we
start,
the
topic
is
de
coordinate.
We
look
at
one
entry.
We
see
here
in
sub
entries,
go
back
up,
see
kind
of
be
recursive
descent,
so
it
seems
to
working
super
well.
L
E
So
hi,
my
name
is
Johan
Budi
and
I
have
sent
upon
request,
which
is
a
bug
that
is
in
range
tree
implementation,
so,
which
is
recently
got
mushed.
So
I
have
sent
a
pull
request
for
that,
and
also
I
took
Brian's
fire
matter.
Implementation
I
have
revisited
to
latest
master
and
all
the
test
cases
that
he
has
written.
It
is
passing
so
yeah,
so
I've
sent
a
pull
request
for
that
as
well.
The
pending
part
in
that
is
review.
Comments
are
still
needed
to
be
addressed,
so
I
will
be
doing
that.
M
Okay,
so
I
looked
into
a
resume
of
a
send
and
receive
and
how
you
can
protect
yourself
from
watch
resume
tokens
because,
as
you
know,
like
you,
just
copy-paste
the
resume
token
from
the
receiving
side
to
the
sending
side
resume
your
send.
But
if
you're
like
developing
solution
to
work,
look
at
file
systems
between
hosted
do
not
necessarily
trust
each
other.
You
might
want
to
protect
yourself
against.
I
will
turn
the
forged
resume
tokens
and
to
do
that,
I
implemented
a
fake
or
forged
token
generator.
M
It's
basically
a
lot
of
copy
pasted
code
from
the
emu
code.
That
generates
the
resume
tokens,
and
you
can
see
here
that
we
are
generating
a
resume
token
that
sends
from
a
data
set
that
we
as
the
sending
side
note
and
Tralee
one
to
be
sent
to
the
receiving
side.
So
this
resume
token
will
tear
the
sending
side
to
send
these
snapshot
p1
secret
at
a
with
with
this
GID
from
the
beginning,
like
a
normal
full
sent.
So
we
can
look
into
that
or
we
can
start
to
generate
that
token
by
running
the
fake
token.
M
So
in
our
case-
and
we
expect
that
the
resume
token
will
send
the
top
make
at
a
snapshot
will
specify
p1
public
at
a
and
now,
if
we
receive
that
into
another
dataset
and
if
a
central
complain
and
tell
us
that
the
to
name
in
the
resume
token
and
cn1
specified
on
the
command
line
does
not
match.
That's
it.
N
Being
on
the
top,
I
did
yesterday
so
after
a
conversation
with
Tom,
we're
able
to
figure
out
what
was
wrong
with
the
green
routine
part
of
the
healing
receive.
So
apparently,
if
you
try
to
use
the
IU
or
rewrite
for
a
encrypted
block,
the
it
ends
up
trying
to
encrypt
again,
which
we
don't
need,
because
we
already,
since
we
do
figure
out
what
the
checksum
was.
N
K
O
F
O
P
F
K
So
I
thought
what's
cool,
what's
something
that
you
may
want
to
look
at
GFS
and
well:
let's
say
you
have
a
grass
and
or
some
kind
of
deadlock
right
and
someone's
holding
the
spawn.
Namespace
log
actually
had
a
grass
that
someone
done
some
things.
You
learned
it
wasn't
a
deadlock,
but
what
I
want
to
show
off
here
is
you
can
print
who
is
holding
the
spanish
with
log
and
you
can
also
print
anyone
waiting
of
the
negative
space
log
and
you
know
what's
cool
about
it
is
like
okay.
K
R
So
yesterday,
when
you
mentioned
that
GFS
is
now
moving
to
just
not
just
see
if
it's
on
Linux
but
open
ZFS
will
also
have
ZFS
on
FreeBSD
if
they
start
thinking
about
one
of
the
features
which
we
built
in
italics,
but
it's
not
out
there
yet
and
it's
not
been
merged.
It's
they're,
not
private
repository
call.
R
It
I
call
it
very
cool
level
snapshot
axis
so
so
what
I
was
wondering
was
how
it
would
actually
merge
it
into
FreeBSD
and,
and
so
as
part
of
this
hackathon
I
started
thinking
about
what
challenges
it
might
be
and
try
to
you
know
come
up
with
solutions
for
that.
So
it's
mostly
this
in
this
part,
first
described
what
I
mean.
What
this
feature
does
and
we'll
talk
about
how
to
you
know,
handle
the
challenge.
R
So
it's
it's
actually
quite
simple.
It's
just
like
the
dart
snapshot
at
the
root
today,
except
that
Dotson
there
is
a
directory
called
dart
snapshotting
every
directly
in
the
namespace,
so
somebody
so
people
can
browse
into
it
and
then
see
the
different
snapshots
in
which
the
directive
was
present
and
then
see
the
old
version
of
the
directory.
At
the
time
the
snapshot
was
taken.
So
actually
so.
This.
R
Of
that,
so,
for
instance,
if
you
had
this
data
4/4
bar
in
your
data
set
this
one,
then
he
had
snapshots
s1
and
s2.
Then
you
can
actually
go
into
snapshot
in
as
well
as
s2
it
and
see
the
old
version
of
in
the
directory
path,
so
that
so
this
house,
people
in
restoring
the
old
versions
of
files
if
they
lost
something
or
something
of
that
sort,
and
this
kind
of
feature
is
there
in
other
Nash
products
from
EMC
in
attack.
R
R
Other
aspects
of
this
feature
is
that
we
don't
list
dot
snapshot
because
those
like
fine
and
all
might
actually
traverse
down
the
getting
the
same
path
through.
It's
the
there
can
be
multiple
paths
to
enter
it,
a
reference.
In
this
case
you
could
have
entered
the
old
version
of
bar
by
going
to
snap
at
this
level.
Dog
snapshot
at
that
level,
so
we
want
to
preserve
the
same.
R
G
R
The
feature
looks
like
and
let's
proceed
to
how
it
is
give
a
overview
of
how
the
feature
is
supported
in
only
in
our
private
version.
So
we
don't
actually
have
this
namespace
on
this
we
create
pseudo
inodes
and,
and,
as
you
might
know,
the
I
notes
have
this
operation
dyno'd
operations
for
listing
and
and
and
bingo
cups.
So
we
just
need
to
support
those
operations
for.
R
Implementing
this
feature-
and
we,
the
users,
are
pretty
much
oblivious
of
how
we
stitch
this
namespace
we've
used
mounds
and
amounts
dynamically,
so
the
typical
user
doesn't
need
to
actually
do
any
amount
or
so
so
that
we
don't
have
lots
of
more
points.
Mounds
also
expire
with
time.
This
is
that's
kind
of
like
the
dot
snapshotted
at
the
root
which
we
currently
have
in
CFS,
so
so
well,
this
feature
depends
on
certain
limits,
specific
aspects
and
that's
where
the
challenge
or
any
problem
could
be
importing
it
to
previously.
R
E
R
R
Thus
he
FS
has
has
its
own
lens.
Vfs
has
two
entries
which
be
as
devfs
doesn't
so,
and
it
has
a
callback
which
we
provide
an
implementation
for
nd
use
that
implementation
to
mount,
and
somebody
does
a
lookup.
So
these
are
kind
of
some
of
the
linux
unix
specific
aspects.
So
in
the
case
of
freebsd,
so.
R
About
how
we
could
handle
these
challenges
and
that's
what
yester
down
here
so
in
the
case
of
freebies,
do
you
don't
have
been
launched,
but
we
could
easily
call
into
the
VFS
mount
functionality
to
do
that.
In
fact,
that
would
be
ideally
what
we
should
be
doing,
but
in
Linux
it's
not
possible
because
of
a
licensing
aspect.
This
for
this
functionality
cannot
be
utilized
by
ZFS
this,
which
is
there
inside
the
FS.
So
what
we
do
is
that
we
actually
call
in
user
space
and
and
invoke
the
amount
the
bind
option
so
again.
S
B
G
G
So
just
know
you
get
the
overview
path,
so
why
be
so?
You
just
threw
in
this
pool
with
1mm
a
traverse
the
into
Earth.
So
all
that
we
could
do
is
hundred
cups,
so
that's
where
it
saturates
it.
So
why
is
it
so?
So
what
we
found
is
the
CFS
is
very
inefficient
in
terms
of
handling
greet
some
writes,
VCO
pipeline
and
t30
model.
We
got
at
least
four
pound
X,
which,
before
I
yo
comes
back
to
the
use
of
thread.
So
that's
essentially
depicted
here
right.
G
You
have
an
application
turret,
which
goes
all
the
way
up
to
a
scream.
You
have
a
hit
good
and
if
you
don't
go
and
see
if
it's
in
there,
you
are,
if
it
does
all
the
way
through
here
by
plane,
submit
video
and
then
go
all
you
back
and
we
go
green
to
finish.
That's
what
it
does
and
your
comes
back
on
the
inner
context.
You
take
the
task,
you
ask
you
finish.
The
co
by
plane
makes
of
the
thread
which
is
waiting
on
idle
right,
so
so
at
least
we're
in
tour.
G
We
don't
really
have
to
go
to
three
Co
back
plane.
Assuming
that
your
device
is
faster
and
you
get
a
response
within
maybe
100
200
microseconds
right,
so
that's
exactly
what
we
did.
Essentially.
Sharks
are
cute
the
old
biplane
stage
to
do
a
rocking
weight.
Flopping
read
here
on
behalf
of
the
application
thread
and
you
essentially
what
we
do
typically
for
a
you
are
done
case,
including
filling
up
the
debug
and
essentially
wake
up
the
application
straight.
G
So
with
this
we
could
double
the
oxidate
went
up
to
200
k.
Then
we
get
another
issue
where
today
with
hello
nog,
when
it
gets
filled
up
it
blocks
the
application
thing
you
sleep
for
a
while
wait
for
it
to
Evek
to
a
stage
very
certain
threshold
then
means
so
he
causes
your
I/o
pattern,
will
just
go
up
to
11
phosphorous
drop
down,
so
it
gives
you
a
typical
also
so
with
El
to
work.
G
It
does
not
solve
this
that
problem,
because
even
when
you
have
data
coming
from
L
to
arc,
you
fill
up
arc
with
that
as
well,
not
with
that
fitting
into
the
same
work
life.
So
we
change
the
semantics
of
what
exactly
L
to
earth
means.
So
this
typically,
what?
What
what
you
already
know,
our
history,
so
you
could
have
a
horse
in
this
example
D
2
and
B
4,
which
would
be
both
in
Rockefeller
cycle,
which
is
which
this
is
what
is
causing
you
to
cause
the
cash
rocket.
G
So,
essentially
implementing
the
art
as
a
extension
of
l1,
rather
than
just
having
duplicate
from
both
sides.
So
you
have
force
either
in
or
into
are
not
both
so
which
avoids
you
filling
up
the
l1,
not
this
causing
the
thrashing.
So
with
that
we
could
sustain
the
I
upset
same
rate.
So
this
is
not
a
specific
just
wanted
to
bring
it
up.
I
mean
the
next
thing
is
what
we
can
do
with
more
than
one
device
right,
so
one
device
we
could
get.
G
G
A
G
A
fireplace
which,
with
256
threads
on
three
devices,
doing
around
300k
ops,
and
so
this
is
the
air
to
work.
So
our
stats
right
so
you're
not.
He
said
it
to
be
and
stays
that
and
that's
what
we
wanted
and
and
all
your
data
is
coming
from
you
all.
So
in
this
case
the
whole
dataset
out
the
active
data
city
is
cashed
in.
S
Mechanics
and
today
I,
you
don't
talk
about
how
ZFS
handles
a
cleanly
provision.
This
you
know
in
this
I,
don't
care,
you
know
how
much
storage
I
have
in
the
back,
but
you
know
what
happens
if
you
give
a
one
megabyte
this
to
include
a
particular
pool,
so
how
much?
Maybe
you
need
really
to
import
that
kind
of
a
pool,
so
I
mean
one.
Take
that
okay,
you
need
to
initialize
the
Metis
labs
and
you
know
all
that
what
it
takes
but-
and
you
know,
za
cuts
already
partitions.
Are
this
into
hell
laughs
right
now?
S
S
Memory,
so
you
know
we
can
the
size
of
the
and,
but
even
with
that,
you
know
we
were
to
have
around
16,000
minutes
lapse
on
disk
and
each
MSP
structure.
You
know
when
you
initialize
and
in
region
2
the
range
trees
that
we
are
you
know
initializes
initialization
freeze.
It
takes
around
10
kilobytes
of
memory.
S
Throw
some
couple
of
hmx,
but
here
is
my
setup.
You
know
and
that's
the
problem
that
I
have
that
I
have
a
pool
which
has
a
lot
of
discs
and
they
are
all
3d
printers
I
don't
want
to.
You
know
care
about.
You
know
what
site
that
is
and
it
just
not
what's
in
the
pool,
but
I
have
multiple
pools
because,
hey
you
know,
I
want
to
load
balanced
I
want
to
move
around
these
pools
from
one
volume
go
from
one
medium
to
another
VN.
S
S
So
how
do
we
solve
this
problem?
So
I
say
looking
into
this
as
part
of
this,
you
know
where
all
this
memory
is
going
right.
So
if
you
look
at
the
MSB
structure
is
a
service
to
it
to
be
otherwise
and
then
giving
them
la
minute.
We
also
gave
some
range
trees.
Each
range
3
is
6,
24
bytes
and
for
each
lab
we
end
up
allocating.
You
know
bunch
of
these
range
links
and
if
you
do
not
totally
come
out
to
be
around
10
to
the
pipe,
so
this
is
1.8
master
branch.
S
What
we
are
using
internally
is
0.7,
which
I
think
is
even
less
than
this
then
I
say
on
eight
kilobytes
or
something
but
you're
on
the
master.
It's
on
pay
until
abides
forever
laughs.
So
I
thought.
Maybe
you
know
what
we
can
do
is
we?
Can
we
don't
need
all
these
structures
at
the
time
when
you
know
we
are
importing
the
pool,
we
don't
even
need
those
structures
because
sp2
for
allocation
on
that.
So
all
the
range
sweeps
up.
We,
it
still.
S
Basic
data
structures
so
that
we
can,
you
know,
look
at
the
ID,
for
example,
what
the
fragmentation
level
is
pick
up
based
on
the
weight
and
all
those
things.
So
we
need
some,
but
we
don't
need
to
create
all
this.
You
know
three
three
and
three
and
all
those
things,
because
we
are
not
doing
allocations
yet
so
can
we
divide
this
structure
into
two
parts
started
one
and
dynamic
one
which
is
only
upon
P
load?
S
S
B
S
So
at
least
what
I
could
achieve
is
I
could
create
a
pool
and
I
could
see
that
so
I
can
get
a
different,
even
cache
or
allocating
this
expedition
dynamic.
One
and
I
use
system
gap
to
make
sure
that
I
am
only
allocating
three
times,
because
three
is
a
period
number
of
minutes,
laughs
I'm,
not
allocating
it
for
all
the
laughs.
Although
I
can't
explain
why
the
slam,
outputs
I,
have
74
objects
in
it,
so
I
find
explain
that
right
now.
S
This
is
working
out
on
buying
some
of
these
details,
but
yeah
in
nutshell
that
you
know
it
should
definitely
save
a
lot
of
space
unnecessarily
and
it's
all
instantly
position
so
I
should
know.
I
should
not
be
worried
about.
You
know
the
disk
is
large
or
small,
because
I
understand
that
ZFS
will
started.
You
know
we
had
all
this
physical
value
telling
it
in
capacities.
But
if
you're
running
on
VM
solutions-
and
you
know.
T
No
robbery
singles
falls
into
that
category
is
trim,
but
I
didn't
add
that
when
I
up
streamed
it
so
I
thought
this
would
be
a
good
time
to
go
back
in
and
add
that
sort
of
missing
feature.
So
what
that
looks
like
is
I
can
I
can
do
a
trim
is
equal
trim.
I
got
are
to
make
it
a
little
bit
slower,
so
we
can
see
it
and
then
I.
T
This
is
a
W
flag
that
I
added,
which
means,
instead
of
returning
immediately
after
kicking
off
the
trim,
wait
until
the
trim
is
finished
or
until
we're
not
trimming
anymore
until
it's
finished
or
it's
canceled
at
schools
exported
or
something
like
that.
So
we
can
kick
that
off
and
status.
You
can
see
it's
trimming,
but
the
command
has
blocked
and
it's
not
going
to
return
until
you
cancel
the
trim
or
finishes,
and
in
case
you
didn't
kick
off
the
trim
initially
with
the
W
flag,
but
you
do
want
to
wait
for
it.
T
There's
also
this
zpool
wait
command.
So
we
do
is
equal,
wait,
say
what
we
want
to
wait
say
what
we
want
to
wait
for
in
this
case
trim
the
pool
and
it
will
block
until
the
trim
is
finished,
and
if
you
want,
you
can
also
get
periodic
updates
about.
You
know
how
much
it
has
left
its
trim
and
then
I'm
not
going
to
wait
for
it
to
finish,
but
we'll
cancel
it
in
both
of
these
things
that
come
as
they're
waiting
should
return
immediately.
When
we
cancel
the
trim
and
they
do
that's,
it.
U
So
one
of
the
requirements
that
we
had
excellently
was
given
two
snapshots
report.
What
blocks
have
changed
for
given
file?
So
if
you
have
a
fire
in
which
is
present
in
two
snapshots,
you
won't
see
which
blocks
of
that
file
have
changed.
So
that
was
the
requirement
when
you're
trying
to
figure
out
what
you
use
and
ice
walking
through
the
DM.
U
diff
code
path,
which
essentially
does
that
and
there's
this
Travis
VP
so
found
that
this
function,
which
does
this,
which
is
Travis
B
node.
U
So
we
have
hooked
into
that
one
and
what
he
essentially
do
is
figure
out.
What's
what's
the
th-things
of
the
two
snapshots
so
B?
If
you
have
snapshot
s
s1
and
s2
in
those
chrome,
versatile
order
see
you
basically
figure
out,
which
is
the
exe
of
s1,
and
then
you
basically
want
to
report
all
the
blocks
of
that
d
node,
which
are
born
after
the
THC
of
s1.
U
So
that's
pretty
much
already
built
in
so
I
was
trying
to
use
something
that
was
there
in
any
ZEB
and
use
that
to
report,
but
then
figured
that
we
already
have
Travis
P
Norwich
s.
She
does
that,
so
all
it
needed
was
a
little
bit
of
hooking
up.
I
still
don't
have
the
plumbing
done,
which
can
pump
it
back
into
the
user
light,
but
it
right
now
reports
a
10
in
D
message
or
cm
an
error
right
now,
just
reports
in
there.
U
C
piece
in
here
future
reporting
the
blocks
it's
still
because
I'm
just
using
the
SM
block
print
of
micro
in
there,
but
he
report
any
the
blocks
which
have
changed
in
there,
but
so
now
I
need
to
hook
it
back
into
the
pipe
that
he
set
up
for
for
Xia
festive
and
then
report
it
back
in.
So
that's
what.
J
Reorganizing-
and
this
is
really
just
a
spitball-
take
on
it
but
reorganizing
into
topics
the
sub
commands
because
they
were
fairly
arbitrarily
ordered
in
there,
so
the
the
ZFS
command
man
page
currently
looks
a
little
bit
like
the
get
man
page.
Where
there's
all
the
sub
commands
listed,
separate
topics,
I
left
the
long
examples
section
at
the
end
thought
about
pulling
it
out,
wasn't
sure
if
that
was
too
much
to
change,
but
I
did
pull
out
a
lot
of
the
overview
information
into
a
ZFS
concepts.
J
Man
page
and
all
of
this
I
think
is
subject
to
editing
and
just
give
an
example
of
what
one
of
the
command
man
pages
looks
like
bring
in
the
synopsis
just
for
those
commands
and
then
copy
verbatim.
The
description
sections
that
used
to
live
in
the
top
level,
man
page
on
the
one
that
was
a
real
relief
for
me
to
get
done
was
the
ZFS
properties
which
it
needs
a
little
more
boilerplate
at
the
top.
J
But
now
it's
in
its
own
file,
and
so
you
still
have
to
scroll
forever
and
ever
to
get
to
the
bottom
of
all
the
properties,
but
there
at
least
in
their
own
file.
One
of
the
great
things
about
this
is
that,
as
more
distributions
are
merging
into
open,
ZFS
it'll
make
the
changes
to
the
topics
more
atomic
and
also
some
of
the
platform
specific
stuff.
That's
not
in
this
repository
right
now,
like
FreeBSD
jails,
should
be
easier
to
work
in
via
preprocessor
rules
or
something
of
the
kind.
So
that's
what
I
got
done
today.
G
V
V
V
This
is
the
pool
that
the
user
created
for
the
reproducer.
It's
got
a
single
just
be
Devon
a
single
log,
B
dev,
a
file
B
dev
I
mean
they
both
file
backed
and
the
test
is
to
run
this
DD
command.
They
actually
had
a
higher
count,
but
I
didn't
have
enough
memory
to
do
this.
On
my
laptop
so
I'm
a
little
concerned
about
the
block
size
equals
10,
Meg
I'm,
not
so
sure,
if
that's
might
be
related,
everything
that's
happening
so
to
troubleshoot.
V
This
I
created
reproducer
script
based
on
the
ones
that
were
there
and
I
confirmed
the
issue.
It
wasn't
as
slow
for
me
as
it
was
for
that
person,
but
it
was
still
different
and
not
as
good
and
then
I
really
wanted
to
do
a
flame
graph,
because
it
was
seem
like
the
cool
thing
from
yesterday
and
the
day
before,
but
I
couldn't
get
that
installed.
But
I
have
perf
tools,
so
I
figured
I'd
use
that
I
was
suspicious
about
the
setting
of
log
by
x,
equals
latency.
V
V
I,
don't
think
that's
rusev,
that's
exactly
the
root
cause.
I
wasn't
able
to
get
to
the
exact
root
cause
today,
at
the
time
I
had
but
I
think
it's
safe
to
say
that
it
probably
wasn't
helpful
to
have
that
many
calls
to
basically
calling
it
almost
twice
for
every
every
block
you
were
putting
through
and
I've
gone
ahead
and
updated
that
issue
with
what
I
found
out
today.
So
that's
all
I
got
so.
B
My
goal
today
was
to
get
it
ready
for
all
requests,
which
I
think
I've
done,
and
that
led
into
part
two
of
the
thing
why
I
don't
have
a
demo,
because
everything
needs
to
be
able
to
be
tested
nowadays
and
thinking.
Well,
how
can
I?
How
can
I
test
this
thing
and
I
after
chatting
with
Brian
a
little
bit
I
thought
we,
the
suggestion
was
made
to
use
the
Z
inject
infrastructure.
B
Unfortunately,
the
whole
Z
and
inject
infrastructure
doesn't
really
give
what
we
want
for
this
type
of
for
this
type
of
testing,
because
what
I
really
want
to
be
able
to
do
is
I
want
to
be
able
to
test
a
pool
that
actually
has
valid
checksums
but
invalid
data
on
in
its
metadata,
and
that's
just
not
something
that
the
Z
inject
infrastructure
is
prepared
to
do
right
now,
at
least
not
for
data
and
denotes,
which
is
where
they
are,
which
is
one
of
the
block.
Block.
B
The
second
thing
I
worked
on,
I
actually
have
a
demo
for,
and
it's
going
to
take
about
two
seconds
or
so
geared
toward
developers,
and
this
was
just
one
of
these-
it
looked
like
it
would
be
a
cool
thing
to
do,
projects
sometimes
I
go,
and
that
is
under
Linux.
At
least
we've
got
a
proc
file
called
thgs
and
what
it
does
is
it
shows
information
about
presidential
groups
and
I,
occasionally
read
about
sync
to
conversions
thing,
and
it's
like
okay,
be
interesting
to
see
how
many
sync
passes
each
transaction
group
tastes.
B
So
if
this
patch
does
it's
pretty
simple
good
afternoon
column
called
passes,
and
that
shows
how
many
sync
passes
were
required
to
make
that
to
make
that
transaction
group
get
pushed
out
and
I
did
this
a
while
ago
and
I
was
kind
of
sitting
on
it
and
I
figured
well
forget
it's
got
a
positive
reaction
here
from
developers.
I'll
put
it
out
out
as
a
out
as
a
pull
request.
Yeah
and,
of
course
now
I
have
to
wonder
to
myself.
How
does
it
fit
into
FreeBSD
and
other
OS?
B
Q
Q
The
other
thing
that
I
did
today
was
try.
It
was
going
to
try
to
get
a
rust
file
a
building
as
part
of
the
ZFS
kernel
module.
That
was
like
my
aspirational
goal.
It
turns
out
that
that
was
an
extremely
aspirational
goal,
because
I
couldn't
even
get
like
an
open-source
I.
Just
like
pulled
again
hub
repository
where
people
created
a
Linux
kernel,
module
in
rust
and
I
could
not
get
that
to
compile
like
I,
followed
it
exactly
the
steps
they
gave
me
and
it
spewed
out
inscrutable,
compile
errors.
So.
F
Q
Q
A
A
A
F
F
A
F
P
F
A
All
agree
on
giving
concise
talks
about
your,
so
thank
you
very
much
join
us
a
week
actually
week
from
today.
The
call
if
you'd
like
to
hear
the
talk
that
had
to
be
canceled
from
yesterday
about
securing
to
hobbies.
You
know
concede
bus
and
also
status,
updates
on
projects
and
progress
in
every
month,
and
then
please
join
us
again
next
year,
we'll
announce
next
year's
states,
I.