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 8048280024 for ; Fri, 28 Aug 2026 17:33:42 +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 67SHWPag011720; Fri, 28 Aug 2026 20:32:26 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67SHWPag011720 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="h2k+iWmT" Received: from mail-yx1-f72.google.com (mail-yx1-f72.google.com [74.125.224.72]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 67SHWN6s011716 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 28 Aug 2026 20:32:24 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67SHWN6s011716 Received: by mail-yx1-f72.google.com with SMTP id 956f58d0204a3-66c70f73f8dso3843607d50.1 for ; Fri, 28 Aug 2026 10:32:24 -0700 (PDT) X-Forwarded-Encrypted: i=3; AKwUvBzD4/sDSBvct7gkpjqUpMkBrPkeFHEpDTCZvMPlEM1AnDIJHs00cDurumU2BBvfhaQc4THDuw==@openvz.org X-Gm-Message-State: AFuF++mwwby5xny8p4QVuUtHvNRiSHbJyypoTOqPRgoyVx1t3RtTJy9k b5xB+ZdxQjcNE+3KY7fez4qy/Z/Xlgz7olPGmziGazeQy/r9YwZ7PDmVgWLdd5uuCzinM+zNQkc kE386UcPnsDJ66mSN1dGV7G7GjxaXomrEXwYabdWzohrHX8zyWg5SuQ== X-Gm-Gg: AYBFou2gOnyzZsLXIivT+RBAhOTUmyuHpawKfTkVO51Kw00ePebSbS0X/dZG3vxkGiY ME4xv/HA+SZrTRrXym//22DRyMxMTApkjN7mkeU0/I6KYbGiZzoBQ0ygeNm/C89y/tH10FtIRhm YBvWsWQAxRd3cCwIuSYcGTv0u5iqzwVIKlhZlXOw7udYnAtzhyH9s0jy8s8TfBgZnbHWHLtt91k 718o+X01BiDK8gVMzS50yHhEf9DCA+N/u2gQ6F10FaPgq2KUZTp3brQrF+bR8FZaButoppvct4w XK9DeLAR4JdDeMUEOAiHk+uqtiuG/58aIb2LPwkCRnA+BmmaFc/JJRHYS1R9YpEt9IhFmAc9i99 7Um2AH1rqnhVtoqc7f6RXV82zNkhQrkyPtMV6wFnk3RLtnNyY+FkAW9LqQaGvMglhekpvFxVMGs 4LXEAUXkDjUIZl0YJw0Qive405TxHn9zLs X-Received: by 2002:a05:690e:1b61:b0:667:dc6d:736b with SMTP id 956f58d0204a3-66e4c6cf76amr2281891d50.32.1787938342831; Fri, 28 Aug 2026 10:32:22 -0700 (PDT) X-Received: by 2002:a05:690e:1b61:b0:667:dc6d:736b with SMTP id 956f58d0204a3-66e4c6cf76amr2281873d50.32.1787938342144; Fri, 28 Aug 2026 10:32:22 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1787938342; cv=pass; d=google.com; s=arc-20260327; b=LWh5DYiW0bMuqD4lXCqvTMqdh5BH18kIAgm/jqVtWviGtwm/LazO/s7NBXViwLC5wN UZk2LJepUVKXVVHnSsJE4s6hzmLmP4Zz5VF4DZBD1uXu+bQc5p1nBfXZwNeDsYZSDcei fZ7aVYs05VkRzFpu3lEtctyGBccxuHnSbvgiRsnz7pt7/iQjRMa8CtfNhnF6DuaB77n5 9Tq5koVvnKKeLGHDJA67NzazvJUUHvSnb/v2596gJru0GRb63dcswKybRlJ2A+K82Gtr qer4yggFEC/i/7avcYkKcpe0vbLDIASQ+Nmo0/aitnge/lfuA3e1jHne3gLasBpYfUeb wgUg== 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=mqatZaaZDWD0SOPXqu4pJPDG2ncwBrIZfkfnBhrVXg8=; fh=a5NFwd3FGse5URQ+yGjBMZPO4aSC2rovaSvByFrkjLM=; b=h2D+5fGWgpqvaLFLm23n9K8Lr3BLXsetPsEtY6LWPqDQFvMllmVJVrbIbZ8mncE2AF ysTt4utTdRpGs7VRhZYdWwnk1Ef0UOdDCX1KZffIJJzJdWu358L3NQa/zs94k0QbzOGO 1ZRA2Gb3XFFq7sHUUtFhDqC0CUqJi+YL3Dd3LWTkfr6UxaRomaEvyKny2yq1H5khJlIB Ej+Fy7W5a2IGtHlIoRSLO2pNZvKAQWFlst/gF6uf+ENT0+txsYZEsgcYmhdBIqiVQ0Vx hPPu5P2RTkzen6PNlNY4hWgPlKF2kKaJUcLKw2KqqLVlsqHgHKC1HQKuO1s4ptMkFC6K kB4A==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=h2k+iWmT; 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 vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c201::6 as permitted sender) smtp.mailfrom=vladimir.riabchun@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazlp170130006.outbound.protection.outlook.com. [2a01:111:f403:c201::6]) by mx.google.com with ESMTPS id 956f58d0204a3-66e4edb86f3si1142990d50.265.2026.08.28.10.32.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 10:32:22 -0700 (PDT) Received-SPF: pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c201::6 as permitted sender) client-ip=2a01:111:f403:c201::6; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=h2k+iWmT; 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 vladimir.riabchun@virtuozzo.com designates 2a01:111:f403:c201::6 as permitted sender) smtp.mailfrom=vladimir.riabchun@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=VjEBXX7dXENQJv+GcjB5esGRKSBCzyHFINkyDI1IcKCYr6SH6FPFXxxBQ0z93Dcl27byoh/plOe9JBjaaMxKuHfJvYLgoTuoxUgfadKk5fZdrpoALPUDqYGvpvquB6juNs1YIkRe9ERd9C7Em2dmzIbxcz6n38Wtz4l53iGk9yK+lj3HfhQqu1E6XCAm3NAmdnR6869xoRP0NceTBUrOjPZE/gLaUcp54GospCrl1yCO1nxr7c6Q57mPGuthZo2+qZwtokXuDNZLf0xwDOcynctHhyneumRyJadreU9e/EfGZTmEcH5EgRB5dslMW9iIXpzyQSSeCYK7kxuVQeiK3A== 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=mqatZaaZDWD0SOPXqu4pJPDG2ncwBrIZfkfnBhrVXg8=; b=JEWc2Xb5uHrEN2h9JIxH868jcPLmVieK36E6ja6PlZC6IqLJbBoKsjLWQ2adhynlsuJXN2gEBaefL3USm3HWA4gqMG6nxIqvVe0yEPFqaXZdXJTxzYYL4MrVbez/4/zKEFsRUjpwtXj3njN60vKD3zi9f9SvoKZE0YoCT5uxE1633Yi3Qp5MPdi9wH/Ay2o0GULpdjllSAXwGN6GSSE6sEvgZt0aga5TNStzqy2X2rUYE/MH1R0KPaKBzn9c1WsVbxoXxvEyRoHJ2Xd/Mhf28FyNC8FjPs+6HhgyayRGvtE+JSik65r/fPnuVyXesfastuLjMymiqLH98DWAdP75xg== 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=mqatZaaZDWD0SOPXqu4pJPDG2ncwBrIZfkfnBhrVXg8=; b=h2k+iWmT0s//HbQ0ti5JKO4q94PvHFp4tAqnVgGYKdpa1G8YQy58ig9nvFualeIiBRts/VQn6WqxJgY9hd78Ogk4/tryDo6iTRZtSMSgsOdVZvd/f11ZgS8aySg7HYyLVns9m9kUdKkZBMMFie+qkhe6JZDUvtfsxSRQA1hG0CgRHnEVKb5hzpvr1rsKEcKpbF3QOmcUnwm89waCMWQTY+a8tV6zG867dOt4IwrnbiaEbQ/3WTW2tCOJBQ1kkmgfDQThlsHe5syRC61VD90K4s+uMfj1jI6akePBt25WMU074OuDYl5tga+cnAE9mDTZF/mgBT2/pdfF7AM2aOuy2w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from DU0PR08MB8470.eurprd08.prod.outlook.com (2603:10a6:10:406::17) by DU4PR08MB11789.eurprd08.prod.outlook.com (2603:10a6:10:63f::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.9; Fri, 28 Aug 2026 17:32:19 +0000 Received: from DU0PR08MB8470.eurprd08.prod.outlook.com ([fe80::3db0:9d70:4641:5f47]) by DU0PR08MB8470.eurprd08.prod.outlook.com ([fe80::3db0:9d70:4641:5f47%4]) with mapi id 15.21.0382.007; Fri, 28 Aug 2026 17:32:18 +0000 Message-ID: <49b9a351-23d1-4695-b90b-d4e7ac91f237@virtuozzo.com> Date: Fri, 28 Aug 2026 19:32:17 +0200 User-Agent: Mozilla Thunderbird To: Pavel Tikhomirov , devel@openvz.org References: <3157350f84cd823095f282390f45177b563a5604.1787579160.git.vladimir.riabchun@virtuozzo.com> Content-Language: en-US From: Vladimir Riabchun In-Reply-To: X-ClientProxiedBy: VI6PEPF0000021A.AUTP296.PROD.OUTLOOK.COM (2603:10a6:808:1::8d6) To DU0PR08MB8470.eurprd08.prod.outlook.com (2603:10a6:10:406::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0PR08MB8470:EE_|DU4PR08MB11789:EE_ X-MS-Office365-Filtering-Correlation-Id: f3564bc0-2b4c-4488-0183-08df052a4f2f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|23010399003|376014|6133799003|10067099003|4143699003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Ar2McNIEJuYdzzQ/kQsZiLZVe7iiQtuFbIf5ELq8QbQr/G9DzUsCZtuHxuAbcdsmhBTBWPr0Dbh67xsu1hTKZx+pX94Ff+fkGC/0VdJVg1Pfhs1TSWawF/35J6hLygMV/qrvmxq/QLePqK6IkGBPooLfy92ZGK5ft5Zt921mynFnGUOzML9b7yUURakrxyqRzHoPpyJPVp0aVrpLyJNgFTDH2AjPgCRfOU3JsLjLZVEStDF6JzOQztp/QwQ2kJkz8Jht9cFTBJPFw/t0268twQ3D9l35MsmaAiE/aKuQ9v18G6DFBrb7I1jaCPGFfgLfAb+mCzcCDkyu7I45QuYTzAcn/8Pz/6ggYMGwZZnjrklMPAThKDsJ/WYXKyx+kRsmODADB3pVmnjolDlpLlXI2Yg0VzJif8BiVquwcSnCJQsy36pY/ILrwpV6HElTyYa1/PWJG1BNV5odZe2kpTCe3RVyG0+z8HI0wvqZ7b0qnWPYJSefw82g3eBWgEbFA8/v801Ke9e49RbJhygbomSfaMkDJchfDZfbq28ms5YXRHDeB33DqWOOqESHDWE+xxRGLTW6Ox9p4E5rZTcMcg6NjaPmHd2NliYS8d2TDDgTRXscmhIS0u95ORgfyi2pAEXk X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU0PR08MB8470.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(6133799003)(10067099003)(4143699003)(56012099006)(22082099003)(18002099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MFdqT1Z3bWV6ZStwNW8xWHo1TUE0TEx4bGd2cDhLUFhIN3pYUm5EdURJSlBW?= =?utf-8?B?SmJtbjNkazg3L3pMenZVaG5vMUNqWm9xcHcyMCtYS2wvZTRUNGlkRHY5ZTFs?= =?utf-8?B?WjdhWVM4dTdmQ0dQSTVxYVdFM25IdG9OMVI4VG5IRjNEdW9iK2ZyeXFETHFu?= =?utf-8?B?UytTeUVGT2pMWDZ2VUFHb1ZUT2dJdHlMMmJRYWxiK0Z5K3pMdFByU2hMSmNy?= =?utf-8?B?T0VyWG9lWGs4QkF1eWV5bU80ekoyemN6RERXUVFTaGViVHA2SVVwL2pmN2NE?= =?utf-8?B?OHVyRGxoRHZIN2tkd1doOHFaS0loWHU1Z3JJVW1kcW8ydFh2cGUyYUNtWGxp?= =?utf-8?B?NjBBWTlSVmdWRVVBKzBWbnpSbHN2OVVIbjJNSWZoSGpxN25kZEpBYTV1NStS?= =?utf-8?B?UDVUUmJPVlpvUGM3RkdPTk1Ecm1LUmNsdEQyUkNTa3h6cFBYUTNGcnFBY0Nu?= =?utf-8?B?dzRoTndRY0p1ZlNGUGkzUTFYQ0ROOU9WdDRKb0ppZDRtNXEwZ2pMZG9KSTlo?= =?utf-8?B?a1U2QXh2a0dJRm1rMzIvVXdxMDNkVXpWQzJvUmo3UnVXM0tPL1RsemVzeGhK?= =?utf-8?B?Mm94RFVaOWl0WTROTE9jN3FFa3BvYmpJbmVleEFrYXdnelFxVVBaRzdsald2?= =?utf-8?B?d1poazFRNGFBaGNTS0RGVTVrTG9pdk4xV1ByM2l4eHAwaml6cGY3bmhEQmNj?= =?utf-8?B?VGQ4NGRVOTk2V09TTDhWMHdNTGhudElsSkc4djg0UGh1WEZQcFBBQXBBQXNX?= =?utf-8?B?NHlaVUhYY0d5Z0tWVm52ellwN2pIL1pBbW12UVV6bXNPNkZRcnE1d2oyT3dJ?= =?utf-8?B?MG11cTNHZGFvaHF4bm5BZDJMdThTTzh4MEF5VktzaUFQSHNCa2lBUUgwMW1H?= =?utf-8?B?VnpIQ0VqWDB0eUZFZGttQ3d6UlZtM2MzU3RTdDVDRjFXMnFDSnVuQ1VUYURx?= =?utf-8?B?K2JkZzUyOHF5Zm4yZXVWMFlmSldKRU1NTjNBZXZWZkpiVGJPQ2lQRTJkbzU4?= =?utf-8?B?Q2pUc2V1clJOUVo5U2pJcWNKcGdJV3BPK3g4bDZZa2pqZjc0bGRnZkNEaXVo?= =?utf-8?B?UlFib0MrK3E3MTFCc21DalNoejhtUzBWbmN4R0lheGhFNVF5aUZ1ZStBTjhB?= =?utf-8?B?TE5JSSt2Qk03NmwxSnhrSnNBcFp3VFNUdGVnRytDKzY4WXEzUmlRVFF0d3Zh?= =?utf-8?B?UURNR1VYY3d4YkdES0VFeVFDN0dsNWZGOE1kTXRoZFJSajI4Nyt2bFRvMG5N?= =?utf-8?B?UEFiUWJGcGVtWThTd1NDb3JaVTZUMGlCbzV4RzQvaEp5RS8rTlNKMi9lMGNR?= =?utf-8?B?WTlPaU91WmxJVVdqdjRuR2habDZTLy9Nb2ZpWFpIVzlQNUswckQ1elU0dmNu?= =?utf-8?B?dDkwcG5TTWlucTJ2QXdweW8rdUlMc3hNNURlYm1kM2dTMWY2cEtnNlQ1dURM?= =?utf-8?B?RnRVZjlteU1DYzV3N0dxK29iWUdnQTlXMTlzVFlVN292OU5FaUdMRnRHU3p5?= =?utf-8?B?M2VZaTlpcUxuUmFxRUVkc0dZcHFEL1FKOUdXd3k4TEFRNlVvM2lXeXE2UlZZ?= =?utf-8?B?N1RQdzNKbzdBV01Qa3lTd2IwRTNqRHB5M00xS1BycUNRQmZSb045bVRQV3h0?= =?utf-8?B?aU93dFp2R3JMSWZkdmtNa3B2Z25RbFEzNEV6cWtHd3dHQnpYVkpVaCtxOTZo?= =?utf-8?B?eW1WeExmNUxrQ21ZUnA5REg1T29PSXptdnZJREpTamV4blJGVFNVcGxHYmZr?= =?utf-8?B?UURxUnJUWkZkdzRRNXRQeXJaOHVUbXdwN2hhdHcydDBzWENPU0VGZVI0aGho?= =?utf-8?B?d0YrZWd0Y2o3aGhrVEgyK0NKa1F2ZzJ1OGFNaGxxUzJ5Q3BvOU1XNXBoaHU3?= =?utf-8?B?MFlsTDRxdXZlQnFESkg3Tjc0cEIrVjF5SGlBTjl4VHpKZE53QjU4dGlKVzRx?= =?utf-8?B?eWhtOUlJRVZoamUvdmc1K0Jta2hMZWszVDVtcFVHTEVsSTBZdWFudkNQYTNE?= =?utf-8?B?c1hWS0xzZm9qcDZNT21uR2dqZnl5Q3Q4YlpmNmhrRVZEY2gyRit3Y3JIeVNl?= =?utf-8?B?cTVtdmFIZnZWVHZNVmlvUVpTQVhDN25XWlFibDNIVEEyQUtmcmJmNWVFMTZ0?= =?utf-8?B?RGFQNUZVdC8vMEloWFkxSmlQVXhyL2lzZTMxRGpONUVJOHZUMDRhdGhVZFZN?= =?utf-8?B?SCtsakdBTW5qLzRPR28zSjl5L1oxa0RkZVdoREVOOERMMlFMOTFiVFhUK0ZX?= =?utf-8?B?ZXl3dnVOc1FveUplSHhVcTQ1RlJETExQTUQzZUtYL1QvN1dpYld3MkVJNnBS?= =?utf-8?B?ZFhoZFc1Vk5BQlBBZVpXbHBTZkdLMVlrVFJpL2wrRVJBMmxVczJZVXhYY1Uv?= =?utf-8?Q?Fc6o0r/LB3n/mDEA=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3564bc0-2b4c-4488-0183-08df052a4f2f X-MS-Exchange-CrossTenant-AuthSource: DU0PR08MB8470.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2026 17:32:18.7891 (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: 9H71cy1iWobl33J2GalwyrzKmfR7Q3QiljvdlcbCgjePbsHEwhRThYP7sclIjuc5LxKKjtOl3gTLIO5vHGo/KaI9p+F/a/Fz+5ozNOuWumc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR08MB11789 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-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org On 8/28/26 18:52, Pavel Tikhomirov wrote: > > > 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? It preserves original kernel behavior. Upstream kernel has aio_max_nr sysctl variable with the same value as AIO_MAX_NR_DEFAULT. Commit 1f6006388601 ("ve/fs/aio: aio_nr & aio_max_nr variables virtualization") added aio_max_nr to ve structure, but it didn't initialize it in ve0. Here I just put the correct value in it, so no functional changes. > >> + .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 > Fair, I'll do it in next version or as a follow-up if everything else is fine here. Just instead of pr_warn we should use pr_warn_ratelimited, as it is easy to trigger warning from container and flood dmesg and serial console. >> return -ENOSPC; >> + } >> return 0; >> } >> > -- Best regards, Riabchun Vladimir Linux Kernel Developer, Virtuozzo _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel