►
Description
http://goo.gl/U4b70r
29 October 2014
Ceph Developer Summit: Hammer
Day 2
Fixed Memory Layout for Message/Op Passing
Haomai Wang
A
B
B
Most
of
most
of
sins,
I
have
we
have
said
for
the
folder
for
the
last
update
attraction,
encoding,
BP
and
the
I
think
most
of
other
seen
sweeney.
The
discuss
is
matthew.
Then
she
said
by
lamp.
Oh,
we
do
some
win.
Kalitta
Cody's
work,
two
jobs
and
discarded
them
in
August
or
so
do
I
can
copy
it
to
message
restarted
example
week
we
can
factor
a
most
EOP
into
a
size
memory
layout
and
we
can
directly
use
it
without
the
code.
It
as
we
performed
in
a
decoder
mess
reduce
fashion.
B
B
E
D
Well,
actually,
they're
kind
of
just
not
not
similar.
I
guess
is
my
thing.
So
what
was
what
I
guess
concretely
did
you
were
you
thinking
of
what
the
with
the
message.
B
So
I,
maybe
we
can
move
decoder
logically
to
PG
PG
lawyer,
so
because
maybe
sometime,
we
didn't
need
it
to
Dakota
some
members
and
we
can
directly
you'll
eat
from
pointer,
which
is
appointed
to
buffer
in
balusters,
for
example,
the
most
MOS,
the
op's
peluda.
We
can
derail
it
and
without
decoder
decoder,
maybe
I
think
for
sure.
You.
B
D
B
For
clan,
except,
if
way,
he'll
fix
the
style,
the
memory
layout,
we
can
be
totally
I-
mean
SBWire
to
copy
memory
of
those
structure.
Just
like
what
a
waiter
for
august
or
office.
What's
most
of
that,
it's.
C
C
Because,
if
we
want
to
make
from
sorry
go
up
well,
I
mean
said:
I
mean
this
seems
like
the
simplest
approach
would
be
just
to
focus
on
those
like
four
messages
or
whatever,
whichever
ones
you
decide
of
the
important
ones
and
make
it
so
that
the
encoding
for
those
ones
is
similar
to
the
the
transaction
you
just.
Basically
it's
you
just
copy
the
data
to
copy
the
buffer
list,
but
you
drive
and
copy.
C
You
just
have
the
reference
to
the
buffer
list,
so
you
would
have
it's
almost
what
we
did
originally
where
in
the
old
old
versions
of
stuff,
where
the
the
header
for
the
mos
diop
was
a
struct,
a
pact
struct,
and
we
literally
just
copied
it
out
of
the
first
part
of
the
buffer.
But
instead
we
just
point
into
it.
C
D
C
So
let
me
just
paste
the
contents
of
the
structure
into
the
pad,
so
we
have
a
bunch
of
integer
types
and
then
we
have.
We
have
like
three
variable
link
things.
So
there's
the
there's
the
object
info,
the
locator
is
usually
fixed
sized
but
occasional
me
occasionally
as
key
set
key,
which
is
a
string
and
then
the
vector
of
ops.
B
B
C
So
but
but
it's
actually
mostly
fixed
size,
so
the
the
soid
thing
is
optional
and
rarely
used,
and
these
buffers
are
already
stored
elsewhere
in
the
structure,
though,
the
the
current
decode
does
this
annoying
thing,
where
it's
it's
basically
chunking
out
all
these
data's
and
mapping
them
into
the
OSD
apps,
so
that
the
buffer
lists
point
to
the
right
sections
of
the
data,
and
so
we
already
do
half
of
this.
It's
really
just
this
soid
and
the
string
and
the
object
locator
and
the
oid.
C
D
You
need
to
replace
so
you're
arguing
that
you
want
to
replace
the
variable
length
pieces
with
a
deferred
variable
with
a
so
instead
of
a
not
subject
to
you
have
a
deferred,
a
subject
to
which
instead
is
a
handle
which
points
into
a
buffer
list
that
is
unter
prett
addadd.
At
the
end
of
the
message
right.
C
Well,
you
could
say
you
could
change
this
OSD
up,
for
example,
to
instead
of
embedding
this
the
structure
to
have
it
a
shared
pointer
or
whatever,
or
not,
even
that
for
just
a
pointer
right
here
wait
I
thought
the
suppose
the
OP
was,
and-
and
this
could
be,
then
you
would
only
have
to
decode
this
string.
This
SOAD
string
you'd
copy
that
string,
which
is
rarely
used,
and
so
that
would
never
happen.
It's
have
a
pointer
into
their
original
buffer
here,
and
these
in
datas
are
just
adding
buffer
pointers
into
the
existing
buffer.
C
Also
so,
and
we're
already
doing
that
right
right.
So
then
this
vector
becomes
very
pretty
much
free,
you're,
just
allocating
a
vector
of
small
structures
and
populating
some
pointers
in
them,
and
then
the
only
other
pieces
are
this
object.
Id.
They
have
to
construct
into
code,
which
you
can
do
once
in
cash
and
the
locator
which
you
could
do
once
in
cash,
because
very
rarely
is
that
that
key
string
actually
used
see
Mike
and.
D
Usually,
aren't
that
many
ops
and
we
are
decoding
these
ones
and
cashing
them
right.
That's
that's
what
the
decode
yeah
it
does.
So
if
the
OST
ops
were
long
and
we
weren't
going
to
look
at
most
of
them,
then
that
would
make
some
sense.
I
guess
the
locality
isn't
isn't
great,
but
we're
going
to
read
the
whole
thing
anyway
and
we
just
pulled
it
off
the
wire.
So
it
can't
be
that
big,
mmhmm,
yeah,
I
I
think.
A
D
C
Yeah,
okay,
so
that
make
sense
I
mean,
maybe
what
I
do
so?
I
think
that
the
things
that
we're
copying
are
thus
fos
d,
op
and
all
these
integers,
which
are
we're
going
to
look
at
anyway,
so
might
as
well
coppia
months
and
we're
copying
the
string
for
the
oid
all
right.
Those
are
the
which
isn't
so
bad
snaps,
I
guess
these
are
these
get
copied.
C
D
D
D
Remember
there
are
a
whole
bunch
of
apps
that
are
overloaded
on
m
ost
cell
phone
I
forgot
about
that.
Like
half
of
the
little
utility
things
the
PG
does
our
sub
ops,
so
we
could
create
an
m
ost.
Clients
have
up
that.
Only
has
the
fields
relevant
for
that
that
that
would
buy
us
almost
all
of
it.
We
don't
need
the
data
sets
or
the
clone
subsets.
For
that
those
are
we
don't
we.
D
B
B
B
D
D
D
D
D
C
C
Like
this
OSD
pierced
at
is
information
about,
I
think
latency
that
was
added
when
I
was
experimenting
with
shedding
reads
two
replicas
to
speed
them
up
that,
like
never
even
worked
still
there
yeah,
okay.
C
Yeah
related
question,
though,
that
I'm,
while
we're
talking
about
Fiji
stats,
the
missus
totally
unrelated,
but
the
PG
stats,
we
still
have
that
category
thing:
yeah,
I,
don't
like
it
I
think
we
should
drip
it
out
because
I
don't
think
they.
We
have
any
users.
Let's
yeah.
I.
C
D
C
D
D
It's
an
submit
app
or
something
there's
exactly
one
caller.
This
constructor
is
called
once
now
that
I
think
about
it,
because
everything
above
that
isn't
allowed
to
know
because
erasure
coded
pools,
don't
use
m
ost
sub
pop's.
They
use
something
something
else.
I
forget
what
I
called
it
easy
sell
them
easy
right
or
something
I
create.
D
D
D
C
C
D
No
I
mean
but
I.
C
D
C
A
C
Yep
so
I
think
the
conclusion
I'm
at
the
bottom
of
the,
if
you're
looking
at
either
bed
at
the
bottom
I
took
a
few
notes.
I
think
that
the
takeaway
is
basically
that
we
want
to
create
a
new
message,
type
but
I,
say:
m
ost
clients,
a
pop:
that's
only
used
for
replicating
the
client
operations,
and
we
avoid
that
crafty
other
one
entirely
and
there's
one
caller
that
matters.
It's
the
replicated
back
end
issue
up
in
replicated
pgcc.
Yes,.
D
Am
I
just
to
give
you
a
little
background?
The
basic
the
problem
is
that
m
ost
sub
ops
are
used
or
have
been
used
for
the
following
things.
They
have
been
used
for
client,
ops,
recovery,
ops.
They
are
used
for
removing
objects
in
the
case
yep
as
a
during
backfill
there.
Yet
they're
used
to
removing
outer
ring
backfill.
Is
it
used
for
back
for
reserve
or
no
I
forgot
reserve?
Is
their.
E
D
B
B
D
You
know
none
of
this
is
used
for
racial
coded
pools
at
all
yeah.
We
have
we
have
it.
We
already
have
a
different
message
for
that,
so
you
can
ignore
Reggie
or
credit
pools.
In
fact,
the
only
fields
you
need
to
worry
about
are
the
ones
that
are
set
and
replicated
back
and
issue
up
yeah.
That
sounds
right.
So.
C
Just
yeah
I
think
just
look
at
that
one
function
and
fill
in
only
those
fields
that
are
used
and
then
on
the
on
the
other
side.
Look
at
what
the
handle
is:
D
Sub
Pop
the
path
that
actually
does
the
replicated
Klein,
ops
and
the
ones
that
it
looks
at
like
those
are
the
two,
a
sender
and
the
receiver
side,
the
most
of
it
most
of
its
not
used.