From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id B120080024 for ; Fri, 28 Aug 2026 16:54:00 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 67SGqd5Q011443; Fri, 28 Aug 2026 19:52:41 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67SGqd5Q011443 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="oWVLZiex" Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 67SGqbZ1011439 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 28 Aug 2026 19:52:37 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67SGqbZ1011439 Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-c15ceb17a28so84353466b.3 for ; Fri, 28 Aug 2026 09:52:37 -0700 (PDT) X-Forwarded-Encrypted: i=3; AHgh+RoNSBFDyA/A6D+2AuMF6FSQ9jhnJ9kK/q7lSVR9EWAeles6wPC4UKvTrlLp+QA0B6qseoaqQg==@openvz.org X-Gm-Message-State: AFuF++l52fAbQpJwGv5NLHZPAd72oilM9abuNbAgQMiNg2eywEn9yCtv gatPItegt8BV1XHC/K91Fk5DJbXI1T2bfHz699iqHc6dh5jG+UdHWDd/ya+yow6d7WmlM5v6dpp pbTuJytHotc/GtRa/N/DdOpWfKx9JlyxyP6n+0un5cQWJXGwJIRvUQw== X-Gm-Gg: AR+sD13GPqiC27ITYgJ0dxEbI7xzi0tEzPamwPDvsbhBbLQujoHsAIG6QD15JeBACcJ vntiz26YHByqq2KMoOZQA3gVsigEQyptqQD0cc/SXz6CuXSZuKyaips3PfdcFpMvn8X8telt7wb tsaSAHRw3jDcgGXaBU59Z3LK8ThzRV4cyKfZ3nYB436A+gj0Ng53dK/LhT4UhVyC85DcVquDGn3 oGxEwlqCK3Ctdw9sfPeHC3sgIfKRUJDs66TaFfCMLXa0JS6wGgGXM8Lt/yMUjRDsxzw6N5uqUEM n1cSwNiFCSAr2bC7RBe6ix63QOcRwovVlSGefCHoJENLEQ441le72zZ81FcgvWq4v0TD+ueVJ2B fPKahgSRuQOkofNOkM59A5H3VC+Fi8GM/BdyXCXEVdDWhE8ioM453fIpPHTsR4LdbhLRcSVsVoh mylMAYQB49yomxn2JbHU8JVLEQkQ== X-Received: by 2002:a17:907:3e8d:b0:c25:2c70:50ed with SMTP id a640c23a62f3a-c2556bad5c9mr640518766b.5.1787935956817; Fri, 28 Aug 2026 09:52:36 -0700 (PDT) X-Received: by 2002:a17:907:3e8d:b0:c25:2c70:50ed with SMTP id a640c23a62f3a-c2556bad5c9mr640512366b.5.1787935956229; Fri, 28 Aug 2026 09:52:36 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1787935956; cv=pass; d=google.com; s=arc-20260327; b=fMIynOWUZnZ9KYz468859RhKKX4Uc4b7IFjEQkjZsdZAPxIILSkJD3i4/RGMI3iV+7 7wUfqri+NU6lEj2pBhPAuth39CGyfpQjE9+33PK6vcw3PVgNkB5Ixx+7Aj+2GyDiTro2 AcBT5ObB7Pq6h8uSOcrhRySr2qMCio2m5WiaJ1o7+MK8/HGOaPRfM/6vlYgCX0mEd38H p/lGPO3mENsB8ILVaT+i9j/c4p2ofBGZeDJJcnhg8mFT7WNLdDnMdRbSUSIE6AzDYaAv rvDt75LafpUOSgKojQMbR2dTpDyBUt6YtigOavab1iLRBO0oa6Msh3bTtAKGmfu/+25e eOkQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-transfer-encoding:in-reply-to:from :content-language:references:cc:to:subject:user-agent:date :message-id:dkim-signature; bh=RDYNyx0eP9+OBWJ6LFTR/8ePZOgDM6YXESBuTq18Uro=; fh=EhHmbT8aGQtKmWipsj45uA+VHZ5MmW+5n6z2urKiEag=; b=HRy3nvtvSkeYjh5eCowHnFCCmpkCkN4Simt0JOj3F0gKVbvH8qeLXG7LEc5Zt9gnOp 9dBzgCBz0UJ7To6+kWr4Ofwkyf4Wc8/jom+ndM+wYYQ4wnLeF9NtRNTgpwUUiDd/Y1bn C4W0y7JztEkCqGyFRBctPyrj7Dfj2lLNfeJV+T3r530mWbxkrSXK685hG6XiDkgxzJ33 Bl+13FDMVhVGSRTp8Zq0dCP54OoXNqdBsNJ+P48irYopXc65Z96tdQXUj+UXBhtcaywk tRKN/ySguDTe1ilQ/xVN4vZmmAVlQRAeqUe9qizBG9pJ5bDbJEtmj4YJHlDoq63XN0Lv rDNQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=oWVLZiex; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of ptikhomirov@virtuozzo.com designates 2a01:111:f403:c207::3 as permitted sender) smtp.mailfrom=ptikhomirov@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazlp170110003.outbound.protection.outlook.com. [2a01:111:f403:c207::3]) by mx.google.com with ESMTPS id a640c23a62f3a-c255ee278f2si171491866b.69.2026.08.28.09.52.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 09:52:36 -0700 (PDT) Received-SPF: pass (google.com: domain of ptikhomirov@virtuozzo.com designates 2a01:111:f403:c207::3 as permitted sender) client-ip=2a01:111:f403:c207::3; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=oWVLZiex; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of ptikhomirov@virtuozzo.com designates 2a01:111:f403:c207::3 as permitted sender) smtp.mailfrom=ptikhomirov@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QQDmwGRhcgMRxXL3p4q4H6Vx0fLYvAEQQj0FGFMSCfMornQcKCuXli/9kesmqLQcgQaYuMpFKGTM1Q088KCrX7vu7lmy2G1SGM5SWJfd4JKy1Ms/sAei70IVK5jEMCTzsWZmwInhmnFHZPntJVJjoyYmTuxevgQbxsIqClCph6szLmtzV5g3B1W6DDEnlNvUV9jZ+ex3G9UcYykYk3TJ8p84pXS7Z+wMlJtH5EqFX5zJU0MwUU7mhQW2o/rpz8r09nB0BZCyEvt5xHoNeMfKHSOL4dCSLYMwfJzWw9NIFsTAtZhO2EYnPjxo8eqA/f6/N6gcFCt7ogdxeYrPuba8Bg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RDYNyx0eP9+OBWJ6LFTR/8ePZOgDM6YXESBuTq18Uro=; b=qJ6oaZnwtFF2DtFfEcCp6OqW0Wx79u2a5cQZj+dtepSpeZOhQtLN1Szq9irrqklsZQX1EWSI+CGUAhe+oIxxkrEKQc7QMeIUUEfVrjtMAOGK+PddAP7Q55crv2ryjkXUt5NLLpq1OetD5OB0FV8Z1tIaGv8Ep0L9joRwSMKa3NCqRYUFX8uA107CuEC+K652VtoAFC1ELck42457cybzA2S4t/OpFE6qykct/kO0ffu684GzVIE7xaiLz3X22BzON9+BOwjMb0AxK4eSIPtOV+PG8UEGaMIvXZru15TZIV2Ik1A9h/xivFEpH/2Q0qQYPnuJEPAi1LaEPNWmVM5LPQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RDYNyx0eP9+OBWJ6LFTR/8ePZOgDM6YXESBuTq18Uro=; b=oWVLZiexScRL+zMEQvbAFaEtYktJc3c8YH8Sbh4juaAn0AfC8/9Mtb+s8HIr5jA/jMKgO3yUZbe1FmfIuSD0eNhbvQ1X4jd09l01n+kUzPxAb7H/18rXvqva5kGkO8rGsdlL1VDusg8Ul1sIknrKpdcLfptE0HJ0ivrQBMx09mWE5ZsqFjU1V4LlPOBfkX2/mIgr436FzN/L1W7mQIAyGLHRnWNyuq/yj14kBsLEFV5c0lVjyox+RoWLMGw1U1bzozxwV7Idl4pS0UjTv0UmXA+Cz+26EQyVNViifmDlizHVFO14BLNq2/F4rNw18RUZGXXB08FWSfASJIpkuDbwKw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AM0PR08MB11804.eurprd08.prod.outlook.com (2603:10a6:20b:747::14) by DB9PR08MB7796.eurprd08.prod.outlook.com (2603:10a6:10:39b::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.8; Fri, 28 Aug 2026 16:52:33 +0000 Received: from AM0PR08MB11804.eurprd08.prod.outlook.com ([fe80::bf46:f137:f6d2:5b3a]) by AM0PR08MB11804.eurprd08.prod.outlook.com ([fe80::bf46:f137:f6d2:5b3a%7]) with mapi id 15.21.0382.007; Fri, 28 Aug 2026 16:52:33 +0000 Message-ID: Date: Fri, 28 Aug 2026 18:52:32 +0200 User-Agent: Mozilla Thunderbird To: Vladimir Riabchun , devel@openvz.org References: <3157350f84cd823095f282390f45177b563a5604.1787579160.git.vladimir.riabchun@virtuozzo.com> Content-Language: en-US From: Pavel Tikhomirov In-Reply-To: <3157350f84cd823095f282390f45177b563a5604.1787579160.git.vladimir.riabchun@virtuozzo.com> X-ClientProxiedBy: BE1P281CA0052.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:23::6) To AM0PR08MB11804.eurprd08.prod.outlook.com (2603:10a6:20b:747::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR08MB11804:EE_|DB9PR08MB7796:EE_ X-MS-Office365-Filtering-Correlation-Id: 26a8b6dd-1f99-4ac2-b6bd-08df0524c15d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|10070799003|366016|23010399003|1800799024|376014|6133799003|10067099003|4143699003|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: noMLGQvQchkIgMZ9f7jYyI7/y1bsb8UqmpZRLqD20IvysCYuUY7qW1TEzpeqxdaO8A3v/oNQctlUH61JUd/2F/6Aabz137uIdIt5b9ayh14MLLyvFsYLMesodybu2mDOoOv21EYPdakol2aQQHuVO+s00MLI7/pun+fJoHSdyL3JOuYE8mXsgXFGVWmZKmZnEMsQXuRCgZzajy8cj9IWRbR5dBNi+W/vROuX+lNY0J66pMTSNwDkSR4kfxTQpkpwvm+Bsgd9u5OhaO7mWxGnAcJaxpGGGOCsi8w+9V/ZqYHZU5Ct5/dR1JhAW5zXzx48OCcjwIPaoZJtnAEfqi9STO7R5O+gf/6nhk37kjaSMT4bVFv3zPvJhwV2jJuY4XvI2h4LBkOy4FjKl5su66Yj5E+oZqT5OxdZuc6WaVSGnBmNu+HNJt40/1bRs4rjXnK9HMdzQI0SY+UGfRbAtTNuAxpFfsYNfFcY3D/Zo0oKby7nnm/lD1LGn1Brx6Ey9mRmtN8YRV2kOTcVoQTEV6VUKNUd+odGogdryIYxl2e5UlydQUsE7Gjjcc0/pFRHDEznb2ilw1fzvvuRYPV06iekNuBJNZuTCi0/yjeV1PKD+zGf4gb4vZnqL7EJIfXp/r3c X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR08MB11804.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(10070799003)(366016)(23010399003)(1800799024)(376014)(6133799003)(10067099003)(4143699003)(56012099006)(18002099003)(22082099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aTlyd1U4S3hGemltTVE2ZGJGMVA4MUtGOEVoQ2ZFdWdDdC9RUWkyMWtnZFdp?= =?utf-8?B?WURqSFdXanJzb3ZWaVpPOU55NTR1bnZBMkZCTUc1RHpEenh3M3BsUjIwRUFF?= =?utf-8?B?NDcvTUNTWGlKbmxrNURUQ0szdXlqNUJpT2h4dmJmZXpQcUxYNm5UWHRCOFdr?= =?utf-8?B?M1FCRjYxc0FFSHQ1TkhkYm5GVUxHVDFSOTQ0VGszMU4rdXhoaVZyc3VzMlJH?= =?utf-8?B?NnNjTnJFbzVFVE1Nc1pkWVk2S256Q0plbWdqRmdzZWFaQjRyMDJiOFBRUGxS?= =?utf-8?B?NXVMT1lrTlJ5cmNsZWwrdU5tQThTN2hxWWV6bVNVUVo5U2FBYnE5M0hZWGNX?= =?utf-8?B?RkczOHo5bDJZeVcvU0diazcyamZVL01WY05DdndDdUpEV1VzNHdjZXBVYWxp?= =?utf-8?B?RDMrd1prTHJpbGNtbDlESzRoUVdRM2U2bkY0dkkwaWtTUVlGOTNPSkNZWFd5?= =?utf-8?B?YnFMc2dvdHk3aGJHTjd4dVZaMVUyUUdYYTJPK1lTdlR4RVl0TTdjUHVBUVNr?= =?utf-8?B?LytTNVRsZkhpUnRTbWg4eHM3MTZmOVB5ckpFM0JEUEZjMW5ibUZsRzFoWjNn?= =?utf-8?B?b2pZRDk4QThEN09zL3NJY3RIQnptM3lHUjJKcGxRSkN0ZFcrbFg0TXczUzhz?= =?utf-8?B?SVYrai9DWEtZZjhIR0dMaFE4Y1g1ZnA5dkVLWDJzaHBDZ2paVERKTDlHVlN1?= =?utf-8?B?ck44Nkc2VFZmNmJvdEZwSmRoTjYvVXh3aHZ1STBPYm9iVXdJNXdDYTBSYlQv?= =?utf-8?B?YVYzbURzMVZHZjhjbXZuaTdMSHNuQTY2TlhybWc1YXB2VlVLS0NBT1FXV0kx?= =?utf-8?B?NVN0Q1hmMURKamk1TlZjV1VneDZWTzdHMUlwc2V4MG81d29CZEE3RzZIaDRh?= =?utf-8?B?b01FWGxDcFVJeU15WlhNUjM5Wi9DTmFmUXFRMXU3V1VkRmJYRU9mMkowa3Vj?= =?utf-8?B?YndlMlFhQjdPRGRLZWlDSEk5SkJObFBWOVhjMStEM0Q2N1Q1bFhkdXBuN2xM?= =?utf-8?B?aXBGaVdNQjdCcHZURkxOUlRXZlZxVExDbFd1OHJLTm5CY0l1Tno1N3FBMnZt?= =?utf-8?B?a0dZY1U5eG5PR0V5SThWL2RVZzZtNHoyWlBWK2J6bmI3aVhSb3NhUnpMbEdi?= =?utf-8?B?dVlnQUNMOWRBN3BrdFBzMmtSY2p6RHBIcVRPODRxdlc5QS9QTTVNWWxaaWd6?= =?utf-8?B?UkN5UDdrQUtyMkZVSFlySm1BZHlxY2cyMEhTT3NSU3U3RllEYldqV2Vqb1lN?= =?utf-8?B?c21yUUNUbUR4M29Xcjl5dzN3M1g5ZjFvZWVBcE0vbVlrY0pMd1JkNkYxN1dS?= =?utf-8?B?cDVZOXBYQWI2d2d1MkhBejg5NS80c05ybGxIUVVGbG9JRVBaQllCajhVM3o2?= =?utf-8?B?VU1zMjFwNWYwSE5Nam9RSUR3OUxLcXJZMWFNZEg3SUh6Sm41Ujd4d29wSHZZ?= =?utf-8?B?UUdzTy9adlEwblVjbStscHptMFE4WHk2K3lNZGRIVFBxaDNLaTJoblJobWpp?= =?utf-8?B?NmorbHExSWNkUU5WVUI0TmZUQTZOczVZOXRWM216TEV0NUNuYjNHSW1taFJq?= =?utf-8?B?b2dpVFVjRE1MWDdLcDRmcVhkRVBhMEVCY0xCVm5CaGVESWx2N2dUNjljL3g5?= =?utf-8?B?U05FaGcyVysyQ3VNLzk4VVZqS0NBSDNISXkyVFg2QUdYZWl4N2hlZWhEOXJJ?= =?utf-8?B?UHMrN29GVXF1dzhtTndpZlZSZlhRbmJvSTYwWWFtL3pocVZQTHRsMXZTdmVo?= =?utf-8?B?dXU1d0FURzAwQ1VHc1Zld2hOeE5BeElBOXRyaElrK1U3WE5lYTdRdzNWVTQ3?= =?utf-8?B?RkwvREVpMkVxQTJjcEpGVlU4aHh2UFZJSjhKZW1RQTlLaFc1RTlpUkpBdVBn?= =?utf-8?B?RzNiamRMV1N0bXlid2hRdUM2T05kV01iVmFaaGFhVXMyYlJtZzBQRHRQQitw?= =?utf-8?B?REMzTm9iem1pb1RGMHkyS2dHRFRBNTZqSDUwWi9yYjRVTkw3eFllS2t1RGJE?= =?utf-8?B?cUtEU1cxRU50SjRzSE5sNUIvdHlWWDk1eDVXUmdoUFROTkcyRVBqWHJNWU1W?= =?utf-8?B?eFo0bWY0ais3eXE0anVjenBCTHFvazlOMWhGUlNXSTd2N2oyUHFjTTEyckor?= =?utf-8?B?bEgxN3d0NmpoUDVpUEpWTGRabG5NaENuVTluM3NuQVFNeXBpM09JbVNHaW4x?= =?utf-8?B?NGVUKzQyNlRwa3g5TXFmUldkdmZLT0pwTi9mSDVrdi9rZ05WN0h0RG1vdlN4?= =?utf-8?B?OWJEcHBKL3hOWkxRYmZzcitVeE5QY0pGSFB3c21JSk5TQjN4UXg1bDMvOG9w?= =?utf-8?B?SHR5b1B6dEsrTnhvZTV4WmM4NzgzQVdIRDV5M2E3bmE4WGJFVmlHd2lvRlAy?= =?utf-8?Q?Ygdv42CTNjo+wD/oloNKUA8wf8D/bge/2VbUqgC14XCzP?= X-MS-Exchange-AntiSpam-MessageData-1: lXlkKXr8b0r9pK9BcqVcA9e/6/zsM19funA= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 26a8b6dd-1f99-4ac2-b6bd-08df0524c15d X-MS-Exchange-CrossTenant-AuthSource: AM0PR08MB11804.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2026 16:52:33.1888 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jfU9jFljpJF2qH+HjNt/FkCLdkBzccE56xui9vqsX8B02LvOKDxMEqYKPBXC9Cr3LDTkdz+y5XyiX7UnzJKK9CgHrQGgGjK54b8AzFwZy4s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7796 X-OZ-Fwd: true Subject: Re: [Devel] [PATCH VZ10 v7 7/9] ve: Introduce per-VE failcount X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org On 8/24/26 15:54, Vladimir Riabchun wrote: > It may be useful to have a history of resource limit hits for every VE, > this may simplify debugging and provide some information about the > resources usage. > > This information is provided by ve.failcount file, any write to it > resets all failcounts. > > To add a new failcounter we need to create a new atomic_t field > name_failcount in ve structure and add a new VE_FC_ENTRY in > ve_failcounts array. > > One change, unrelated to failcounts: aio fields are now initialized > in ve0. > > https://virtuozzo.atlassian.net/browse/VSTOR-135520 > > Feature: per-ve failcounters > Signed-off-by: Vladimir Riabchun > --- > fs/aio.c | 1 + > fs/namespace.c | 2 ++ > include/linux/ve.h | 6 ++++ > kernel/bpf/syscall.c | 1 + > kernel/ve/ve.c | 70 ++++++++++++++++++++++++++++++++++++++++ > net/core/dev.c | 2 ++ > net/core/neighbour.c | 1 + > net/core/net_namespace.c | 4 ++- > 8 files changed, 86 insertions(+), 1 deletion(-) > > diff --git a/fs/aio.c b/fs/aio.c > index cb63416af135..3fa07cc626f8 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -814,6 +814,7 @@ static struct kioctx *ioctx_alloc(unsigned nr_events) > spin_lock(&ve->aio_nr_lock); > if (ve->aio_nr + ctx->max_reqs > ve->aio_max_nr || > ve->aio_nr + ctx->max_reqs < ve->aio_nr) { > + atomic_inc(&ve->aio_failcount); > spin_unlock(&ve->aio_nr_lock); > err = -EAGAIN; > goto err_ctx; > diff --git a/fs/namespace.c b/fs/namespace.c > index e97f48204617..c30bbc370f2b 100644 > --- a/fs/namespace.c > +++ b/fs/namespace.c > @@ -3371,6 +3371,8 @@ static inline int ve_try_reserve_mount(struct ve_struct *ve) > > if (ret) > get_ve(ve); > + else > + atomic_inc(&ve->mnt_failcount); > return ret; > } > > diff --git a/include/linux/ve.h b/include/linux/ve.h > index 5687faad46ff..9e73527e970e 100644 > --- a/include/linux/ve.h > +++ b/include/linux/ve.h > @@ -72,12 +72,15 @@ struct ve_struct { > struct kmapset_key proc_perms_key; > > atomic_t netns_avail_nr; > + atomic_t netns_failcount; > int netns_max_nr; > > atomic_t netif_avail_nr; > + atomic_t netif_failcount; > int netif_max_nr; > > atomic_t bpf_prog_avail_nr; > + atomic_t bpf_prog_failcount; > int bpf_prog_max_nr; > > atomic64_t _uevent_seqnum; > @@ -86,6 +89,7 @@ struct ve_struct { > > atomic_t arp_neigh_nr; > atomic_t nd_neigh_nr; > + atomic_t neigh_tbl_failcount; > unsigned long meminfo_val; > > /* > @@ -94,6 +98,7 @@ struct ve_struct { > * other containers. > */ > atomic_t mnt_avail_nr; /* number of available VE mounts */ > + atomic_t mnt_failcount; > int mnt_max_nr; > > #ifdef CONFIG_COREDUMP > @@ -121,6 +126,7 @@ struct ve_struct { > spinlock_t aio_nr_lock; > unsigned long aio_nr; > unsigned long aio_max_nr; > + atomic_t aio_failcount; > #endif > struct vfsmount *devtmpfs_mnt; > }; > diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c > index c94d4240e3d3..9d57e7999ae0 100644 > --- a/kernel/bpf/syscall.c > +++ b/kernel/bpf/syscall.c > @@ -2891,6 +2891,7 @@ static int bpf_prog_load(union bpf_attr *attr, bpfptr_t uattr, u32 uattr_size) > if (!bpf_cap && type == BPF_PROG_TYPE_CGROUP_DEVICE) { > load_ve = get_exec_env(); > if (atomic_dec_if_positive(&load_ve->bpf_prog_avail_nr) < 0) { > + atomic_inc(&load_ve->bpf_prog_failcount); > load_ve = NULL; > err = -ENOSPC; > goto put_token; > diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c > index 0f02835765ff..826f72ad0a22 100644 > --- a/kernel/ve/ve.c > +++ b/kernel/ve/ve.c > @@ -99,10 +99,13 @@ struct ve_struct ve0 = { > .features = -1, > .sched_lat_ve.cur = &ve0_lat_stats, > .netns_avail_nr = ATOMIC_INIT(INT_MAX), > + .netns_failcount = ATOMIC_INIT(0), > .netns_max_nr = INT_MAX, > .netif_avail_nr = ATOMIC_INIT(INT_MAX), > + .netif_failcount = ATOMIC_INIT(0), > .netif_max_nr = INT_MAX, > .bpf_prog_avail_nr = ATOMIC_INIT(INT_MAX), > + .bpf_prog_failcount = ATOMIC_INIT(0), > .bpf_prog_max_nr = INT_MAX, > .fsync_enable = FSYNC_FILTERED, > ._randomize_va_space = > @@ -114,8 +117,16 @@ struct ve_struct ve0 = { > > .arp_neigh_nr = ATOMIC_INIT(0), > .nd_neigh_nr = ATOMIC_INIT(0), > + .neigh_tbl_failcount = ATOMIC_INIT(0), > .mnt_avail_nr = ATOMIC_INIT(INT_MAX), > .mnt_max_nr = INT_MAX, > + .mnt_failcount = ATOMIC_INIT(0), > +#ifdef CONFIG_AIO > + .aio_nr_lock = __SPIN_LOCK_UNLOCKED(aio_nr_lock), > + .aio_nr = 0, > + .aio_max_nr = AIO_MAX_NR_DEFAULT, This feature is not intended to limit host aio, right? Should it be INT_MAX or something big here for ve0? > + .aio_failcount = ATOMIC_INIT(0), > +#endif > .meminfo_val = VE_MEMINFO_SYSTEM, > .umh_running_helpers = ATOMIC_INIT(0), > .umh_helpers_waitq = __WAIT_QUEUE_HEAD_INITIALIZER(ve0.umh_helpers_waitq), > @@ -780,12 +791,15 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ > ve->fsync_enable = FSYNC_FILTERED; > > atomic_set(&ve->netns_avail_nr, NETNS_MAX_NR_DEFAULT); > + atomic_set(&ve->netns_failcount, 0); > ve->netns_max_nr = NETNS_MAX_NR_DEFAULT; > > atomic_set(&ve->netif_avail_nr, NETIF_MAX_NR_DEFAULT); > + atomic_set(&ve->netif_failcount, 0); > ve->netif_max_nr = NETIF_MAX_NR_DEFAULT; > > atomic_set(&ve->bpf_prog_avail_nr, BPF_PROG_MAX_NR_DEFAULT); > + atomic_set(&ve->bpf_prog_failcount, 0); > ve->bpf_prog_max_nr = BPF_PROG_MAX_NR_DEFAULT; > > err = ve_log_init(ve); > @@ -812,7 +826,9 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ > > atomic_set(&ve->arp_neigh_nr, 0); > atomic_set(&ve->nd_neigh_nr, 0); > + atomic_set(&ve->neigh_tbl_failcount, 0); > ve->mnt_max_nr = MNT_MAX_NR_DEFAULT; > + atomic_set(&ve->mnt_failcount, 0); > atomic_set(&ve->mnt_avail_nr, MNT_MAX_NR_DEFAULT); > > #ifdef CONFIG_COREDUMP > @@ -825,6 +841,7 @@ static struct cgroup_subsys_state *ve_create(struct cgroup_subsys_state *parent_ > spin_lock_init(&ve->aio_nr_lock); > ve->aio_nr = 0; > ve->aio_max_nr = AIO_MAX_NR_DEFAULT; > + atomic_set(&ve->aio_failcount, 0); > #endif > > return &ve->css; > @@ -1065,6 +1082,53 @@ VE_RESOURCE(mnt); > VE_RESOURCE(netif); > VE_RESOURCE(bpf_prog); > > +static const struct ve_failcount_entry { > + const char *name; > + size_t offset; > +} ve_failcounts[] = { > +#define VE_FC_ENTRY(name) { #name, offsetof(struct ve_struct, name##_failcount) } > + VE_FC_ENTRY(netns), > + VE_FC_ENTRY(mnt), > + VE_FC_ENTRY(netif), > + VE_FC_ENTRY(bpf_prog), > + VE_FC_ENTRY(neigh_tbl), > +#ifdef CONFIG_AIO > + VE_FC_ENTRY(aio), > +#endif > + {} > +}; > + > +static int ve_failcount_read(struct seq_file *sf, void *v) > +{ > + struct ve_struct *ve = css_to_ve(seq_css(sf)); > + const struct ve_failcount_entry *entry; > + atomic_t *fc; > + > + for (entry = ve_failcounts; entry->name; entry++) { > + fc = (void *)ve + entry->offset; > + seq_printf(sf, "%s: %d\n", entry->name, atomic_read(fc)); > + } > + return 0; > +} > + > +static ssize_t ve_failcount_write(struct kernfs_open_file *of, char *buf, > + size_t nbytes, loff_t off) > +{ > + struct ve_struct *ve = css_to_ve(of_css(of)); > + const struct ve_failcount_entry *entry; > + atomic_t *fc; > + > + if (!ve_is_super(get_exec_env()) && !ve->is_pseudosuper) > + return -EPERM; > + > + for (entry = ve_failcounts; entry->name; entry++) { > + fc = (void *)ve + entry->offset; > + atomic_set(fc, 0); > + } > + > + return nbytes; > +} > + > static int ve_os_release_read(struct seq_file *sf, void *v) > { > struct cgroup_subsys_state *css = seq_css(sf); > @@ -1602,6 +1666,12 @@ static struct cftype ve_cftypes[] = { > .flags = CFTYPE_NOT_ON_ROOT, > .write_u64 = ve_rpc_kill_write, > }, > + { > + .name = "failcount", > + .flags = CFTYPE_NOT_ON_ROOT, > + .seq_show = ve_failcount_read, > + .write = ve_failcount_write, > + }, > { } > }; > > diff --git a/net/core/dev.c b/net/core/dev.c > index c7dddb200489..05e0b9b6ba23 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -10997,6 +10997,7 @@ int register_netdevice(struct net_device *dev) > > ret = -ENOMEM; > if (atomic_dec_if_positive(&net->owner_ve->netif_avail_nr) < 0) { > + atomic_inc(&net->owner_ve->netif_failcount); > ve_pr_warn_ratelimited(VE_LOG_BOTH, > "CT%s: hits max number of network devices, " > "increase ve::netif_max_nr parameter\n", > @@ -12211,6 +12212,7 @@ int __dev_change_net_namespace(struct net_device *dev, struct net *net, > > err = -ENOMEM; > if (atomic_dec_if_positive(&net->owner_ve->netif_avail_nr) < 0) { > + atomic_inc(&net->owner_ve->netif_failcount); > ve_pr_warn_ratelimited(VE_LOG_BOTH, > "CT%s: hits max number of network devices, " > "increase ve::netif_max_nr parameter\n", > diff --git a/net/core/neighbour.c b/net/core/neighbour.c > index f90deb17fb25..57a49d9c98a7 100644 > --- a/net/core/neighbour.c > +++ b/net/core/neighbour.c > @@ -520,6 +520,7 @@ static struct neighbour *neigh_alloc(struct neigh_table *tbl, > (glob_entries >= READ_ONCE(tbl->gc_thresh2) && > time_after(now, READ_ONCE(tbl->last_flush) + 5 * HZ))) { > if (!neigh_forced_gc(tbl, ve) && entries >= gc_thresh3) { > + atomic_inc(&ve->neigh_tbl_failcount); > net_info_ratelimited("%s: neighbor table overflow!\n", > tbl->id); > NEIGH_CACHE_STAT_INC(tbl, table_fulls); > diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c > index b3d54cad984a..9a3376d2682f 100644 > --- a/net/core/net_namespace.c > +++ b/net/core/net_namespace.c > @@ -486,8 +486,10 @@ void net_drop_ns(void *p) > #ifdef CONFIG_VE > static int dec_netns_avail(struct ve_struct *ve) > { > - if (atomic_dec_if_positive(&ve->netns_avail_nr) < 0) > + if (atomic_dec_if_positive(&ve->netns_avail_nr) < 0) { > + atomic_inc(&ve->netns_failcount); Let's add a helper for incrementing our failcounts: #define ve_failcount_inc(ve, name) \ do { \ struct ve_struct *__ve = (ve); \ \ if (atomic_inc_return(&__ve->name##_failcount) == 1) \ pr_warn("CT%s: hits the " #name " limit, see the '" \ #name "' counter in ve.failcount of the " \ "container's ve cgroup\n", ve_name(__ve)); \ } while (0) Call sites become one-liners: --- a/fs/aio.c - atomic_inc(&ve->aio_failcount); + ve_failcount_inc(ve, aio); --- a/fs/namespace.c - atomic_inc(&ve->mnt_failcount); + ve_failcount_inc(ve, mnt); --- a/kernel/bpf/syscall.c - atomic_inc(&load_ve->bpf_prog_failcount); + ve_failcount_inc(load_ve, bpf_prog); --- a/net/core/dev.c (both register_netdevice() and __dev_change_net_namespace()) - atomic_inc(&net->owner_ve->netif_failcount); + ve_failcount_inc(net->owner_ve, netif); --- a/net/core/neighbour.c - atomic_inc(&ve->neigh_tbl_failcount); + ve_failcount_inc(ve, neigh_tbl); --- a/net/core/net_namespace.c - atomic_inc(&ve->netns_failcount); + ve_failcount_inc(ve, netns); The idea behind it is to show in dmesg that failcount was reached, to simpify the detection of problematic containers for us. For reference http://lore.virtuozzo.com/kernel/ccc3cbc8-e225-41cf-b563-699254aeb57b@virtuozzo.com/T/#t > return -ENOSPC; > + } > return 0; > } > -- Best regards, Pavel Tikhomirov Senior Software Developer, Virtuozzo. _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel