CEPH filesystem development
 help / color / mirror / Atom feed
From: Radoslav Georgiev <rgeorgiev583@gmail.com>
To: ceph-devel@vger.kernel.org
Subject: Google Summer of Code 2017 project proposal: implementation of RBD diff checksums using a rolling checksum algorithm
Date: Sun, 2 Apr 2017 22:36:25 +0300	[thread overview]
Message-ID: <590b7274-9806-e8b1-e81e-b0df9ffa9d3b@gmail.com> (raw)

Hello,

My name is Radoslav Georgiev and I am currently studying Computer 
Science at Sofia University.  As a passionate software developer with a 
special appreciation of free and open source software, I am interested 
in taking part in the Google Summer of Code 2017 program.  My main 
motivation to choose Ceph as my prospective mentoring organization is 
because I am interested in distributed and scalable storage in general, 
and the way Ceph does it in particular (especially its architecture: the 
RADOS concept and library, the RADOSGW, the Ceph block device, CephFS, 
and the various assorted APIs).  In addition to that, I used to work as 
a systems programmer for an organization that employed Ceph for its data 
storage and scalability needs, writing software that interacts with 
Ceph's service interfaces.

When I went through your organization's list of ideas, I saw that there 
is a need for verification of diffs of RADOS block device images (i.e. 
RBD diff checksums) to be implemented. Since (as mentioned in the idea 
description) calculating the checksum of an entire image would be too 
slow and inefficient, I came up with the (actually pretty trivial) 
solution to use a rolling checksum algorithm.

As you might know, rolling hash algorithms save computation time and 
memory.  They split the input into chunks, and calculate the hash of 
each chunk using a simple (i.e. fast) hash algorithm.  What is important 
to note here is that the hash for the whole string is calculated 
incrementally, beginning from zero (or some known constant value), and 
for each chunk added the checksum of the string including that chunk is 
calculated using only the old checksum (of the string without the chunk) 
and the difference between the last chunk and the currently added one. 
(For more information on this topic, see 
<https://en.wikipedia.org/wiki/Rolling_hash>.)

Some useful rolling hash algorithms that could be implemented are the 
Fletcher's checksum algorithms (Fletcher-16/32/64 
<https://en.wikipedia.org/wiki/Fletcher's_checksum>), or the Adler-32 
algorithm (which, albeit slightly modified, is used in rsync).  (Of 
course, these algorithms do not provide particularly strong or 
cryptographically secure hashing but, as far as I understood, it is not 
really necessary to provide that for the purpose given.)

I think my idea is worthy of consideration as a solution to the 
presented problem, and I look forward to its acceptance.

P. S. I sent you a mail because it was mentioned on Ceph's GSoC 
organization page that students willing to participate should do so to 
foster better communication with the mentors.

-- 
Regards,
   Radoslav


                 reply	other threads:[~2017-04-02 19:36 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=590b7274-9806-e8b1-e81e-b0df9ffa9d3b@gmail.com \
    --to=rgeorgiev583@gmail.com \
    --cc=ceph-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox