Messages in this thread | | | Date | Tue, 29 Dec 2020 08:51:58 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH 3/3] tools/lib/fs: Cache cgroupfs mount point |
| |
Em Wed, Dec 16, 2020 at 06:05:56PM +0900, Namhyung Kim escreveu: > Currently it parses the /proc file everytime it opens a file in the > cgroupfs. Save the last result to avoid it (assuming it won't be > changed between the accesses).
Which is the most likely case, but can't we use something like inotify to detect that and bail out or warn the user?
- Arnaldo
> Signed-off-by: Namhyung Kim <namhyung@kernel.org> > --- > tools/lib/api/fs/cgroup.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/tools/lib/api/fs/cgroup.c b/tools/lib/api/fs/cgroup.c > index 262a4229e293..1573dae4259d 100644 > --- a/tools/lib/api/fs/cgroup.c > +++ b/tools/lib/api/fs/cgroup.c > @@ -8,6 +8,14 @@ > #include <string.h> > #include "fs.h" > > +struct cgroupfs_cache_entry { > + char subsys[32]; > + char mountpoint[PATH_MAX]; > +}; > + > +/* just cache last used one */ > +static struct cgroupfs_cache_entry cached; > + > int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys) > { > FILE *fp; > @@ -16,6 +24,14 @@ int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys) > char *p, *path; > char mountpoint[PATH_MAX]; > > + if (!strcmp(cached.subsys, subsys)) { > + if (strlen(cached.mountpoint) < maxlen) { > + strcpy(buf, cached.mountpoint); > + return 0; > + } > + return -1; > + } > + > fp = fopen("/proc/mounts", "r"); > if (!fp) > return -1; > @@ -75,6 +91,9 @@ int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys) > free(line); > fclose(fp); > > + strncpy(cached.subsys, subsys, sizeof(cached.subsys) - 1); > + strcpy(cached.mountpoint, mountpoint); > + > if (mountpoint[0] && strlen(mountpoint) < maxlen) { > strcpy(buf, mountpoint); > return 0; > -- > 2.29.2.684.gfbc64c5ab5-goog >
--
- Arnaldo
| |