All Virtuozzo development lists (kernel + QEMU)
 help / color / mirror / Atom feed
From: Konstantin Khorenko <khorenko@virtuozzo.com>
To: Vladimir Riabchun <vladimir.riabchun@virtuozzo.com>, devel@openvz.org
Subject: Re: [Devel] [PATCH VZ10 v9 8/8] selftests/ve: Add mount accounting selftest
Date: Fri, 25 Sep 2026 18:04:42 +0200	[thread overview]
Message-ID: <7512723f-58a1-4fa4-9e3c-0e10a1ab7954@virtuozzo.com> (raw)
In-Reply-To: <3d74194715f906abca9da70b881731a51025081e.1789491990.git.vladimir.riabchun@virtuozzo.com>

On 9/15/26 19:22, Vladimir Riabchun wrote:
> There are 6 test cases, covered in the new test:
> 1. Simple mount accouting correctness, just mount/umount.
> 2. Verification of correct limit hits and changes, including
>    negative values.
> 3. Partial mounts test, when mount limit is hit in the middle
>    of creation.
> 4. Test that enabled pseudosuper allows overuse.
> 5. Test that pseudosuper doesn't affect mount accounting.
> 6. Failcount feature verification.
> 
> https://virtuozzo.atlassian.net/browse/VSTOR-135520
> 
> Feature: per-ve failcounters
> Signed-off-by: Vladimir Riabchun <vladimir.riabchun@virtuozzo.com>
> ---
>  tools/testing/selftests/ve/.gitignore         |   1 +
>  tools/testing/selftests/ve/Makefile           |   1 +
>  .../selftests/ve/ve_mount_accounting_test.c   | 550 ++++++++++++++++++
>  tools/testing/selftests/ve/ve_selftest.h      |  21 +
>  4 files changed, 573 insertions(+)
>  create mode 100644 tools/testing/selftests/ve/ve_mount_accounting_test.c
> 

<skipped>

> + * We can't enforce workqueue flush from userspace, so instead
> + * read several times until the value is the one we expect.
> + */
> +static int wait_on_mnt_avail(FIXTURE_DATA(ve_mnt_acc) * self, int expected)
> +{
> +#define WAIT_TIMEOUT_NS		(4096UL * 1000 * 1000)
> +	char path_avail[64];
> +	int mnt_avail_nr = 0;
> +	struct timespec delay = { .tv_nsec = 1000000 };
> +
> +	snprintf(path_avail, sizeof(path_avail), "%d/ve.mnt_avail_nr", self->ctid);
> +
> +	while (delay.tv_nsec <= WAIT_TIMEOUT_NS) {
> +		if (read_s32_at(self->cgv2_fd, path_avail, &mnt_avail_nr)) {
> +			fprintf(stderr, "Failed to read from %s\n", path_avail);
> +			return 1;
> +		}
> +		if (mnt_avail_nr == expected)
> +			return 0;
> +
> +		do_rcu_barrier();
> +		if (nanosleep(&delay, NULL)) {
> +			fprintf(stderr, "nanosleep failed: %s\n", strerror(errno));
> +			return 1;
> +		}
> +		delay.tv_nsec *= 2;

  nanosleep() requires tv_nsec < 1e9 and fails with EINVAL otherwise.
  The doubling goes 1ms, 2ms, ..., 512ms, and the next step is 1024ms,
  which no longer fits tv_nsec. So the loop never gets anywhere near
  WAIT_TIMEOUT_NS: after ~1s of total sleeping the next iteration bails
  out with "nanosleep failed: Invalid argument" and returns 1, instead
  of the intended ~8s of waiting and the timeout report with the
  expected/read values.

  This defeats the purpose of the helper: on a loaded machine, where
  the counter takes a while to settle, the test fails early with a
  misleading error - exactly the case this function was reworked for
  in v9.

  Please keep the delay in a plain nanoseconds variable and normalize
  it before sleeping:

        delay.tv_sec = ns / 1000000000;
        delay.tv_nsec = ns % 1000000000;

  As a side note, tv_nsec is long, so 2048ms would overflow it on a
  32-bit build; the normalization fixes that too.

<skipped>
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

  parent reply	other threads:[~2026-09-25 16:06 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-15 17:22 [Devel] [PATCH VZ10 v9 0/8] Add per-VE failcount support Vladimir Riabchun
2026-09-15 17:22 ` [Devel] [PATCH VZ10 v9 1/8] ve/ve.{h, c}: Farewell to spaces as indents Vladimir Riabchun
2026-09-25 15:55   ` Konstantin Khorenko
2026-09-15 17:22 ` [Devel] [PATCH VZ10 v9 2/8] ve/fs: Rework per-ve mount count Vladimir Riabchun
2026-09-18 13:22   ` Vladimir Riabchun
2026-09-15 17:22 ` [Devel] [PATCH VZ10 v9 3/8] selftests/ve: Update ve_ns_owner_test Vladimir Riabchun
2026-09-18 13:28   ` Vladimir Riabchun
2026-09-15 17:22 ` [Devel] [PATCH VZ10 v9 4/8] ve: Move from global VE mounts limit to per-VE limit Vladimir Riabchun
2026-09-18 14:29   ` Vladimir Riabchun
2026-09-15 17:22 ` [Devel] [PATCH VZ10 v9 5/8] ve/ve.c: Generate VE resource accessors using macros Vladimir Riabchun
2026-09-18 14:36   ` Vladimir Riabchun
2026-09-15 17:22 ` [Devel] [PATCH VZ10 v9 6/8] ve: Introduce per-VE failcount Vladimir Riabchun
2026-09-18 14:42   ` Vladimir Riabchun
2026-09-25 16:02   ` Konstantin Khorenko
2026-09-25 16:08   ` Konstantin Khorenko
2026-09-15 17:22 ` [Devel] [PATCH VZ10 v9 7/8] ve/printk: Don't use ve log outside task context Vladimir Riabchun
2026-09-18 14:50   ` Vladimir Riabchun
2026-09-22 11:21   ` Vladimir Riabchun
2026-09-25 16:02     ` Konstantin Khorenko
2026-09-15 17:22 ` [Devel] [PATCH VZ10 v9 8/8] selftests/ve: Add mount accounting selftest Vladimir Riabchun
2026-09-18 15:06   ` Vladimir Riabchun
2026-09-25 16:04   ` Konstantin Khorenko [this message]
2026-09-16 12:30 ` [Devel] [PATCH VZ10 v9 0/8] Add per-VE failcount support Vasileios Almpanis
2026-09-16 17:30 ` Konstantin Khorenko
2026-09-18 15:07   ` Vladimir Riabchun
2026-09-18 16:02   ` Vladimir Riabchun

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=7512723f-58a1-4fa4-9e3c-0e10a1ab7954@virtuozzo.com \
    --to=khorenko@virtuozzo.com \
    --cc=devel@openvz.org \
    --cc=vladimir.riabchun@virtuozzo.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.