From: "Theodore Ts'o" <tytso@mit.edu>
To: Lukas Czerner <lczerner@redhat.com>
Cc: Ext4 Developers List <linux-ext4@vger.kernel.org>,
darrick.wong@oracle.com
Subject: Re: [PATCH 8/9] e2scrub_all: refactor device probe loop
Date: Thu, 21 Mar 2019 14:24:56 -0400 [thread overview]
Message-ID: <20190321182456.GG9434@mit.edu> (raw)
In-Reply-To: <20190321155703.ili5ghofgm3hneq5@work>
On Thu, Mar 21, 2019 at 04:57:03PM +0100, Lukas Czerner wrote:
>
> hence I get mountpoin where the volume is mounted and the device where
> it is not. That's what we need right ?
Well, except by default we need to be able to determine whether or not
the volume is mounted, since by default e2scrub_all only runs on
mounted file systems (unless -A) is specified.
What I'm now doing is this, which I think is the simplest way to do things:
ls_scan_targets() {
for NAME in $(lvs -o lv_path --noheadings \
-S "lv_active=active,lv_role=public,lv_role!=snapshot,vg_free>${snap_size_mb}") ; do
# Skip non-ext[234]
case "$(blkid -o value -s TYPE ${NAME})" in
ext[234]) ;;
*) continue;;
esac
if [ "${scrub_all}" -eq 1 ]; then
echo ${NAME}
else
MOUNTPOINT="$(lsblk -o MOUNTPOINT --noheadings ${NAME})"
if [ -n "${MOUNTPOINT}" ]; then
echo "${MOUNTPOINT}"
fi
fi
done | sort | uniq
}
This way we only bother to fetch the mountpoints for ext[234] file
systems, and only when -A is _not_ specified.
In fact, I'm actually thinking that we should just *always* just
return the device pathname in which case we can make this even
simpler:
ls_scan_targets() {
for NAME in $(lvs -o lv_path --noheadings \
-S "lv_active=active,lv_role=public,lv_role!=snapshot,vg_free>${snap_size_mb}") ; do
# Skip non-ext[234]
case "$(blkid -o value -s TYPE ${NAME})" in
ext[234]) ;;
*) continue;;
esac
if [ "${scrub_all}" -eq 1 ] ||
[ -n "$(lsblk -o MOUNTPOINT --noheadings ${NAME})" ]; then
echo ${NAME}
fi
done | sort | uniq
}
This means that we always run e2scrub on the device name, which in
some cases might result in some ugliness, e.g.
systemctl start e2scrub@-dev-lambda-test\\x2d1k
But I think I can live with that. (However, the fact that
systemd-escape will create Unicode characters which themselves have to
be escaped is, well, sad....)
What do you see on your system when you benchmark the above? The fact
that we only determine the mountpoints on ext[234] file systems should
save some time. We are sheling out to blkid for each device but
that's probably not a huge overhead.
My before (v1.45.0 plus support for -n so we can have comparable
times) and after times (with all of the changes):
0.16user 0.15system 0:00.83elapsed 38%CPU (0avgtext+0avgdata 13384maxresident)k
0.12user 0.11system 0:00.36elapsed 64%CPU (0avgtext+0avgdata 13420maxresident)k
Your one-linder is a bit faster:
0.03user 0.04system 0:00.23elapsed 31%CPU (0avgtext+0avgdata 13316maxresident)k
But if we need to determine thick versus thin LV's so we can
potentially do thin snapshots, a bunch of these optimizations are
going to go away anyway. And realistically, so long as we're fast in
the "no LV's" and "LV's exist but there is no free space" cases, that
should avoid most user complaints, since if we *do* trigger e2scrub,
the cost of running ls_scan_targets will be in the noise.
- Ted
next prev parent reply other threads:[~2019-03-21 18:25 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-21 2:02 [PATCH 1/9] e2scrub: check to make sure lvm2 is installed Theodore Ts'o
2019-03-21 2:02 ` [PATCH 2/9] debian: drop lvm2 from the recommends line Theodore Ts'o
2019-03-21 3:57 ` Darrick J. Wong
2019-03-21 2:02 ` [PATCH 3/9] Fix "make install-strip" Theodore Ts'o
2019-03-21 2:02 ` [PATCH 4/9] e2scrub: fix up "make install-strip" support Theodore Ts'o
2019-03-21 2:02 ` [PATCH 5/9] e2fscrub: add the -n option which shows what commands e2scrub would execute Theodore Ts'o
2019-03-21 3:59 ` Darrick J. Wong
2019-03-21 10:57 ` Lukas Czerner
2019-03-21 14:32 ` Theodore Ts'o
2019-03-21 2:02 ` [PATCH 6/9] e2scrub_all: add the -n option which shows what e2scrub_all would do Theodore Ts'o
2019-03-21 4:01 ` Darrick J. Wong
2019-03-21 2:02 ` [PATCH 7/9] e2scrub_all: make sure there's enough free space for a snapshot Theodore Ts'o
2019-03-21 4:02 ` Darrick J. Wong
2019-03-21 11:18 ` Lukas Czerner
2019-03-21 14:26 ` Theodore Ts'o
2019-03-21 2:02 ` [PATCH 8/9] e2scrub_all: refactor device probe loop Theodore Ts'o
2019-03-21 4:05 ` Darrick J. Wong
2019-03-21 10:27 ` Lukas Czerner
2019-03-21 14:31 ` Theodore Ts'o
2019-03-21 15:57 ` Lukas Czerner
2019-03-21 18:24 ` Theodore Ts'o [this message]
2019-03-21 20:17 ` Lukas Czerner
2019-03-21 20:48 ` Theodore Ts'o
2019-03-21 21:14 ` Lukas Czerner
2019-03-21 22:04 ` Theodore Ts'o
2019-03-21 22:08 ` Theodore Ts'o
2019-03-22 9:38 ` Lukas Czerner
2019-03-21 20:09 ` Andreas Dilger
2019-03-21 17:48 ` Theodore Ts'o
2019-03-21 19:49 ` Lukas Czerner
2019-03-21 20:23 ` Theodore Ts'o
2019-03-21 16:10 ` Lukas Czerner
2019-03-21 2:02 ` [PATCH 9/9] e2scrub,e2scrub_all: print a (more understandable) error if not run as root Theodore Ts'o
2019-03-21 4:04 ` Darrick J. Wong
2019-03-21 11:36 ` Lukas Czerner
2019-03-21 14:40 ` Theodore Ts'o
2019-03-21 3:55 ` [PATCH 1/9] e2scrub: check to make sure lvm2 is installed Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2019-03-21 20:25 [PATCH -v2 0/9] e2fsprogs: e2scrub cleanups Theodore Ts'o
2019-03-21 20:25 ` [PATCH 8/9] e2scrub_all: refactor device probe loop Theodore Ts'o
2019-03-21 20:55 ` Lukas Czerner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190321182456.GG9434@mit.edu \
--to=tytso@mit.edu \
--cc=darrick.wong@oracle.com \
--cc=lczerner@redhat.com \
--cc=linux-ext4@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).