mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-18 10:04:20 +03:00
Count only readable size for memlock stats.
As we mlock() only readable pages, makes statistics only for readable bytes.
This commit is contained in:
parent
3f67b36b35
commit
5de52e34f0
@ -80,12 +80,7 @@ static FILE *_mapsh;
|
|||||||
static char _procselfmaps[PATH_MAX] = "";
|
static char _procselfmaps[PATH_MAX] = "";
|
||||||
#define SELF_MAPS "/self/maps"
|
#define SELF_MAPS "/self/maps"
|
||||||
|
|
||||||
struct maps_stats {
|
static size_t _mstats; /* statistic for maps locking */
|
||||||
size_t r_size;
|
|
||||||
size_t w_size;
|
|
||||||
size_t x_size;
|
|
||||||
};
|
|
||||||
static struct maps_stats _mstats; /* statistic for maps locking */
|
|
||||||
|
|
||||||
static void _touch_memory(void *mem, size_t size)
|
static void _touch_memory(void *mem, size_t size)
|
||||||
{
|
{
|
||||||
@ -125,7 +120,7 @@ static void _release_memory(void)
|
|||||||
* format described in kernel/Documentation/filesystem/proc.txt
|
* format described in kernel/Documentation/filesystem/proc.txt
|
||||||
*/
|
*/
|
||||||
static int _maps_line(struct cmd_context *cmd, lvmlock_t lock,
|
static int _maps_line(struct cmd_context *cmd, lvmlock_t lock,
|
||||||
const char* line, struct maps_stats* mstats)
|
const char* line, size_t* mstats)
|
||||||
{
|
{
|
||||||
const struct config_node *cn;
|
const struct config_node *cn;
|
||||||
struct config_value *cv;
|
struct config_value *cv;
|
||||||
@ -175,13 +170,7 @@ static int _maps_line(struct cmd_context *cmd, lvmlock_t lock,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fr == 'r')
|
*mstats += sz;
|
||||||
mstats->r_size += sz;
|
|
||||||
if (fw == 'w')
|
|
||||||
mstats->w_size += sz;
|
|
||||||
if (fx == 'x')
|
|
||||||
mstats->x_size += sz;
|
|
||||||
|
|
||||||
log_debug("%s %10ldKiB %12lx - %12lx %c%c%c%c %s",
|
log_debug("%s %10ldKiB %12lx - %12lx %c%c%c%c %s",
|
||||||
(lock == LVM_MLOCK) ? "mlock" : "munlock",
|
(lock == LVM_MLOCK) ? "mlock" : "munlock",
|
||||||
((long)sz + 1023) / 1024, from, to, fr, fw, fx, fp, line + pos);
|
((long)sz + 1023) / 1024, from, to, fr, fw, fx, fp, line + pos);
|
||||||
@ -201,7 +190,7 @@ static int _maps_line(struct cmd_context *cmd, lvmlock_t lock,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _memlock_maps(struct cmd_context *cmd, lvmlock_t lock, struct maps_stats *mstats)
|
static int _memlock_maps(struct cmd_context *cmd, lvmlock_t lock, size_t *mstats)
|
||||||
{
|
{
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
size_t len;
|
size_t len;
|
||||||
@ -228,19 +217,18 @@ static int _memlock_maps(struct cmd_context *cmd, lvmlock_t lock, struct maps_st
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Reset statistic counters */
|
/* Reset statistic counters */
|
||||||
memset(mstats, 0, sizeof(*mstats));
|
*mstats = 0;
|
||||||
rewind(_mapsh);
|
rewind(_mapsh);
|
||||||
|
|
||||||
while ((n = getline(&line, &len, _mapsh)) != -1) {
|
while ((n = getline(&line, &len, _mapsh)) != -1) {
|
||||||
line[n > 0 ? n - 1 : 0] = '\0'; /* remove \n */
|
line[n > 0 ? n - 1 : 0] = '\0'; /* remove \n */
|
||||||
if (!(ret = _maps_line(cmd, lock, line, mstats)))
|
if (!_maps_line(cmd, lock, line, mstats))
|
||||||
break;
|
ret = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(line);
|
free(line);
|
||||||
|
|
||||||
log_debug("Mapped sizes: r=%ld, w=%ld, x=%ld",
|
log_debug("Mapped size: %ld", (long)*mstats);
|
||||||
(long)mstats->r_size, (long)mstats->w_size, (long)mstats->x_size);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -288,7 +276,7 @@ static void _lock_mem(struct cmd_context *cmd)
|
|||||||
|
|
||||||
static void _unlock_mem(struct cmd_context *cmd)
|
static void _unlock_mem(struct cmd_context *cmd)
|
||||||
{
|
{
|
||||||
struct maps_stats unlock_mstats;
|
size_t unlock_mstats;
|
||||||
|
|
||||||
log_very_verbose("Unlocking memory");
|
log_very_verbose("Unlocking memory");
|
||||||
|
|
||||||
@ -299,10 +287,9 @@ static void _unlock_mem(struct cmd_context *cmd)
|
|||||||
if (fclose(_mapsh))
|
if (fclose(_mapsh))
|
||||||
log_sys_error("fclose", _procselfmaps);
|
log_sys_error("fclose", _procselfmaps);
|
||||||
|
|
||||||
if (_mstats.r_size < unlock_mstats.r_size)
|
if (_mstats < unlock_mstats)
|
||||||
log_error(INTERNAL_ERROR "Maps lock(%ld,%ld,%ld) < unlock(%ld,%ld,%ld)",
|
log_error(INTERNAL_ERROR "Maps lock %ld < unlock %ld",
|
||||||
(long)_mstats.r_size, (long)_mstats.w_size, (long)_mstats.x_size,
|
(long)_mstats, (long)unlock_mstats);
|
||||||
(long)unlock_mstats.r_size, (long)unlock_mstats.w_size, (long)unlock_mstats.x_size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setpriority(PRIO_PROCESS, 0, _priority))
|
if (setpriority(PRIO_PROCESS, 0, _priority))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user