From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2146143927 for ; Mon, 22 Jan 2024 10:58:57 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D52F140291; Mon, 22 Jan 2024 10:58:56 +0100 (CET) Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by mails.dpdk.org (Postfix) with ESMTP id 58BFB4028B for ; Mon, 22 Jan 2024 10:58:54 +0100 (CET) Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 40M9it2r010727 for ; Mon, 22 Jan 2024 09:58:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : content-type : mime-version; s=corp-2023-11-20; bh=LiOAOWu9JqOA0w5SXyUoLPsLiw6nJNA2EEPExiSPFzU=; b=iiRSWawyp8OgxQG5W1ar2LRqT/PgdQ1tqu1BgrRVx3YARu43WlkutY8wbVsFC60YVrAz bengkZKz+SefhaoawnK11+uaZrCML8jEP5M5XWi39srxCjzBNSMKH2o1xRhTU6ieOkqE oZh2mMJmaDR7+R0kfHLtnKB/+k7DaBM2InXWuXhYsR5cIzThD8OpqAvA/j4Scr3hw3eC PewNibtu40lj/2NoJcfkQbHkH3S4uOZ4Q33GsCoUOzxbghH0s3bBMQmMnEqauQ434zSU KSF7IAu6DByEtlr8ncE2O4ygs00zH07Cs7pMfAbbjI9SLAv5xrpjbiLw190qpRdOFRXw 4Q== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3vr79nb6sr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 22 Jan 2024 09:58:52 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 40M9lEvG006550 for ; Mon, 22 Jan 2024 09:58:52 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2100.outbound.protection.outlook.com [104.47.55.100]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3vs33qy7ru-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 22 Jan 2024 09:58:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZdSjhkjmX6nGIWBjUak0AMBDIuAS7KwX3RZ5Wy/gNWLovDAEsKWh1NqsJeC7G9RKiTrj2+CCFwuHZSWtPYXvuiI9VlLm1Bieh1qtBMyK0FPHjN35e8ao0mrdDdSqa6iCsCHGh81qvsu20hk4Dogq5hAbkNMVM6EvyZ/9pz5tLxtJde7xpSM6vWoywy5eD9o0G35BGGVth4ZX3w1AztFYuZVMAypk0uzOrW4POTq0eNcxzk3Dk8rbHLZ+jVJsmJ/Z+n96cf08SPEyN7DpDSRNorxfShfR4gY9Fzj7sHYohLmi7bXEnjcie+Zj3G8I9Gktpdqow5o7288BAzrjvqv6sQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=LiOAOWu9JqOA0w5SXyUoLPsLiw6nJNA2EEPExiSPFzU=; b=OdXKIXpOtC4tOIlco9OE5HX8I/z3RYEqzrTLgQT9bpHMISdAoJsXxcOxBj0379Td6chjSL/LIIitvXcjw9fIZvaJkh8V+2D++UGWbomV0U4HLenoJJa/fWDoB2vR9uvh0QlTyXEIK1OwIcn0QdMzxK2zb6xl+ZZEdR8TJzdrK6YEWDcO3xjl2W3TMAkmWZXxZEnWX4PM57KDFmg09CjpT9qCS754lZMG3siKojnFMbucuHprUtPNxePbLVIGsvCUtsRglvxM5FUMpQBFtslkGn6NgCz7LecwjH0gCiDLnrwBG1KE5f+Z3rIqEi48Rikp8kTdADXMR8Fdxbpp7oBGpw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LiOAOWu9JqOA0w5SXyUoLPsLiw6nJNA2EEPExiSPFzU=; b=0JqCdmpF8iNJjx/E0LtPuf1qtqrN0OwUkWFeWEbB3tMgmn69zAvaqX/omtJBiAY3R1HfUrDxoNgkiC0TwhGqugP++wsrEo/gYEy996rg0BorxUMDBCFpO7k5ApTNk3OdltW8F0llAK4cIO+teyGl4lagEQRppLpDBFlUSiY7f0A= Received: from PH0PR10MB4728.namprd10.prod.outlook.com (2603:10b6:510:3b::10) by PH0PR10MB5895.namprd10.prod.outlook.com (2603:10b6:510:14c::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7202.32; Mon, 22 Jan 2024 09:58:48 +0000 Received: from PH0PR10MB4728.namprd10.prod.outlook.com ([fe80::1a9b:104f:6f54:2d0f]) by PH0PR10MB4728.namprd10.prod.outlook.com ([fe80::1a9b:104f:6f54:2d0f%4]) with mapi id 15.20.7202.031; Mon, 22 Jan 2024 09:58:48 +0000 From: Sudhakar Vajha To: "users@dpdk.org" Subject: KASLR enabled in Linux Kernel Thread-Topic: KASLR enabled in Linux Kernel Thread-Index: AdpNFfDhNjYmEYYaSmeKBoKKacueXg== Date: Mon, 22 Jan 2024 09:58:48 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH0PR10MB4728:EE_|PH0PR10MB5895:EE_ x-ms-office365-filtering-correlation-id: 36ad75ba-628a-4612-6f07-08dc1b30baea x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Tytb7Tf9IT37Io3c9Q9w9yV7nkHPpuopKZfqOfpPPLHjY2bISI3IapNCvpNI62CKLl+B+S1TD0GycwHOWshIC1/BQiGw+IGfKwduYSIMpOHEHIEnlcqv59Sw5+VHcAn2PL3GLRGpNIoh092/z7OgQuuF62ySzSeZHNZBMzL1nEPbGCKg9M1jAH1V35RD6teQb8/EnIfhou71VvIToM6bwO7yVv2emeqvEnMQLOcmyNCr7LmI9whqrgPOtdk+Z//+R1Y5EY8dt221uX2tSmYRwGUQzVJDJVSWC9mBKXz3JhZJ85xx7PoRJR2lMXqXkNShHGZrR5Ab3RIG9jEyl5Hl5F5LJGdEyjx8JIK5rnjNyLGcl/nNcAd8NiD05kpMzTh2qL4ZkxLdOb8X6oyO5f21B4Qr0xwsUYew95uAlaJx80XlkgpL1i8DrmZz8GgV9rBstyo8B2nMmDjjXGP3k5MjjmRBbxfP9BS09LTLreGzY5m9o0eEg8vTMvne1Hs9ex1J+rm7gOeNoITkiQsDVZT+NsaRX/MAIkxttStO/hQofyXZngKy1ogMpETdeew6eTIn x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR10MB4728.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(136003)(39860400002)(376002)(366004)(396003)(346002)(230922051799003)(186009)(451199024)(1800799012)(64100799003)(66899024)(2906002)(8676002)(52536014)(8936002)(9326002)(5660300002)(44832011)(86362001)(66476007)(33656002)(316002)(64756008)(66946007)(66556008)(66446008)(76116006)(38070700009)(99936003)(38100700002)(6916009)(122000001)(9686003)(478600001)(6506007)(71200400001)(83380400001)(7696005)(41300700001)(26005)(55016003)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?/VncaXFfXkH7kYyqgSvDvixXVq+At7KwPnR7OblzpQ2G4KT+nF1wchcMEgg5?= =?us-ascii?Q?m7nnNUjE27ZPRKzHz8aLFAIeW8gPQ/3FBhbU9hdTRMlsNAcEQDp+b4lO1u6C?= =?us-ascii?Q?ZHD29kh2gIP9fpLcsc1f9C1wLldebAC7esj8gxIu2qENvQwCR8jDt8H8ixOg?= =?us-ascii?Q?E7Stam3ehluAKYfBkx0pXZde7WyJF5wy032IVWMnw21yBMLAelPYe1CYf2Ot?= =?us-ascii?Q?wF6DHRfVZ/YzdDhDUPuBgAzdwcoyQD/bEzo9sp3MGXjzF98lRSZjTO8g3N1I?= =?us-ascii?Q?3RDgPugUCLmKMJk1bYXgR9I7UHF3ixih7eCU14VZZQmh3PZUwqTStQyd39ls?= =?us-ascii?Q?8rlKbBCQV7o75PeCOshzxzWL1m772Kdv/g1U3cyIXNTBHOOxPyGssA5KhIPP?= =?us-ascii?Q?Z7NQuoPtUpl4LzU1N9Z+hUhS7UE+N93dZwdrKC5PulYBOXItIF3cOmSR3Qvi?= =?us-ascii?Q?26dWg4XoqWTxF0hh2dD6Ij2Y3OQT8Gfo0b63PRdH+HdQN0JppWZR9dpafxeh?= =?us-ascii?Q?9RL2Ked2H2ke7WEE6mpwQefMq6Z3k/togC12G9gSQnx92Hh7cFnW33oyQz7n?= =?us-ascii?Q?0rMqc189JlvnHqY1uigeySm0DGat0y23DGahUgw8UpbwH4/ZKZJO/XGLYK9j?= =?us-ascii?Q?04EmlVa70zOg2wtxK0p/+BisMswBRFQXDFX/sMzewyb534UqdqWeHp9r6PhT?= =?us-ascii?Q?VSlpyjPbZSiNNQwoXV+gukfFzOScIQ4CpGMhUAee9EsplyDNCFQm5sb30mmz?= =?us-ascii?Q?Fd0QBf5TuzS4AuSZSS0Q9iIeDvK6XkXHYhitFX/N+b7vE3pFkabYFrtzHTcb?= =?us-ascii?Q?uUTFl0NADvPUc+0RbdCDE8gWAa+qS75j+SlG+aI6UaotGkZXzj/ovfl3U6Rk?= =?us-ascii?Q?zJHDZFqzCCQ+9DMu5P6tKd7MZHuP+ncT9PqH1atS7gpwCs8lzw5LG2x6P/5R?= =?us-ascii?Q?wgq4d8UB3naDM73KqL4cw5nDaq25sLkXJXshUWLxZwgzA/7sKEaoD6YIbeoj?= =?us-ascii?Q?F+YuoOAUpBg3nwiMT8G5s9ryAJCLuknRJItX5yR5EKU0GFs8Sgr7yUsHo4Gh?= =?us-ascii?Q?UDS3USf6IEI4Xk/POv9QAgcApU/i3CvL6YqrLykC1/i2mb/91vlkmCvD4Drl?= =?us-ascii?Q?4/PZyKbBdb000utMg3nlPeTskSZFvZyHD46dwKOjMKzXxlwsze9D+CQxh8oh?= =?us-ascii?Q?r7sIrZHd6zHEABJPH4xPuYANJKiBq1D4tHPtqlKbJ8xArWE/i7xXBVUj6Jjy?= =?us-ascii?Q?usEuZGyaiUirJ3LTN4P5wcAV88u/s0biWVLaD8963g4H5N1j8T13XLz+by6i?= =?us-ascii?Q?pihK1aqjhp4s2JAF2M+6FLRSr6n4WwEwfLYumj4smjCZequBOASFtwKNNeEn?= =?us-ascii?Q?1sVaIG1UybBlGj+6iAHkc23Ayu9m0UxUfNy86l0AhsmghGfmvGZpS2ksCxLC?= =?us-ascii?Q?FWfLNwM+UECGm0FGSrCdi3S77o9MVFFvg7B7dJSSf+Fh25OYjY+T0EX5mjPI?= =?us-ascii?Q?HYe91YkZcJiatKRpqX7InclgiFFkNe0UKFhSG6VpDydDgRPJQ+xoGCwYfgCr?= =?us-ascii?Q?vUPMmW8pRyOeXG7weoFO7PzJ83EQNKmgRPjKJxXX?= Content-Type: multipart/related; boundary="_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_"; type="multipart/alternative" MIME-Version: 1.0 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 71e7qBkCL/Udr3t73s4MsXiRz8EcfvdxbsT2orjBqli8f3p4KJnTR99Z/yt2ez75wxT/UuM8kt/OJA8Z7QLXeWVJ8+aobip1MXAsEmFeg65BrWNUKAb5v6bfWufQFvUog9CKuhlaH7eyAbIKX7AL6fJMvxIAzujZi627se+jT7vSWies4QTfct/TSWjJoDuTQtyDR6MSlURux9vpBmKmPXjgTTb+hpWMCZ4Vr0rCND5zgcQ/AWeDYR9k8HkxeQlkNfFZbBZRr6jK7mjPEvCZ6FHLwxfc7uPhej0xeU1+3DFaUmu2lFmoFcLwbYhJ2C6jrArF3Jxw4vLvHEAUu+sR4DgftLAXgvNKKaHH28IIl5/9K9K5WOHbJ444125PSzNyK2sdXR0tffmkapTRbYp8hvQyQoHgnYP//+p1BjMv2zAIWFnDCqSbviAu2EWTiA5at63OyVWI6TEufxwIOY6FPx+fbUtFY0GJGaFmIOTjtZycjyR+4VUFFpV3D4/S72F32PM2ndEda3WbbIahvR8v8Ucu6cYyb/VGLtgbSyGKP87OTUCYacctTbIF+pRWVCJDS4aSHIxhBfo8ZohYLhgOvKb9oBZHV7QzI2lst6rOIzg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR10MB4728.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36ad75ba-628a-4612-6f07-08dc1b30baea X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Jan 2024 09:58:48.7674 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: V1FF7bpxLbEDw4Qp/q5TECdfRC6zMgbSQkkUwjY2GLWjO7yf9U8mW9MbX/TwkjLDkxQjG5+189WVFEpqJ4K9ggRo+5iX/znjQ+9SHr2/ucQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5895 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-01-21_04,2024-01-22_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 adultscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2401220071 X-Proofpoint-GUID: a7AgmT3muWzNc4g4RzZ2cp-WX3H-QsF2 X-Proofpoint-ORIG-GUID: a7AgmT3muWzNc4g4RzZ2cp-WX3H-QsF2 X-BeenThere: users@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK usage discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: users-bounces@dpdk.org --_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: multipart/alternative; boundary="_000_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_" --_000_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi Team, The issue we are facing: We have a telecom product called "Session Boarder Controller(SBC)" version = 6400 in which we are using DPDK version 22.11.1. Users have encountered instances where the activation of ASLR in the Linux = Kernel results in DPDK initialization failures on the SBC 6400 platform. As= ASLR is needed for FIPS, this issue poses a challenge for users seeking to= benefit from both enhanced security through ASLR and the high-performance = packet processing capabilities offered by DPDK. Problem analysis The DPDK defines the memory type in the following way: The number of huge page types * the number of NUMA nodes present in the sys= tem i.e. 2 * 1 =3D 2, which means that there are two memory types (two huge= pages 1GB and 2MB) with one NUMA node. Deciding the amount of memory going towards each memory type is a balancing= act between maximum segments per type, maximum memory per type, and number= of detected NUMA nodes. The goal is to make sure each memory type gets at = least one memseg list. The total amount of memory is limited by RTE_MAX_MEM_MB value. The total amount of memory per type is limited by either RTE_MAX_MEM_MB_PER= _TYPE, or by RTE_MAX_MEM_MB divided by the number of detected NUMA nodes. A= dditionally, maximum number of segments per type is also limited by RTE_MAX= _MEMSEG_PER_TYPE. This is because for smaller page sizes, it can take hundr= eds of thousands of segments to reach the above specified per-type memory l= imits. Additionally, each type may have multiple memseg lists associated with it, = each limited by either RTE_MAX_MEM_MB_PER_LIST for bigger page sizes, or RT= E_MAX_MEMSEG_PER_LIST segments for smaller ones. The number of memseg lists= per type is decided based on the above limits, and also take number of det= ected NUMA nodes, to make sure that doesn't run out of memseg lists before = we populate all NUMA nodes with memory. #define RTE_MAX_MEM_MB 524288 defined in rte_build_config.h file. #define RTE_MAX_MEM_MB_PER_TYPE 65536 defined in rte_config.h fil= e. #define RTE_MAX_MEMSEG_PER_LIST 32768 #define RTE_MAX_MEM_MB_PER_LIST 65536 #define RTE_MAX_MEMSEG_PER_TYPE 32768 max_mem =3D (uint64_t)RTE_MAX_MEM_MB << 20; max_mem_per_type =3D RTE_MIN((uint64_t)RTE_MAX_MEM_MB_PER_TYPE <<= 20, max_mem / n_me= mtypes); The following logs are captured from 6400 during boot-up time: EAL: eal_dynmem_memseg_lists_init:117 n_memtypes =3D 2!!!!! EAL: eal_dynmem_memseg_lists_init:124 max_mem:549755813888 max_me= m_per_type :68719476736 EAL: eal_dynmem_memseg_lists_init:132 max_seglists_per_type =3D 6= 4!!!!! EAL: eal_dynmem_memseg_lists_init:175 max_segs_per_type =3D 64!!!= !! EAL: eal_dynmem_memseg_lists_init:179 max_segs_per_list =3D 64!!!= !! EAL: eal_dynmem_memseg_lists_init:184 max_mem_per_list =3D 687194= 76736!!!!! EAL: eal_dynmem_memseg_lists_init:188 n_segs =3D 64!!!!! Each memory type is created the following named memseg lists: * memseg-1048576k-0-0(1GB) with 64 segments: * memseg-2048k-0-0(2MB) with 32768 segments. During SBC 6400 initialization, requesting the system to create 64 huge pag= es of 1GB size. DPDK allocates all these 64 huge pages of 1 GB size in a co= ntiguous physical memory location. If all these pages are allocated in a co= ntiguous memory location, no issue has been observed while remapping the hu= ge pages into the memory segment list of size 64. But with ASLR enabled, it= is not guaranteed that the memory for huge pages will always be allocated = in contiguous memory locations. When ASLR is enabled, if DPDK creates the m= emory for huge pages in a contiguous memory location, remapping the huge pa= ge memory into the memory segment list will be done at once in one step. Th= is is the default behavior. The issue is happening while remapping the 64 huge pages, not created in co= ntiguous physical memory, into the memory segment list. When huge pages are= not contiguous, the remapping will be done in two steps: 1st step: Huge page memory layout: 0 1 2 3 4 5 6 7 8 9..................= ..............................................................63 For example, if 0-9 pages are contiguous, and the rest of the huge pages ar= e stored in different physical memory locations, only 0-9 huge pages will b= e remapped into the memory segment list. Memory segment list: 0 1 2 3 4 5 6 7 8 9..................= ..............................................................63 2nd Step: Remapping will be done again for the rest of the huge pages, this time, as = the memory segment list is not empty (as it is already having 9 segments), = DPDK is leaving a space for one segment in the memory segment list and try = to remap the huge pages into the rest of the segments in the memory segment= list. As both huge pages and memory segment list are equal in size 64, DPD= K is failing to get the enough memory from the memory segment list as it is= already left the space for one segment in the memory segment list. Huge page memory layout: 0 1 2 3 4 5 6 7 8 9 = 10 11 ..................................................63 The remaining huge pages are 54. DPDK tries to remap the 54 huge pages into= the memory segment list. But the memory segment list is having 53 segments as it is left one segment= for a hole. Hence, the memory allocation would be failed and initializatio= n of DPDK would also be failed. Memory segment list: 0 1 2 3 4 5 6 7 8 9 10 11 12 = 13 .....................................................63 [cid:image001.png@01DA4D47.AE9DB9C0] [cid:image002.png@01DA4D47.AE9DB9C0][Leave space for a hole if memory segme= nt list is not empty][The space is having only for 53 segments.] Note: Why DPDK is leaving a space for a hole in a memory segment list? Basically, DPDK is leaving the space to know how many segments there are in= order to map all pages into one address space, and leave appropriate holes= between segments so that rte_malloc does not concatenate them into one big= segment. But in this case, all the 64 pages are belongs to one address spa= ce and leaving space for a hole is not required. The following are my queries: 1. Why the space is leaving in the memseg list? And what is the signific= ance of the hole? 2. Can I scale up the size of the memory segment list to greater than th= e 64? Regards, Sudhakar --_000_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi Team,

 

The issue we are facing:

We have a telecom product called “Session Boar= der Controller(SBC)” version 6400 in which we are using DPDK version = 22.11.1.

Users have encountered instances where the a= ctivation of ASLR in the Linux Kernel results in DPDK initialization failur= es on the SBC 6400 platform. As ASLR is needed for FIPS, this issue poses a challenge for users seeking to benefit from both = enhanced security through ASLR and the high-performance packet processing c= apabilities offered by DPDK.

 

Problem analysis<= o:p>

T= he DPDK defi= nes the memory type in the following way:

= The number of huge page types * the number= of NUMA nodes present in the system i.e. 2 * 1 =3D 2, which means that the= re are two memory types (two huge pages 1GB and 2MB) with one NUMA node.

=  

Deciding the amount of = memory going towards each memory type is a balancing act between maximum se= gments per type, maximum memory per type, and number of detected NUMA nodes. The goal is to make sure each memory ty= pe gets at least one memseg list.

 

The total amount of mem= ory is limited by RTE_MAX_MEM_MB value.

 

The total amount of mem= ory per type is limited by either RTE_MAX_MEM_MB_PER_TYPE, or by RTE_MAX_ME= M_MB divided by the number of detected NUMA nodes. Additionally, maximum number of segments per type is also limited b= y RTE_MAX_MEMSEG_PER_TYPE. This is because for smaller page sizes, it can t= ake hundreds of thousands of segments to reach the above specified per-type= memory limits.

 

Additionally, each type= may have multiple memseg lists associated with it, each limited by either = RTE_MAX_MEM_MB_PER_LIST for bigger page sizes, or RTE_MAX_MEMSEG_PER_LIST segments for smaller ones. The number of= memseg lists per type is decided based on the above limits, and also take = number of detected NUMA nodes, to make sure that doesn't run out of memseg = lists before we populate all NUMA nodes with memory.

 

      &nbs= p;   #define RTE_MAX_MEM_MB 524288 defined in rte_build_config.h = file.

      &nbs= p;   #define RTE_MAX_MEM_MB_PER_TYPE 65536 defined in rte_co= nfig.h file.

      &nbs= p;   #define RTE_MAX_MEMSEG_PER_LIST 32768

      &nbs= p;   #define RTE_MAX_MEM_MB_PER_LIST 65536

      &nbs= p;   #define RTE_MAX_MEMSEG_PER_TYPE 32768    = ;         

 

      &nbs= p;   max_mem =3D (uint64_t)RTE_MAX_MEM_MB << 20;=

      &nbs= p;   max_mem_per_type =3D RTE_MIN((uint64_t)RTE_MAX_MEM_MB_PER_TY= PE << 20,        

      &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;    max_mem / n_memtypes);

 

      &nbs= p;   The following logs are captured from 6400 during boot-up time:

      &nbs= p;   EAL: eal_dynmem_memseg_lists_init:117 n_memtypes =3D 2!!!!= !

      &nbs= p;   EAL: eal_dynmem_memseg_lists_init:124 max_mem:549755813888 m= ax_mem_per_type :68719476736

      &nbs= p;   EAL: eal_dynmem_memseg_lists_init:132 max_seglists_per_type = =3D 64!!!!!

      &nbs= p;   EAL: eal_dynmem_memseg_lists_init:175 max_segs_per_type =3D = 64!!!!!

      &nbs= p;    

    = ;      EAL: eal_dynmem_memseg_lists_init:179 max_segs_per_li= st =3D 64!!!!!

      &nbs= p;   EAL: eal_dynmem_memseg_lists_init:184 max_mem_per_list =3D 6= 8719476736!!!!!

EAL: eal_dynmem_memseg_= lists_init:188 n_segs =3D 64!!!!!        = ;    

 

= Each memory type is created the following = named memseg lists:

·     &= nbsp;   memseg-1048576k-0-0(1GB) with 64 segments:

·     &= nbsp;   memseg-2048k-0-0(2MB) with 32768 segments.

=  

During SBC 6400 init= ialization, requesting the system to create 64 huge pages of 1GB size. DPDK= allocates all these 64 huge pages of 1 GB size in a contiguous physical memory location. If all these pages are a= llocated in a contiguous memory location, no issue has been observed while = remapping the huge pages into the memory segment list of size 64. But with = ASLR enabled, it is not guaranteed that the memory for huge pages will always be allocated in contiguous memo= ry locations. When ASLR is enabled, if DPDK creates the memory for huge pag= es in a contiguous memory location, remapping the huge page memory into the= memory segment list will be done at once in one step. This is the default behavior. 

 

The issue is happeni= ng while remapping the 64 huge pages, not created in contiguous physical me= mory, into the memory segment list. When huge pages are not contiguous, the remapping will be done in two steps:

 

1st st= ep:

 

Huge page memory lay= out:

   0 =    1     2     3 &nb= sp;   4     5     6 =     7     8     9= 230;…………………………&= #8230;…………………………= ;…………..63

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

For example= , if 0-9 pages are contiguous, and the rest of the huge pages are stored in= different physical memory locations, only 0-9 huge pages will be remapped = into the memory segment list.

 =

Memory segm= ent list:

   0 =    1     2     3 &nb= sp;   4     5     6 =     7     8     9= 230;…………………………&= #8230;…………………………= ;…………..63

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

&nb= sp;

2nd= Step:

Remapping w= ill be done again for the rest of the huge pages, this time, as the memory = segment list is not empty (as it is already having 9 segments), DPDK is lea= ving a space for one segment in the memory segment list and try to remap the huge pages into the rest of the s= egments in the memory segment list. As both huge pages and memory segment l= ist are equal in size 64, DPDK is failing to get the enough memory from the= memory segment list as it is already left the space for one segment in the memory segment list.

 =

Huge page memory lay= out:

   0 =    1     2     3 &nb= sp;   4     5     6 =     7     8     9&nb= sp;            =       10   11     &#= 8230;…………………………= ……………..63

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

The remaini= ng huge pages are 54. DPDK tries to remap the 54 huge pages into the memory= segment list.

But the mem= ory segment list is having 53 segments as it is left one segment for a hole= . Hence, the memory allocation would be failed and initialization of DPDK w= ould also be failed.

Memory segm= ent list:

   0 =    1     2     3 &nb= sp;   4     5     6 =     7     8     9&nb= sp;    10   11   12   13 = …………………………R= 30;………………..63<= /p>

 

 

 

 

 

 

 

 

 

 

<= /span>

 

 

 

 

 

 

 

 

 

 

 

 

 

3D"Leav=3D"The

&nb= sp;

&nb= sp;

  &nbs= p;            <= /o:p>

 =

Note: Why DPDK is leaving a = space for a hole in a memory segment list?

Basically, DPDK is leaving t= he space to know how many segments there are in order to map all pages into= one address space, and leave appropriate holes between segments so that rte_malloc does not concatenate them into o= ne big segment. But in this case, al= l the 64 pages are belongs to one address space and leaving space for a hol= e is not required.

 

The following are my queries= :

1.    Why the space is leaving in the memseg list? And wh= at is the significance of the hole?

2.    Can I scale up the size of the memory segment list = to greater than the 64?

 =

Regards,

Sudhakar

        &nbs= p;             =              &n= bsp;           

--_000_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_-- --_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: image/png; name="image001.png" Content-Description: image001.png Content-Disposition: inline; filename="image001.png"; size=436; creation-date="Mon, 22 Jan 2024 09:58:44 GMT"; modification-date="Mon, 22 Jan 2024 09:58:45 GMT" Content-ID: Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAAsAAAAxCAMAAAFMlJNJAAAAAXNSR0IArs4c6QAAAARnQU1BAACx jwv8YQUAAABOUExURQAAAFeX11+f31ua01+f1Fqa1Fub1Fub1Vub1Vub01ub1FmZ1Vqa1VmZ01qa 1Vqa1Fub1Vqb1Vub1Fqa1Vub1Vqa1Vqa1Fub1Vua1lyb1BrUVeMAAAAadFJOUwAgCHAYMJefp0Cv ULdYv2DPj9/ngO/3/zhIdy7TuAAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAMlJREFUKFONkgsPgjAM hMtLnA82YYr8/z9q726YxYTEL+kDRttbg/1yhWst2mSzZVvxGNxGt5fbzS26ndz+JKHJQ7lZo3BX yApnhVmBQ80VEEx2OvrQZZas5RvyplexitRPlRoBzftU3GcX0tIX9ErHG73K1EJXQNMhpNxDBFRc VkqToIG+MJe7glSdTJpARk0gupqo81hWAELZChhSSZym7I7Uy1lc6E4t6EjEQ4smRyI2/AUg+goc 6diQLkxdm6ff3fbPSgQw+wBGPgbFSgot/gAAAABJRU5ErkJggg== --_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: image/png; name="image002.png" Content-Description: image002.png Content-Disposition: inline; filename="image002.png"; size=600; creation-date="Mon, 22 Jan 2024 09:58:45 GMT"; modification-date="Mon, 22 Jan 2024 09:58:45 GMT" Content-ID: Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAAAUQAAAASCAMAAAFjk2c8AAAAAXNSR0IArs4c6QAAAARnQU1BAACx jwv8YQUAAABdUExURQAAAFeX11qa1V+f31+fz1mZ0lua01+f1Fqa1Fub1Fub1Vub01ub1FmZ1Vqa 1Vqa1Vqa1Fqa1Vub1Vqb1Vub1Vub1Fub1Fqa1Vub1Vqa1Vqa1Fub1Vua1lqb1Fyb1Dx40IUAAAAf dFJOUwAghwgQKHAYMJefQK9Qt79gaM+P199454Dv9/84x0gFplFjAAAACXBIWXMAAA7DAAAOwwHH b6hkAAABWUlEQVRIS+3X23KCMBAGYBAEW9qGgujatX3/x3Sz+VdwxrF2HBiw+S4Ih5yAwCbJHxRI e1VF5Byzc0RVFc5xSEZ3re3kiHRyetftVPc+F41uSbc3VYKIVs65LTNvJV3JsT+NHKBPkF91P3oO /i178sKVvHwZA51eq5nD8EGeH+R5kUzeXnJ63zjGZR05npYdxTtSQXE8Pq8c6YwRDwbjDKT4+Ap8 jPJddvKNrsPV7BDSx2zQxq5vQ4XfgQ/7AS7bD2GD4lfU7LAnndX0iEKo4rc2CmRPtfAYzr+z8gtd nLN8j50oipaG3LyiyiKRjxNdjaOz/EYcWpQ1Yp6xcGwQIU2jcbPX4bxpUcyESlea9234zLJCZv53 LCzvZJHeoHnTonvGz2aGGpw3fu06sEOtBhOhacn05mI1lPqF9iVbRMEHum8+0X1Toqb/raQDc1wA Pi47YieKJpckJ3gdLK+S+KhqAAAAAElFTkSuQmCC --_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: application/octet-stream; name="image003.emz" Content-Description: image003.emz Content-Disposition: inline; filename="image003.emz"; size=983; creation-date="Mon, 22 Jan 2024 09:58:45 GMT"; modification-date="Mon, 22 Jan 2024 09:58:46 GMT" Content-ID: Content-Transfer-Encoding: base64 H4sIAAAAAAACC+2Wz4sUVxDHq2fG2K5iWrPKKqK9y66MuocJrLoEf7yNZAliYElMToK66hpBzeqK 4MkWPOTgYS+Ch5CjQg7BP0HyNySn9Q8QkkC8eBEy+XzfdPW0mx0xOVvwnfd9VfWqq+q91z2JmV0F r7vdrvAX/BPg8tUOs1/WmeWffTFrltjwRrNjGJvuUI7FerPpltmHDbN28qbx0VBq4X7LCGCTIAeE O5CExHbBM9DInq1o2bkS8j0D5oB8x0LLNsElu8OGio8Tw/Wd0IixSAMpjo+G9ZWtFazi27FqzQgY Ahlw2QDJwB/gEJgA8t1MwDrfWuqV85dgESL+kh4yVLIsJcLzx07YeXp9xebtJr/v5b924OJtS7XG 90GtHcS1t+W5aJyGCy4KsgVo/dcPV2bOfroyIxt7HHWnGHtnSNr+WZiD53b6gs5IPb7noDMyiy0j cAvo3O4PZuOlv84ktOihz9fwwUUSfSJLg7X8mborUnIHs6lgSVmnrRGnwA30nzUReufb69sTmt4n G8e2VqyFyefTxIkifqNpx4WhYIXXxrHvUnIlP/yYntxz99Xno2hSMA8UWz5aI5DX0Tis4rxCqn2V k/eXOMU3KDrA5XfIQbDOFTbXfLpZ6Cl8La+nKg6WmHeZw0y11IqKKwft5TK4D7SXaUgaU/A28D34 Hh7l1+FZrZG4DdpNQ6N5BNIp9S3GuqhPmnu/xNU3S5J722rvs3ft21nWTwPlolHiozWSN951PWvv 1/tU7z09jf2exOVv9lf4E34YeB3qs/rNm7rpMf5Pr9vE1PmoP181j5V6nS/txyPwAAy4W1gk/Xuz P/zr/kWPus9efDK0XlMamgPuWv+utFijfCWjIAW7wQiQ0DvT2eyArUC+qkf2cl18Lw2j1DdI/r+B 7UB+/l6S7SOgZ5wCnmM9/nK0XeLrctsuWW5Ltgi/EPmCfcfXJmee27fwq1F7xRaYX4Nfi/Y7zI4d UQ0C+1dB+6G56z8oORsec5FeuWgu7qPWONcouJ/qly9/JeIovfuPwL0/b+vbC/zUm23gCWiDBNT7 NsF8JxjUtwLbEj24HDtx3W7RBX2flyLLI8vtOh2SRb1ahN2JOSt/5axcNWru9alW71tdJ73XKX9f I19x74v2WH4jpY6h+oY9ZqKafwZtUK9ZNtUs3aCa57Dl9nFn9TdsDL2er3umGOJc7eqdKT6Lbgro uQPuX4EJ9L83oyhU2zxQTM/tInz1f06fv8IWwD77iV+X/p0u47thzbFej/LeBTKgvBuhlwvT+M0f FkEyIP4Po7S0FBQLAAA= --_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: image/png; name="image004.png" Content-Description: image004.png Content-Disposition: inline; filename="image004.png"; size=1864; creation-date="Mon, 22 Jan 2024 09:58:46 GMT"; modification-date="Mon, 22 Jan 2024 09:58:46 GMT" Content-ID: Content-Transfer-Encoding: base64 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 --_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: application/octet-stream; name="image005.emz" Content-Description: image005.emz Content-Disposition: inline; filename="image005.emz"; size=931; creation-date="Mon, 22 Jan 2024 09:58:46 GMT"; modification-date="Mon, 22 Jan 2024 09:58:47 GMT" Content-ID: Content-Transfer-Encoding: base64 H4sIAAAAAAACC+2WTWtTURCG5yZRYxVNtZYuiqallapFArZaRO2pYlBQKFJdCdVav8CP2oroyogV XKgURHGvgrjwHwgiLl26q3/CjQiC8XlP7rm5jYmoawfee947M2cyM+fjJjKzS+B7tVoVXsF3gyCP 283eLzMrHjxaNovsVZvZPozZ4BCPlRVmIzmztRmzgWip8Vlb3tx8zghgg6AICLctcpF1wwsgU3i3 qGmnYsj3JBgH8u11OVsNl2x0KxPeR4ygL7mMj0UaSGW0x61IbDlnCe/EqjldgHL8HAYvK3kWwAuw E/QD+a4hYJofQzdDwsr5C31jSGRBSoTf7D1gp+nvRZuyWZ7/5W87MH3D8poTeq/WtuLrsGmt5KO1 jfdFZgIuBFHAdiC/408Wxyb3L47Jxhp73RHG2h6Str4XxuFFq1a1R9LxQz7aI2VsBQLngPbtVmfW F/trT0IrNdR5Ex9cJN7Hs7yzXPhNnRUpOYOFIWdRXKc1iVPBDdR/q9/V9neob5PLhj5ZH7Zmsc4N fh4hjhfxa1kbFdqcVUJtHIEqJSfy7d7bw5tufz3UgyYPpoBiy0dzBPLa64cGzhWSrLGcQn+JUzmB ogSCPIcMg2VBYePZUptQU4S5XE9JHCw+7ziHsWSqVRKuHLSWC2AeaC3zLsoMwQdAWIP7cC+fOsqa Iwk2aDXvMtk9kFKszzGmRX3Se+iXuPpmUXRnQ+o++9O+TTJ/BCgXjZIwWiZactfVrLVn6FO69/TU 93sQlx+sr/ASvguEOtRn9dvoe4jxL70eIKb2R/r3VXNvrNf+0no8Aw9Ai7OFRVI/N1vdL+fPe6R9 NuNTQBtqyrtsi7NWPys55ihfSQ/Ig42gC0jonWlvlsA6IF/VI3s8z99LH3jXVpX/XdAJ5BfuJdnW gw5wBIQc0/Gvo5+wC3bWijZnM3xxznh+kbci+tN2g2/PFTvPm+4u5Sqo16yV5xqXx+8spu4Wb9Mo X9mF9Lt4up7f1fkRX9WyATwEA6Cxzv7Y3qrOm9ivUsclu0Ul5+CzjMO2g+ccFZ+3yzyv2HXetsf3 tOpN16K+qR6N6Voae7Eq9lPN6nkY0/VOoBceAdX1FDTWJZvqUq2t6hrH1uy70ot+NdDeVwxxfWPS vIxuCOh3W5yJCiZQ/wb0oFAPpoBihtym4Y3/A8P7G2wObLHXPIPUz1kcPxiajul6lHc3KADlnXHJ ufDf4Q70kgIQ/wmVUAd0qAoAAA== --_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_ Content-Type: image/png; name="image006.png" Content-Description: image006.png Content-Disposition: inline; filename="image006.png"; size=1558; creation-date="Mon, 22 Jan 2024 09:58:47 GMT"; modification-date="Mon, 22 Jan 2024 09:58:47 GMT" Content-ID: Content-Transfer-Encoding: base64 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 R8Cua5OgGwAAAABJRU5ErkJggg== --_009_PH0PR10MB472839FEC31AB6CC8352C5F0EA752PH0PR10MB4728namp_--