* [PATCH v3 0/3] samples: introduce cgroup events listeners
@ 2023-11-23 7:19 Dmitry Rokosov
2023-11-23 7:19 ` [PATCH v3 1/3] samples: introduce new samples subdir for cgroup Dmitry Rokosov
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Dmitry Rokosov @ 2023-11-23 7:19 UTC (permalink / raw)
To: hannes, mhocko, roman.gushchin, shakeelb, muchun.song, akpm
Cc: kernel, rockosov, cgroups, linux-mm, linux-kernel, bpf, Dmitry Rokosov
To begin with, this patch series relocates the cgroup example code to
the samples/cgroup directory, which is the appropriate location for such
code snippets.
Furthermore, a new memcg events listener is introduced. This
listener is a simple yet effective tool for monitoring memory events and
managing counter changes during runtime.
Additionally, as per Andrew Morton's suggestion, a helpful reminder
comment is included in the memcontrol implementation. This comment
serves to ensure that the samples code is updated whenever new events
are added.
Changes v3 since v2 at [2]:
- rename cgroup_v2_event_listener to memcg_event_listener per
Andrew's suggestion
Changes v2 since v1 at [1]:
- create new samples subdir - cgroup
- move cgroup_event_listener for cgroup v1 to samples/cgroup
- add a reminder comment to memcontrol implementation
Links:
[1] - https://lore.kernel.org/all/20231013184107.28734-1-ddrokosov@salutedevices.com/
[2] - https://lore.kernel.org/all/20231110082045.19407-1-ddrokosov@salutedevices.com/
Dmitry Rokosov (3):
samples: introduce new samples subdir for cgroup
samples/cgroup: introduce memcg memory.events listener
mm: memcg: add reminder comment for the memcg v2 events
MAINTAINERS | 1 +
mm/memcontrol.c | 4 +
samples/Kconfig | 6 +
samples/Makefile | 1 +
samples/cgroup/Makefile | 5 +
.../cgroup/cgroup_event_listener.c | 0
samples/cgroup/memcg_event_listener.c | 330 ++++++++++++++++++
tools/cgroup/Makefile | 11 -
8 files changed, 347 insertions(+), 11 deletions(-)
create mode 100644 samples/cgroup/Makefile
rename {tools => samples}/cgroup/cgroup_event_listener.c (100%)
create mode 100644 samples/cgroup/memcg_event_listener.c
delete mode 100644 tools/cgroup/Makefile
--
2.36.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v3 1/3] samples: introduce new samples subdir for cgroup 2023-11-23 7:19 [PATCH v3 0/3] samples: introduce cgroup events listeners Dmitry Rokosov @ 2023-11-23 7:19 ` Dmitry Rokosov 2023-11-23 7:19 ` [PATCH v3 2/3] samples/cgroup: introduce memcg memory.events listener Dmitry Rokosov ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Dmitry Rokosov @ 2023-11-23 7:19 UTC (permalink / raw) To: hannes, mhocko, roman.gushchin, shakeelb, muchun.song, akpm Cc: kernel, rockosov, cgroups, linux-mm, linux-kernel, bpf, Dmitry Rokosov Move the cgroup_event_listener for cgroup v1 to the samples directory. This suggestion was proposed by Andrew Morton during the discussion [1]. Links: [1] - https://lore.kernel.org/all/20231106140934.3f5d4960141562fe8da53906@linux-foundation.org/ Signed-off-by: Dmitry Rokosov <ddrokosov@salutedevices.com> --- MAINTAINERS | 1 + samples/Kconfig | 6 ++++++ samples/Makefile | 1 + samples/cgroup/Makefile | 5 +++++ {tools => samples}/cgroup/cgroup_event_listener.c | 0 tools/cgroup/Makefile | 11 ----------- 6 files changed, 13 insertions(+), 11 deletions(-) create mode 100644 samples/cgroup/Makefile rename {tools => samples}/cgroup/cgroup_event_listener.c (100%) delete mode 100644 tools/cgroup/Makefile diff --git a/MAINTAINERS b/MAINTAINERS index d516295978a4..6a0a580c34dc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -5243,6 +5243,7 @@ L: linux-mm@kvack.org S: Maintained F: mm/memcontrol.c F: mm/swap_cgroup.c +F: samples/cgroup/* F: tools/testing/selftests/cgroup/memcg_protection.m F: tools/testing/selftests/cgroup/test_kmem.c F: tools/testing/selftests/cgroup/test_memcontrol.c diff --git a/samples/Kconfig b/samples/Kconfig index bf49ed0d7362..339c8e2ee749 100644 --- a/samples/Kconfig +++ b/samples/Kconfig @@ -287,6 +287,12 @@ config SAMPLE_KMEMLEAK Build a sample program which have explicitly leaks memory to test kmemleak +config SAMPLE_CGROUP + bool "Build cgroup sample code" + depends on CGROUPS && CC_CAN_LINK && HEADERS_INSTALL + help + Build samples that demonstrate the usage of the cgroup API. + source "samples/rust/Kconfig" endif # SAMPLES diff --git a/samples/Makefile b/samples/Makefile index 0a551c2b33f4..b85fa64390c5 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -3,6 +3,7 @@ subdir-$(CONFIG_SAMPLE_AUXDISPLAY) += auxdisplay subdir-$(CONFIG_SAMPLE_ANDROID_BINDERFS) += binderfs +subdir-$(CONFIG_SAMPLE_CGROUP) += cgroup obj-$(CONFIG_SAMPLE_CONFIGFS) += configfs/ obj-$(CONFIG_SAMPLE_CONNECTOR) += connector/ obj-$(CONFIG_SAMPLE_FANOTIFY_ERROR) += fanotify/ diff --git a/samples/cgroup/Makefile b/samples/cgroup/Makefile new file mode 100644 index 000000000000..deef4530f5e7 --- /dev/null +++ b/samples/cgroup/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 + +userprogs-always-y += cgroup_event_listener + +userccflags += -I usr/include diff --git a/tools/cgroup/cgroup_event_listener.c b/samples/cgroup/cgroup_event_listener.c similarity index 100% rename from tools/cgroup/cgroup_event_listener.c rename to samples/cgroup/cgroup_event_listener.c diff --git a/tools/cgroup/Makefile b/tools/cgroup/Makefile deleted file mode 100644 index ffca068e4a76..000000000000 --- a/tools/cgroup/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Makefile for cgroup tools - -CFLAGS = -Wall -Wextra - -all: cgroup_event_listener -%: %.c - $(CC) $(CFLAGS) -o $@ $^ - -clean: - $(RM) cgroup_event_listener -- 2.36.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 2/3] samples/cgroup: introduce memcg memory.events listener 2023-11-23 7:19 [PATCH v3 0/3] samples: introduce cgroup events listeners Dmitry Rokosov 2023-11-23 7:19 ` [PATCH v3 1/3] samples: introduce new samples subdir for cgroup Dmitry Rokosov @ 2023-11-23 7:19 ` Dmitry Rokosov 2023-11-23 7:19 ` [PATCH v3 3/3] mm: memcg: add reminder comment for the memcg v2 events Dmitry Rokosov 2023-11-24 19:42 ` [PATCH v3 0/3] samples: introduce cgroup events listeners Andrew Morton 3 siblings, 0 replies; 7+ messages in thread From: Dmitry Rokosov @ 2023-11-23 7:19 UTC (permalink / raw) To: hannes, mhocko, roman.gushchin, shakeelb, muchun.song, akpm Cc: kernel, rockosov, cgroups, linux-mm, linux-kernel, bpf, Dmitry Rokosov This is a simple listener for memory events that handles counter changes in runtime. It can be set up for a specific memory cgroup v2. The output example: ===== $ /tmp/memcg_event_listener test Initialized MEMCG events with counters: MEMCG events: low: 0 high: 0 max: 0 oom: 0 oom_kill: 0 oom_group_kill: 0 Started monitoring memory events from '/sys/fs/cgroup/test/memory.events'... Received event in /sys/fs/cgroup/test/memory.events: *** 1 MEMCG oom_kill event, change counter 0 => 1 Received event in /sys/fs/cgroup/test/memory.events: *** 1 MEMCG oom_kill event, change counter 1 => 2 Received event in /sys/fs/cgroup/test/memory.events: *** 1 MEMCG oom_kill event, change counter 2 => 3 Received event in /sys/fs/cgroup/test/memory.events: *** 1 MEMCG oom_kill event, change counter 3 => 4 Received event in /sys/fs/cgroup/test/memory.events: *** 2 MEMCG max events, change counter 0 => 2 Received event in /sys/fs/cgroup/test/memory.events: *** 8 MEMCG max events, change counter 2 => 10 *** 1 MEMCG oom event, change counter 0 => 1 Received event in /sys/fs/cgroup/test/memory.events: *** 1 MEMCG oom_kill event, change counter 4 => 5 ^CExiting memcg event listener... ===== Signed-off-by: Dmitry Rokosov <ddrokosov@salutedevices.com> --- samples/cgroup/Makefile | 2 +- samples/cgroup/memcg_event_listener.c | 330 ++++++++++++++++++++++++++ 2 files changed, 331 insertions(+), 1 deletion(-) create mode 100644 samples/cgroup/memcg_event_listener.c diff --git a/samples/cgroup/Makefile b/samples/cgroup/Makefile index deef4530f5e7..526c8569707c 100644 --- a/samples/cgroup/Makefile +++ b/samples/cgroup/Makefile @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 -userprogs-always-y += cgroup_event_listener +userprogs-always-y += cgroup_event_listener memcg_event_listener userccflags += -I usr/include diff --git a/samples/cgroup/memcg_event_listener.c b/samples/cgroup/memcg_event_listener.c new file mode 100644 index 000000000000..a1667fe2489a --- /dev/null +++ b/samples/cgroup/memcg_event_listener.c @@ -0,0 +1,330 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * memcg_event_listener.c - Simple listener of memcg memory.events + * + * Copyright (c) 2023, SaluteDevices. All Rights Reserved. + * + * Author: Dmitry Rokosov <ddrokosov@salutedevices.com> + */ + +#include <err.h> +#include <errno.h> +#include <limits.h> +#include <poll.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/inotify.h> +#include <unistd.h> + +#define MEMCG_EVENTS "memory.events" + +/* Size of buffer to use when reading inotify events */ +#define INOTIFY_BUFFER_SIZE 8192 + +#define INOTIFY_EVENT_NEXT(event, length) ({ \ + (length) -= sizeof(*(event)) + (event)->len; \ + (event)++; \ +}) + +#define INOTIFY_EVENT_OK(event, length) ((length) >= (ssize_t)sizeof(*(event))) + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) + +struct memcg_counters { + long low; + long high; + long max; + long oom; + long oom_kill; + long oom_group_kill; +}; + +struct memcg_events { + struct memcg_counters counters; + char path[PATH_MAX]; + int inotify_fd; + int inotify_wd; +}; + +static void print_memcg_counters(const struct memcg_counters *counters) +{ + printf("MEMCG events:\n"); + printf("\tlow: %ld\n", counters->low); + printf("\thigh: %ld\n", counters->high); + printf("\tmax: %ld\n", counters->max); + printf("\toom: %ld\n", counters->oom); + printf("\toom_kill: %ld\n", counters->oom_kill); + printf("\toom_group_kill: %ld\n", counters->oom_group_kill); +} + +static int get_memcg_counter(char *line, const char *name, long *counter) +{ + size_t len = strlen(name); + char *endptr; + long tmp; + + if (memcmp(line, name, len)) { + warnx("Counter line %s has wrong name, %s is expected", + line, name); + return -EINVAL; + } + + /* skip the whitespace delimiter */ + len += 1; + + errno = 0; + tmp = strtol(&line[len], &endptr, 10); + if (((tmp == LONG_MAX || tmp == LONG_MIN) && errno == ERANGE) || + (errno && !tmp)) { + warnx("Failed to parse: %s", &line[len]); + return -ERANGE; + } + + if (endptr == &line[len]) { + warnx("Not digits were found in line %s", &line[len]); + return -EINVAL; + } + + if (!(*endptr == '\0' || (*endptr == '\n' && *++endptr == '\0'))) { + warnx("Further characters after number: %s", endptr); + return -EINVAL; + } + + *counter = tmp; + + return 0; +} + +static int read_memcg_events(struct memcg_events *events, bool show_diff) +{ + FILE *fp = fopen(events->path, "re"); + size_t i; + int ret = 0; + bool any_new_events = false; + char *line = NULL; + size_t len = 0; + struct memcg_counters new_counters; + struct memcg_counters *counters = &events->counters; + struct { + const char *name; + long *new; + long *old; + } map[] = { + { + .name = "low", + .new = &new_counters.low, + .old = &counters->low, + }, + { + .name = "high", + .new = &new_counters.high, + .old = &counters->high, + }, + { + .name = "max", + .new = &new_counters.max, + .old = &counters->max, + }, + { + .name = "oom", + .new = &new_counters.oom, + .old = &counters->oom, + }, + { + .name = "oom_kill", + .new = &new_counters.oom_kill, + .old = &counters->oom_kill, + }, + { + .name = "oom_group_kill", + .new = &new_counters.oom_group_kill, + .old = &counters->oom_group_kill, + }, + }; + + if (!fp) { + warn("Failed to open memcg events file %s", events->path); + return -EBADF; + } + + /* Read new values for memcg counters */ + for (i = 0; i < ARRAY_SIZE(map); ++i) { + ssize_t nread; + + errno = 0; + nread = getline(&line, &len, fp); + if (nread == -1) { + if (errno) { + warn("Failed to read line for counter %s", + map[i].name); + ret = -EIO; + goto exit; + } + + break; + } + + ret = get_memcg_counter(line, map[i].name, map[i].new); + if (ret) { + warnx("Failed to get counter value from line %s", line); + goto exit; + } + } + + for (i = 0; i < ARRAY_SIZE(map); ++i) { + long diff; + + if (*map[i].new > *map[i].old) { + diff = *map[i].new - *map[i].old; + + if (show_diff) + printf("*** %ld MEMCG %s event%s, " + "change counter %ld => %ld\n", + diff, map[i].name, + (diff == 1) ? "" : "s", + *map[i].old, *map[i].new); + + *map[i].old += diff; + any_new_events = true; + } + } + + if (show_diff && !any_new_events) + printf("*** No new untracked memcg events available\n"); + +exit: + free(line); + fclose(fp); + + return ret; +} + +static void process_memcg_events(struct memcg_events *events, + struct inotify_event *event) +{ + int ret; + + if (events->inotify_wd != event->wd) { + warnx("Unknown inotify event %d, should be %d", event->wd, + events->inotify_wd); + return; + } + + printf("Received event in %s:\n", events->path); + + if (!(event->mask & IN_MODIFY)) { + warnx("No IN_MODIFY event, skip it"); + return; + } + + ret = read_memcg_events(events, /* show_diff = */true); + if (ret) + warnx("Can't read memcg events"); +} + +static void monitor_events(struct memcg_events *events) +{ + struct pollfd fds[1]; + int ret; + + printf("Started monitoring memory events from '%s'...\n", events->path); + + fds[0].fd = events->inotify_fd; + fds[0].events = POLLIN; + + for (;;) { + ret = poll(fds, ARRAY_SIZE(fds), -1); + if (ret < 0 && errno != EAGAIN) + err(EXIT_FAILURE, "Can't poll memcg events (%d)", ret); + + if (fds[0].revents & POLLERR) + err(EXIT_FAILURE, "Got POLLERR during monitor events"); + + if (fds[0].revents & POLLIN) { + struct inotify_event *event; + char buffer[INOTIFY_BUFFER_SIZE]; + ssize_t length; + + length = read(fds[0].fd, buffer, INOTIFY_BUFFER_SIZE); + if (length <= 0) + continue; + + event = (struct inotify_event *)buffer; + while (INOTIFY_EVENT_OK(event, length)) { + process_memcg_events(events, event); + event = INOTIFY_EVENT_NEXT(event, length); + } + } + } +} + +static int initialize_memcg_events(struct memcg_events *events, + const char *cgroup) +{ + int ret; + + memset(events, 0, sizeof(struct memcg_events)); + + ret = snprintf(events->path, PATH_MAX, + "/sys/fs/cgroup/%s/memory.events", cgroup); + if (ret >= PATH_MAX) { + warnx("Path to cgroup memory.events is too long"); + return -EMSGSIZE; + } else if (ret < 0) { + warn("Can't generate cgroup event full name"); + return ret; + } + + ret = read_memcg_events(events, /* show_diff = */false); + if (ret) { + warnx("Failed to read initial memcg events state (%d)", ret); + return ret; + } + + events->inotify_fd = inotify_init(); + if (events->inotify_fd < 0) { + warn("Failed to setup new inotify device"); + return -EMFILE; + } + + events->inotify_wd = inotify_add_watch(events->inotify_fd, + events->path, IN_MODIFY); + if (events->inotify_wd < 0) { + warn("Couldn't add monitor in dir %s", events->path); + return -EIO; + } + + printf("Initialized MEMCG events with counters:\n"); + print_memcg_counters(&events->counters); + + return 0; +} + +static void cleanup_memcg_events(struct memcg_events *events) +{ + inotify_rm_watch(events->inotify_fd, events->inotify_wd); + close(events->inotify_fd); +} + +int main(int argc, const char **argv) +{ + struct memcg_events events; + ssize_t ret; + + if (argc != 2) + errx(EXIT_FAILURE, "Usage: %s <cgroup>", argv[0]); + + ret = initialize_memcg_events(&events, argv[1]); + if (ret) + errx(EXIT_FAILURE, "Can't initialize memcg events (%zd)", ret); + + monitor_events(&events); + + cleanup_memcg_events(&events); + + printf("Exiting memcg event listener...\n"); + + return EXIT_SUCCESS; +} -- 2.36.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 3/3] mm: memcg: add reminder comment for the memcg v2 events 2023-11-23 7:19 [PATCH v3 0/3] samples: introduce cgroup events listeners Dmitry Rokosov 2023-11-23 7:19 ` [PATCH v3 1/3] samples: introduce new samples subdir for cgroup Dmitry Rokosov 2023-11-23 7:19 ` [PATCH v3 2/3] samples/cgroup: introduce memcg memory.events listener Dmitry Rokosov @ 2023-11-23 7:19 ` Dmitry Rokosov 2023-11-24 19:42 ` [PATCH v3 0/3] samples: introduce cgroup events listeners Andrew Morton 3 siblings, 0 replies; 7+ messages in thread From: Dmitry Rokosov @ 2023-11-23 7:19 UTC (permalink / raw) To: hannes, mhocko, roman.gushchin, shakeelb, muchun.song, akpm Cc: kernel, rockosov, cgroups, linux-mm, linux-kernel, bpf, Dmitry Rokosov To maintain the correct state, it is important to ensure that events for the memory cgroup v2 are aligned with the sample cgroup codes. Signed-off-by: Dmitry Rokosov <ddrokosov@salutedevices.com> --- mm/memcontrol.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index e8ca4bdcb03c..a75c4584f58f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -6555,6 +6555,10 @@ static ssize_t memory_max_write(struct kernfs_open_file *of, return nbytes; } +/* + * Note: don't forget to update the 'samples/cgroup/memcg_event_listener' + * if any new events become available. + */ static void __memory_events_show(struct seq_file *m, atomic_long_t *events) { seq_printf(m, "low %lu\n", atomic_long_read(&events[MEMCG_LOW])); -- 2.36.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/3] samples: introduce cgroup events listeners 2023-11-23 7:19 [PATCH v3 0/3] samples: introduce cgroup events listeners Dmitry Rokosov ` (2 preceding siblings ...) 2023-11-23 7:19 ` [PATCH v3 3/3] mm: memcg: add reminder comment for the memcg v2 events Dmitry Rokosov @ 2023-11-24 19:42 ` Andrew Morton 2023-11-24 20:06 ` Dmitry Rokosov 3 siblings, 1 reply; 7+ messages in thread From: Andrew Morton @ 2023-11-24 19:42 UTC (permalink / raw) To: Dmitry Rokosov Cc: hannes, mhocko, roman.gushchin, shakeelb, muchun.song, kernel, rockosov, cgroups, linux-mm, linux-kernel, bpf On Thu, 23 Nov 2023 10:19:42 +0300 Dmitry Rokosov <ddrokosov@salutedevices.com> wrote: > To begin with, this patch series relocates the cgroup example code to > the samples/cgroup directory, which is the appropriate location for such > code snippets. butbut. Didn't we decide to do s/cgroup/memcg/ throughout? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/3] samples: introduce cgroup events listeners 2023-11-24 19:42 ` [PATCH v3 0/3] samples: introduce cgroup events listeners Andrew Morton @ 2023-11-24 20:06 ` Dmitry Rokosov 2023-11-25 8:07 ` Dmitry Rokosov 0 siblings, 1 reply; 7+ messages in thread From: Dmitry Rokosov @ 2023-11-24 20:06 UTC (permalink / raw) To: Andrew Morton Cc: hannes, mhocko, roman.gushchin, shakeelb, muchun.song, kernel, rockosov, cgroups, linux-mm, linux-kernel, bpf On Fri, Nov 24, 2023 at 11:42:30AM -0800, Andrew Morton wrote: > On Thu, 23 Nov 2023 10:19:42 +0300 Dmitry Rokosov <ddrokosov@salutedevices.com> wrote: > > > To begin with, this patch series relocates the cgroup example code to > > the samples/cgroup directory, which is the appropriate location for such > > code snippets. > > butbut. Didn't we decide to do s/cgroup/memcg/ throughout? I believe the samples directory should be named "samples/cgroup" instead of "memcg" because the cgroup v1 event listener cannot be renamed to "memcg" due to the common naming of cgroup v1 event_control (this sample uses that control to access eventfd). Additionally, I think it would be a good idea to add the new samples for cgroup helpers in that directory. That's why I have only renamed the new memcg listener. -- Thank you, Dmitry ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 0/3] samples: introduce cgroup events listeners 2023-11-24 20:06 ` Dmitry Rokosov @ 2023-11-25 8:07 ` Dmitry Rokosov 0 siblings, 0 replies; 7+ messages in thread From: Dmitry Rokosov @ 2023-11-25 8:07 UTC (permalink / raw) To: Andrew Morton Cc: hannes, mhocko, roman.gushchin, shakeelb, muchun.song, kernel, rockosov, cgroups, linux-mm, linux-kernel, bpf Andrew, On Fri, Nov 24, 2023 at 11:06:33PM +0300, Dmitry Rokosov wrote: > On Fri, Nov 24, 2023 at 11:42:30AM -0800, Andrew Morton wrote: > > On Thu, 23 Nov 2023 10:19:42 +0300 Dmitry Rokosov <ddrokosov@salutedevices.com> wrote: > > > > > To begin with, this patch series relocates the cgroup example code to > > > the samples/cgroup directory, which is the appropriate location for such > > > code snippets. > > > > butbut. Didn't we decide to do s/cgroup/memcg/ throughout? > > I believe the samples directory should be named "samples/cgroup" instead > of "memcg" because the cgroup v1 event listener cannot be renamed to > "memcg" due to the common naming of cgroup v1 event_control (this sample > uses that control to access eventfd). > > Additionally, I think it would be a good idea to add the new samples for > cgroup helpers in that directory. > > That's why I have only renamed the new memcg listener. I looked into this more deeply. And yes, the old cgroup.event_control has the common name, but it's used in the memcg implementation only. So, if we plan to introduce new samples for cgroup, I suggest we use the following naming convention: 1) Directory: samples/cgroup 2) V1 sample: memcg_v1_event_listener 3) V2 sample: memcg_v2_event_listener Please let me know what you think about this. If it's okay with you, I will prepare the v4 version with the above changes. I would appreciate any feedback on that!" -- Thank you, Dmitry ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-11-25 8:07 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-11-23 7:19 [PATCH v3 0/3] samples: introduce cgroup events listeners Dmitry Rokosov 2023-11-23 7:19 ` [PATCH v3 1/3] samples: introduce new samples subdir for cgroup Dmitry Rokosov 2023-11-23 7:19 ` [PATCH v3 2/3] samples/cgroup: introduce memcg memory.events listener Dmitry Rokosov 2023-11-23 7:19 ` [PATCH v3 3/3] mm: memcg: add reminder comment for the memcg v2 events Dmitry Rokosov 2023-11-24 19:42 ` [PATCH v3 0/3] samples: introduce cgroup events listeners Andrew Morton 2023-11-24 20:06 ` Dmitry Rokosov 2023-11-25 8:07 ` Dmitry Rokosov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox