fix compile with CONFIG_CHECKPOINT_DEBUG=n
PATCH 1/1 fix compile with CONFIG_CHECKPOINT_DEBUG=n
On the one hand, compiling without checkpoing debug saves a lot of kernel size:
with debug:
-rwxrwxr-x 1 hallyn hallyn 62391508 Oct 21 22:08 vmlinux without debug:
-rwxrwxr-x 1 hallyn hallyn 62298077 Oct 21 22:33 vmlinux
OTOH the need for this patch just proves my point that we don't want any more config options than we need (especially no CONFIG_CHECKPOINT_LOGGING in addition to _DEBUG).
So that begs the question - is there something we can do to avoid having to recompile the kernel to turn on debugging, but not take up 100k of space in vmlinux? Maybe get rid of the ckpt_debugs altogether and instead provide pre-written kprobe sets to turn on debugging at specific places?
--- checkpoint/restart.c | 23 +++++++++++++---------- 1 files changed, 13 insertions(+), 10 deletions(-)
checkpoint/restart.c +13 -10
@@ -26,6 +26,15 @@#include <linux/checkpoint.h> #include <linux/checkpoint_hdr.h> +#define RESTART_DBG_ROOT (1 << 0) +#define RESTART_DBG_GHOST (1 << 1) +#define RESTART_DBG_COORD (1 << 2) +#define RESTART_DBG_TASK (1 << 3) +#define RESTART_DBG_WAITING (1 << 4) +#define RESTART_DBG_RUNNING (1 << 5) +#define RESTART_DBG_EXITED (1 << 6) +#define RESTART_DBG_FAILED (1 << 7) +#define RESTART_DBG_SUCCESS (1 << 8)#ifdef CONFIG_CHECKPOINT_DEBUG
@@ -44,15 +53,6 @@struct ckpt_task_status {pid_t pid; -#define RESTART_DBG_ROOT (1 << 0) -#define RESTART_DBG_GHOST (1 << 1) -#define RESTART_DBG_COORD (1 << 2) -#define RESTART_DBG_TASK (1 << 3) -#define RESTART_DBG_WAITING (1 << 4) -#define RESTART_DBG_RUNNING (1 << 5) -#define RESTART_DBG_EXITED (1 << 6) -#define RESTART_DBG_FAILED (1 << 7) -#define RESTART_DBG_SUCCESS (1 << 8)int flags;int error;struct list_head list;
@@ -178,7 +178,10 @@ void restore_debug_free(struct ckpt_ctx *ctx)#else -static inline void restore_debug_task (struct ckpt_ctx *ctx,int flags) {} +static inline int restore_debug_task (struct ckpt_ctx *ctx,int flags) +{ +return 0 ; +}static inline void restore_debug_error (struct ckpt_ctx *ctx,int err) {}static inline void restore_debug_running (struct ckpt_ctx *ctx) {}static inline void restore_debug_exit (struct ckpt_ctx *ctx) {}
Signature · 1 line
1.6.1
A message that is not in the archive (sent off-list or not yet received): 20091022143238.GA31778-r/[email protected]
PATCH 1/1 ipc_ind_to_str unused if !CONFIG_CHECKPOINT_DEBUG
(compilation cleanup on top of
fix-compile-with-CONFIG_CHECKPOINT_DEBUG-n.patch
)
--- ipc/checkpoint.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
ipc/checkpoint.c +2 -0
@@ -21,7 +21,9 @@#include "util.h" /* for ckpt_debug */ +#ifdef CONFIG_CHECKPOINT_DEBUG static char *ipc_ind_to_str[] = {"sem" ,"msg" ,"shm" }; +#endif #define shm_ids (ns) ((ns)->ids[IPC_SHM_IDS])#define msg_ids (ns) ((ns)->ids[IPC_MSG_IDS])
Signature · 1 line
1.6.1
A message that is not in the archive (sent off-list or not yet received): 20091022193657.GA12321-r/[email protected]
Re: [PATCH] ipc_ind_to_str unused if !CONFIG_CHECKPOINT_DEBUG
Added, thanks.
Quoted 23 lines · Serge E. Hallyn
(compilation cleanup on top of
fix-compile-with-CONFIG_CHECKPOINT_DEBUG-n.patch
)Signed-off-by Serge E. Hallyn <serue-r/[email protected]>--- ipc/checkpoint.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)ipc/checkpoint.c +2
-0@@ -21,7 +21,9 @@#include "util.h" /* for ckpt_debug */ +#ifdef CONFIG_CHECKPOINT_DEBUG static char *ipc_ind_to_str[] = {"sem" ,"msg" ,"shm" }; +#endif #define shm_ids (ns) ((ns)->ids[IPC_SHM_IDS])#define msg_ids (ns) ((ns)->ids[IPC_MSG_IDS])
Quoted 12 lines · Serge E. Hallyn
On the one hand, compiling without checkpoing debug saves a lot of kernel size:
with debug:
-rwxrwxr-x 1 hallyn hallyn 62391508 Oct 21 22:08 vmlinux without debug:
-rwxrwxr-x 1 hallyn hallyn 62298077 Oct 21 22:33 vmlinuxOTOH the need for this patch just proves my point that we don't want any more config options than we need (especially no
CONFIG_CHECKPOINT_LOGGINGin addition to_DEBUG).
Quoted 5 lines
So that begs the question - is there something we can do to avoid having to recompile the kernel to turn on debugging, but not take up 100k of space in vmlinux? Maybe get rid of the
ckpt_debugsaltogether and instead provide pre-written kprobe sets to turn on debugging at specific places?
What is the reason for the increase - the strings ? the extra inlined code ? the passing of variables to printed ?
Turning on/off code at specific place requires that the code still be there ...
do you intend to add a crdebug.ko module hat will hold all
that code ? (if so, you still need to pass the variables).
Quoted 2 lines
Signed-off-by Serge E. Hallyn <serue-r/[email protected]>
Meanwhile - pulled, thanks.
Oren
Quoted 52 lines
--- checkpoint/restart.c | 23 +++++++++++++---------- 1 files changed, 13 insertions(+), 10 deletions(-)checkpoint/restart.c +13
-10@@ -26,6 +26,15 @@#include <linux/checkpoint.h> #include <linux/checkpoint_hdr.h> +#define RESTART_DBG_ROOT (1 << 0) +#define RESTART_DBG_GHOST (1 << 1) +#define RESTART_DBG_COORD (1 << 2) +#define RESTART_DBG_TASK (1 << 3) +#define RESTART_DBG_WAITING (1 << 4) +#define RESTART_DBG_RUNNING (1 << 5) +#define RESTART_DBG_EXITED (1 << 6) +#define RESTART_DBG_FAILED (1 << 7) +#define RESTART_DBG_SUCCESS (1 << 8)#ifdef CONFIG_CHECKPOINT_DEBUG @@ -44,15 +53,6 @@struct ckpt_task_status {pid_t pid; -#define RESTART_DBG_ROOT (1 << 0) -#define RESTART_DBG_GHOST (1 << 1) -#define RESTART_DBG_COORD (1 << 2) -#define RESTART_DBG_TASK (1 << 3) -#define RESTART_DBG_WAITING (1 << 4) -#define RESTART_DBG_RUNNING (1 << 5) -#define RESTART_DBG_EXITED (1 << 6) -#define RESTART_DBG_FAILED (1 << 7) -#define RESTART_DBG_SUCCESS (1 << 8)int flags;int error;struct list_head list;@@ -178,7 +178,10 @@ void restore_debug_free(struct ckpt_ctx *ctx)#else -static inline void restore_debug_task (struct ckpt_ctx *ctx,int flags) {} +static inline int restore_debug_task (struct ckpt_ctx *ctx,int flags) +{ +return 0 ; +}static inline void restore_debug_error (struct ckpt_ctx *ctx,int err) {}static inline void restore_debug_running (struct ckpt_ctx *ctx) {}static inline void restore_debug_exit (struct ckpt_ctx *ctx) {}
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 15 lines · Oren Laadan
Quoted 12 lines · Serge E. Hallyn
On the one hand, compiling without checkpoing debug saves a lot of kernel size:
with debug:
-rwxrwxr-x 1 hallyn hallyn 62391508 Oct 21 22:08 vmlinux without debug:
-rwxrwxr-x 1 hallyn hallyn 62298077 Oct 21 22:33 vmlinuxOTOH the need for this patch just proves my point that we don't want any more config options than we need (especially no
CONFIG_CHECKPOINT_LOGGINGin addition to_DEBUG).
Quoted 8 lines
Quoted 5 lines
So that begs the question - is there something we can do to avoid having to recompile the kernel to turn on debugging, but not take up 100k of space in vmlinux? Maybe get rid of the
ckpt_debugsaltogether and instead provide pre-written kprobe sets to turn on debugging at specific places?What is the reason for the increase - the strings ? the extra inlined code ? the passing of variables to printed ?
Half and half :)
Pulling out the 'current->pid' and task_pid_nr arguments in _ckpt_debug to printk, but keeping the __func__ and __LINE__, halves the overhead of CONFIG_CHECKPOINT_DEBUG from 78190 to 39809 bytes.
-serge