mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Louis Rilling <Louis.Rilling@kerlabs.com>
To: Oren Laadan <orenl@cs.columbia.edu>
Cc: dave@linux.vnet.ibm.com, arnd@arndb.de, jeremy@goop.org,
	linux-kernel@vger.kernel.org,
	containers@lists.linux-foundation.org
Subject: Re: [RFC v2][PATCH 7/9] Infrastructure for shared objects
Date: Thu, 21 Aug 2008 12:40:16 +0200	[thread overview]
Message-ID: <20080821104016.GJ581@hawkmoon.kerlabs.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0808202306170.17436@takamine.ncl.cs.columbia.edu>

[-- Attachment #1: Type: text/plain, Size: 3611 bytes --]

On Wed, Aug 20, 2008 at 11:06:50PM -0400, Oren Laadan wrote:
>
> Infrastructure to handle objects that may be shared and referenced by
> multiple tasks or other objects, e..g open files, memory address space
> etc.
>
> The state of shared objects is saved once. On the first encounter, the
> state is dumped and the object is assigned a unique identifier and also
> stored in a hash table (indexed by its physical kenrel address). From
> then on the object will be found in the hash and only its identifier is
> saved.
>
> On restart the identifier is looked up in the hash table; if not found
> then the state is read, the object is created, and added to the hash
> table (this time indexed by its identifier). Otherwise, the object in
> the hash table is used.

[...]

> diff --git a/checkpoint/ckpt.h b/checkpoint/ckpt.h
> index 0addb63..8b02c4c 100644
> --- a/checkpoint/ckpt.h
> +++ b/checkpoint/ckpt.h
> @@ -29,6 +29,8 @@ struct cr_ctx {
>  	void *hbuf;		/* header: to avoid many alloc/dealloc */
>  	int hpos;
>
> +	struct cr_objhash *objhash;
> +
>  	struct cr_pgarr *pgarr;
>  	struct cr_pgarr *pgcur;
>
> @@ -56,6 +58,22 @@ int cr_kread(struct cr_ctx *ctx, void *buf, int count);
>  void *cr_hbuf_get(struct cr_ctx *ctx, int n);
>  void cr_hbuf_put(struct cr_ctx *ctx, int n);
>
> +/* shared objects handling */
> +
> +enum {
> +	CR_OBJ_FILE = 1,
> +	CR_OBJ_MAX
> +};
> + +void cr_objhash_free(struct cr_ctx *ctx);
    ^
    |
      Strange, isn't it?

> +int cr_objhash_alloc(struct cr_ctx *ctx);
> +void *cr_obj_get_by_tag(struct cr_ctx *ctx, int tag, unsigned short type);
> +int cr_obj_get_by_ptr(struct cr_ctx *ctx, void *ptr, unsigned short type);
> +int cr_obj_add_ptr(struct cr_ctx *ctx, void *ptr, int *tag,
> +		   unsigned short type, unsigned short flags);
> +int cr_obj_add_tag(struct cr_ctx *ctx, void *ptr, int tag,
> +		   unsigned short type, unsigned short flags);
> +
>  struct cr_hdr;
>
>  int cr_write_obj(struct cr_ctx *ctx, struct cr_hdr *h, void *buf);
> diff --git a/checkpoint/objhash.c b/checkpoint/objhash.c
> new file mode 100644
> index 0000000..aca32c6
> --- /dev/null
> +++ b/checkpoint/objhash.c
> @@ -0,0 +1,193 @@
> +/*
> + *  Checkpoint-restart - object hash infrastructure to manage shared 
> objects + *
> + *  Copyright (C) 2008 Oren Laadan
> + *
> + *  This file is subject to the terms and conditions of the GNU General Public
> + *  License.  See the file COPYING in the main directory of the Linux
> + *  distribution for more details.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/file.h>
> +#include <linux/hash.h>
> +
> +#include "ckpt.h"
> +
> +struct cr_obj {
> +	int tag;
> +	void *ptr;
> +	unsigned short type;
> +	unsigned short flags;
> +	struct cr_obj *next;
> +};
> +
> +struct cr_objhash {
> +	struct cr_obj **hash;
> +	int next_tag;
> +};
> +
> +#define CR_OBJHASH_NBITS  10	/* 10 bits = 1K buckets */
> +#define CR_OBJHASH_ORDER  0	/* 1K buckets * 4 bytes/bucket = 1 page */

Only true when PAGE_SIZE == 4K and in 32bits. Perhaps like below?

#define CR_OBJHASH_BUCKET_NBITS (BITS_PER_LONG == 64 ? 3 : 2)
#define CR_MIN_OBJHASH_NBITS ((PAGE_SHIFT - CR_OBJHASH_BUCKET_NBITS)
#define CR_OBJHASH_NBITS (CR_MIN_OBJHASH_NBITS >= 10 ? CR_MIN_OBJHASH_NBITS : 10)
#define CR_OBJHASH_ORDER (CR_OBJHASH_NBITS + CR_OBJHASH_BUCKET_NBITS - PAGE_SHIFT)

Louis

-- 
Dr Louis Rilling			Kerlabs
Skype: louis.rilling			Batiment Germanium
Phone: (+33|0) 6 80 89 08 23		80 avenue des Buttes de Coesmes
http://www.kerlabs.com/			35700 Rennes

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2008-08-21 10:40 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-21  2:58 [RFC v2][PATCH 1/9] kernel based checkpoint-restart Oren Laadan
2008-08-21  3:03 ` [RFC v2][PATCH 1/9] Create trivial sys_checkpoint/sys_restart syscalls Oren Laadan
2008-08-21  5:17   ` Oren Laadan
2008-08-22 19:32   ` Dave Hansen
2008-08-22 20:11     ` Dave Hansen
2008-08-22 21:20     ` Oren Laadan
2008-08-21  3:04 ` [RFC v2][PATCH 2/9] General infrastructure for checkpoint restart Oren Laadan
2008-08-21  9:35   ` Louis Rilling
2008-08-24  5:58     ` Oren Laadan
2008-08-22 20:01   ` Dave Hansen
2008-08-25  2:47     ` Oren Laadan
2008-08-26 16:42       ` Dave Hansen
2008-08-27  0:38         ` Oren Laadan
2008-08-21  3:04 ` [RFC v2][PATCH 3/9] x86 support for checkpoint/restart Oren Laadan
2008-08-22 20:17   ` Dave Hansen
2008-08-21  3:05 ` [RFC v2][PATCH 4/9] Memory management - dump state Oren Laadan
2008-08-21  7:30   ` Ingo Molnar
2008-08-21  8:01     ` Justin P. Mattock
2008-08-21 10:28     ` Balbir Singh
2008-08-21 11:59       ` Ingo Molnar
2008-08-21  9:53   ` Louis Rilling
2008-08-22 21:21     ` Oren Laadan
2008-08-22 20:37   ` Dave Hansen
2008-08-24  5:40     ` Oren Laadan
2008-08-26 16:33       ` Dave Hansen
2008-08-27  0:14         ` Oren Laadan
2008-08-27 15:41           ` Dave Hansen
2008-08-27 15:57             ` Louis Rilling
2008-08-27 16:12               ` Dave Hansen
2008-08-27 16:19                 ` Jeremy Fitzhardinge
2008-08-27 20:34             ` Serge E. Hallyn
2008-08-27 20:38               ` Dave Hansen
2008-08-27 20:48                 ` Serge E. Hallyn
2008-08-27 20:56                   ` Dave Hansen
2008-08-31  7:16                     ` Oren Laadan
2008-08-31 17:34                       ` Cedric Le Goater
2008-09-03 11:43                         ` [Devel] " Andrey Mirkin
2008-09-03 12:15                           ` Cedric Le Goater
2008-09-03 13:29                             ` Andrey Mirkin
2008-09-02 15:32                       ` Serge E. Hallyn
2008-08-21  3:05 ` [RFC v2][PATCH 5/9] Memory managemnet - restore state Oren Laadan
2008-08-21 10:07   ` Louis Rilling
2008-08-21  3:06 ` [RFC v2][PATCH 6/9] Checkpoint/restart: initial documentation Oren Laadan
2008-08-21  3:06 ` [RFC v2][PATCH 7/9] Infrastructure for shared objects Oren Laadan
2008-08-21 10:40   ` Louis Rilling [this message]
2008-08-26 17:01     ` Dave Hansen
2008-08-27  8:26       ` Louis Rilling
2008-08-21  3:07 ` [RFC v2][PATCH 8/9] File descriprtors - dump state Oren Laadan
2008-08-21 11:06   ` Louis Rilling
2008-08-25  3:28     ` Oren Laadan
2008-08-25 10:30       ` Louis Rilling
2008-08-21  3:07 ` [RFC v2][PATCH 9/9] File descriprtors (restore) Oren Laadan
2008-08-21  5:26   ` Oren Laadan
2008-08-21  5:15 ` [RFC v2][PATCH 1/9] kernel based checkpoint-restart Oren Laadan

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=20080821104016.GJ581@hawkmoon.kerlabs.com \
    --to=louis.rilling@kerlabs.com \
    --cc=arnd@arndb.de \
    --cc=containers@lists.linux-foundation.org \
    --cc=dave@linux.vnet.ibm.com \
    --cc=jeremy@goop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=orenl@cs.columbia.edu \
    /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

all inboxes | Powered by JetHome®