core: use env variable instead of config var to turn on logging pack access
5f44324
(core: log offset pack data accesses happened - 2011-07-06)
provides a way to observe pack access patterns via a config
switch. Setting an environment variable looks more obvious than a
config var, especially when you just need to _observe_, and more
inline with other tracing knobs we have.
Document it as it may be useful for remote troubleshooting.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
edca415256
commit
b12ca9631f
@ -832,6 +832,13 @@ for further details.
|
|||||||
as a file path and will try to write the trace messages
|
as a file path and will try to write the trace messages
|
||||||
into it.
|
into it.
|
||||||
|
|
||||||
|
'GIT_TRACE_PACK_ACCESS'::
|
||||||
|
If this variable is set to a path, a file will be created at
|
||||||
|
the given path logging all accesses to any packs. For each
|
||||||
|
access, the pack file name and an offset in the pack is
|
||||||
|
recorded. This may be helpful for troubleshooting some
|
||||||
|
pack-related performance problems.
|
||||||
|
|
||||||
GIT_LITERAL_PATHSPECS::
|
GIT_LITERAL_PATHSPECS::
|
||||||
Setting this variable to `1` will cause Git to treat all
|
Setting this variable to `1` will cause Git to treat all
|
||||||
pathspecs literally, rather than as glob patterns. For example,
|
pathspecs literally, rather than as glob patterns. For example,
|
||||||
|
3
cache.h
3
cache.h
@ -772,9 +772,6 @@ extern int parse_sha1_header(const char *hdr, unsigned long *sizep);
|
|||||||
/* global flag to enable extra checks when accessing packed objects */
|
/* global flag to enable extra checks when accessing packed objects */
|
||||||
extern int do_check_packed_object_crc;
|
extern int do_check_packed_object_crc;
|
||||||
|
|
||||||
/* for development: log offset of pack access */
|
|
||||||
extern const char *log_pack_access;
|
|
||||||
|
|
||||||
extern int check_sha1_signature(const unsigned char *sha1, void *buf, unsigned long size, const char *type);
|
extern int check_sha1_signature(const unsigned char *sha1, void *buf, unsigned long size, const char *type);
|
||||||
|
|
||||||
extern int move_temp_to_file(const char *tmpfile, const char *filename);
|
extern int move_temp_to_file(const char *tmpfile, const char *filename);
|
||||||
|
3
config.c
3
config.c
@ -675,9 +675,6 @@ static int git_default_core_config(const char *var, const char *value)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcmp(var, "core.logpackaccess"))
|
|
||||||
return git_config_string(&log_pack_access, var, value);
|
|
||||||
|
|
||||||
if (!strcmp(var, "core.autocrlf")) {
|
if (!strcmp(var, "core.autocrlf")) {
|
||||||
if (value && !strcasecmp(value, "input")) {
|
if (value && !strcasecmp(value, "input")) {
|
||||||
if (core_eol == EOL_CRLF)
|
if (core_eol == EOL_CRLF)
|
||||||
|
@ -37,7 +37,6 @@ size_t packed_git_window_size = DEFAULT_PACKED_GIT_WINDOW_SIZE;
|
|||||||
size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
|
size_t packed_git_limit = DEFAULT_PACKED_GIT_LIMIT;
|
||||||
size_t delta_base_cache_limit = 16 * 1024 * 1024;
|
size_t delta_base_cache_limit = 16 * 1024 * 1024;
|
||||||
unsigned long big_file_threshold = 512 * 1024 * 1024;
|
unsigned long big_file_threshold = 512 * 1024 * 1024;
|
||||||
const char *log_pack_access;
|
|
||||||
const char *pager_program;
|
const char *pager_program;
|
||||||
int pager_use_color = 1;
|
int pager_use_color = 1;
|
||||||
const char *editor_program;
|
const char *editor_program;
|
||||||
|
14
sha1_file.c
14
sha1_file.c
@ -36,6 +36,9 @@ static inline uintmax_t sz_fmt(size_t s) { return s; }
|
|||||||
|
|
||||||
const unsigned char null_sha1[20];
|
const unsigned char null_sha1[20];
|
||||||
|
|
||||||
|
static const char *no_log_pack_access = "no_log_pack_access";
|
||||||
|
static const char *log_pack_access;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is meant to hold a *small* number of objects that you would
|
* This is meant to hold a *small* number of objects that you would
|
||||||
* want read_sha1_file() to be able to return, but yet you do not want
|
* want read_sha1_file() to be able to return, but yet you do not want
|
||||||
@ -1956,12 +1959,19 @@ static void write_pack_access_log(struct packed_git *p, off_t obj_offset)
|
|||||||
{
|
{
|
||||||
static FILE *log_file;
|
static FILE *log_file;
|
||||||
|
|
||||||
|
if (!log_pack_access)
|
||||||
|
log_pack_access = getenv("GIT_TRACE_PACK_ACCESS");
|
||||||
|
if (!log_pack_access)
|
||||||
|
log_pack_access = no_log_pack_access;
|
||||||
|
if (log_pack_access == no_log_pack_access)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!log_file) {
|
if (!log_file) {
|
||||||
log_file = fopen(log_pack_access, "w");
|
log_file = fopen(log_pack_access, "w");
|
||||||
if (!log_file) {
|
if (!log_file) {
|
||||||
error("cannot open pack access log '%s' for writing: %s",
|
error("cannot open pack access log '%s' for writing: %s",
|
||||||
log_pack_access, strerror(errno));
|
log_pack_access, strerror(errno));
|
||||||
log_pack_access = NULL;
|
log_pack_access = no_log_pack_access;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1992,7 +2002,7 @@ void *unpack_entry(struct packed_git *p, off_t obj_offset,
|
|||||||
int delta_stack_nr = 0, delta_stack_alloc = UNPACK_ENTRY_STACK_PREALLOC;
|
int delta_stack_nr = 0, delta_stack_alloc = UNPACK_ENTRY_STACK_PREALLOC;
|
||||||
int base_from_cache = 0;
|
int base_from_cache = 0;
|
||||||
|
|
||||||
if (log_pack_access)
|
if (log_pack_access != no_log_pack_access)
|
||||||
write_pack_access_log(p, obj_offset);
|
write_pack_access_log(p, obj_offset);
|
||||||
|
|
||||||
/* PHASE 1: drill down to the innermost base object */
|
/* PHASE 1: drill down to the innermost base object */
|
||||||
|
Loading…
Reference in New Issue
Block a user