Simplify numasupport (#84207)
authorAdeel Mujahid <3840695+am11@users.noreply.github.com>
Thu, 6 Apr 2023 23:23:56 +0000 (02:23 +0300)
committerGitHub <noreply@github.com>
Thu, 6 Apr 2023 23:23:56 +0000 (16:23 -0700)
* Simplify numasupport

* short-circuit

* Cleanup from QUIC readme

* Address CR feedback: early bail for < 2 NUMA nodes

* Fix node numbering, which is 0-based

19 files changed:
.devcontainer/libraries/Dockerfile
.devcontainer/wasm/Dockerfile
docs/workflow/requirements/linux-requirements.md
eng/install-native-dependencies.sh
src/coreclr/gc/unix/CMakeLists.txt
src/coreclr/gc/unix/config.gc.h.in
src/coreclr/gc/unix/configure.cmake
src/coreclr/gc/unix/gcenv.unix.cpp
src/coreclr/gc/unix/numasupport.cpp [new file with mode: 0644]
src/coreclr/gc/unix/numasupport.dynamic.cpp [deleted file]
src/coreclr/gc/unix/numasupport.h
src/coreclr/gc/unix/numasupport.static.cpp [deleted file]
src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Unix.targets
src/coreclr/nativeaot/Runtime/CMakeLists.txt
src/coreclr/nativeaot/docs/compiling.md
src/coreclr/pal/src/config.h.in
src/coreclr/pal/src/configure.cmake
src/libraries/System.Net.Http/tests/StressTests/HttpStress/Dockerfile
src/libraries/System.Net.Quic/readme.md

index ff924ca7466f9b34f876361defa3c8d5d754adbe..2b9ab8a9f83be97f3452f2b54ae31e2781cbbcab 100644 (file)
@@ -23,7 +23,6 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
         libicu-dev \
         liblttng-ust-dev \
         libssl-dev \
-        libnuma-dev \
         libkrb5-dev \
         zlib1g-dev \
         ninja-build
index cd29264dbff2999e31d3d6b14b2cb138ee5f952d..ffb5b4f494b1ed1bf231cfba15d0377deb5c0800 100644 (file)
@@ -23,7 +23,6 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
         libicu-dev \
         liblttng-ust-dev \
         libssl-dev \
-        libnuma-dev \
         libkrb5-dev \
         zlib1g-dev \
         ninja-build
index ac2c02bacefdd3cad5bae067f700e37fabe3dc6a..b36c0627a92fbff3176a1e27b48f7fffe5647070 100644 (file)
@@ -37,14 +37,13 @@ Install the following packages for the toolchain:
 * liblttng-ust-dev
 * libssl-dev
 * libkrb5-dev
-* libnuma-dev (optional, enables numa support)
 * zlib1g-dev
 * ninja-build (optional, enables building native code with ninja instead of make)
 
 ```bash
 sudo apt install -y cmake llvm lld clang build-essential \
 python-is-python3 curl git lldb libicu-dev liblttng-ust-dev \
-libssl-dev libnuma-dev libkrb5-dev zlib1g-dev ninja-build
+libssl-dev libkrb5-dev zlib1g-dev ninja-build
 ```
 
 You now have all the required components.
index 428df963051d2b1401b939675b937951dc4793a1..60265718a35b9316328b0b455c7a457d56b67c83 100755 (executable)
@@ -28,7 +28,7 @@ case "$os" in
         apt update
 
         apt install -y build-essential gettext locales cmake llvm clang lldb liblldb-dev libunwind8-dev libicu-dev liblttng-ust-dev \
-            libssl-dev libkrb5-dev libnuma-dev zlib1g-dev
+            libssl-dev libkrb5-dev zlib1g-dev
 
         localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
         ;;
index 36d9cfe406e1822277de3e44a4bc520019a87aa3..83c0bf8a67d8b4cd6994913c935b0c2cad14bcb7 100644 (file)
@@ -5,7 +5,7 @@ include(configure.cmake)
 
 set(GC_PAL_SOURCES
     gcenv.unix.cpp
-    numasupport.dynamic.cpp
+    numasupport.cpp
     events.cpp
     cgroup.cpp)
 
index 25bcc98a29383e50a4dceabdb09603f99f0a317c..a0798d5d23cbe8a710175107ac456678de62324d 100644 (file)
@@ -11,7 +11,6 @@
 #cmakedefine01 HAVE_VM_FLAGS_SUPERPAGE_SIZE_ANY
 #cmakedefine01 HAVE_MAP_HUGETLB
 #cmakedefine01 HAVE_SCHED_GETCPU
-#cmakedefine01 HAVE_NUMA_H
 #cmakedefine01 HAVE_VM_ALLOCATE
 #cmakedefine01 HAVE_SWAPCTL
 #cmakedefine01 HAVE_SYSCTLBYNAME
index 7ed3e12211bfb65b02609a3046be8e1afb06a2a9..5f2b1b8b26234d8f56820be57beba06227f4df73 100644 (file)
@@ -10,7 +10,6 @@ include(CheckLibraryExists)
 
 check_include_files(sys/time.h HAVE_SYS_TIME_H)
 check_include_files(sys/mman.h HAVE_SYS_MMAN_H)
-check_include_files(numa.h HAVE_NUMA_H)
 check_include_files(pthread_np.h HAVE_PTHREAD_NP_H)
 
 check_function_exists(vm_allocate HAVE_VM_ALLOCATE)
index 9590a9e73d00d3a52463f88fe0170cc9af5978fb..399e9a379d8eef8860012d943a45a16d54db89b4 100644 (file)
@@ -318,7 +318,6 @@ void GCToOSInterface::Shutdown()
     munmap(g_helperPage, OS_PAGE_SIZE);
 
     CleanupCGroup();
-    NUMASupportCleanup();
 }
 
 // Get numeric id of the current thread if possible on the
@@ -615,7 +614,7 @@ bool GCToOSInterface::VirtualCommit(void* address, size_t size, uint16_t node)
     }
 #endif
 
-#if HAVE_NUMA_H
+#ifdef TARGET_LINUX
     if (success && g_numaAvailable && (node != NUMA_NODE_UNDEFINED))
     {
         if ((int)node <= g_highestNumaNode)
@@ -628,12 +627,12 @@ bool GCToOSInterface::VirtualCommit(void* address, size_t size, uint16_t node)
             int index = node / sizeof(unsigned long);
             nodeMask[index] = ((unsigned long)1) << (node & (sizeof(unsigned long) - 1));
 
-            int st = mbind(address, size, MPOL_PREFERRED, nodeMask, usedNodeMaskBits, 0);
+            int st = BindMemoryPolicy(address, size, nodeMask, usedNodeMaskBits);
             assert(st == 0);
             // If the mbind fails, we still return the allocated memory since the node is just a hint
         }
     }
-#endif // HAVE_NUMA_H
+#endif // TARGET_LINUX
 
     return success;
 }
@@ -1430,14 +1429,14 @@ bool GCToOSInterface::GetProcessorForHeap(uint16_t heap_number, uint16_t* proc_n
             if (availableProcNumber == heap_number)
             {
                 *proc_no = procNumber;
-#if HAVE_NUMA_H
+#ifdef TARGET_LINUX
                 if (GCToOSInterface::CanEnableGCNumaAware())
                 {
-                    int result = numa_node_of_cpu(procNumber);
+                    int result = GetNumaNodeNumByCpu(procNumber);
                     *node_no = (result >= 0) ? (uint16_t)result : NUMA_NODE_UNDEFINED;
                 }
                 else
-#endif // HAVE_NUMA_H
+#endif // TARGET_LINUX
                 {
                     *node_no = NUMA_NODE_UNDEFINED;
                 }
diff --git a/src/coreclr/gc/unix/numasupport.cpp b/src/coreclr/gc/unix/numasupport.cpp
new file mode 100644 (file)
index 0000000..918d481
--- /dev/null
@@ -0,0 +1,86 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+#include "numasupport.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <minipal/utils.h>
+
+// The highest NUMA node available
+int g_highestNumaNode = 0;
+// Is numa available
+bool g_numaAvailable = false;
+
+#ifdef TARGET_LINUX
+static int GetNodeNum(const char* path, bool firstOnly)
+{
+    DIR *dir;
+    struct dirent *entry;
+    int result = -1;
+
+    dir = opendir(path);
+    if (dir)
+    {
+        while ((entry = readdir(dir)) != NULL)
+        {
+            if (strncmp(entry->d_name, "node", STRING_LENGTH("node")))
+                continue;
+
+            int nodeNum = strtoul(entry->d_name + STRING_LENGTH("node"), NULL, 0);
+            if (result < nodeNum)
+                result = nodeNum;
+
+            if (firstOnly)
+                break;
+        }
+
+        closedir(dir);
+    }
+
+    return result;
+}
+#endif
+
+void NUMASupportInitialize()
+{
+#ifdef TARGET_LINUX
+    if (syscall(__NR_get_mempolicy, NULL, NULL, 0, 0, 0) < 0 && errno == ENOSYS)
+        return;
+
+    int highestNumaNode = GetNodeNum("/sys/devices/system/node", false);
+    // we only use this implementation when there are two or more NUMA nodes available
+    if (highestNumaNode < 1)
+        return;
+
+    g_numaAvailable = true;
+    g_highestNumaNode = highestNumaNode;
+#endif
+}
+
+int GetNumaNodeNumByCpu(int cpu)
+{
+#ifdef TARGET_LINUX
+    char path[64];
+    if (snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%d", cpu) < 0)
+        return -1;
+
+    return GetNodeNum(path, true);
+#else
+    return -1;
+#endif
+}
+
+long BindMemoryPolicy(void* start, unsigned long len, const unsigned long* nodemask, unsigned long maxnode)
+{
+#ifdef TARGET_LINUX
+    return syscall(__NR_mbind, (long)start, len, 1, (long)nodemask, maxnode, 0);
+#else
+    return -1;
+#endif
+}
diff --git a/src/coreclr/gc/unix/numasupport.dynamic.cpp b/src/coreclr/gc/unix/numasupport.dynamic.cpp
deleted file mode 100644 (file)
index 45cf278..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#include "numasupport.h"
-
-// The highest NUMA node available
-int g_highestNumaNode = 0;
-// Is numa available
-bool g_numaAvailable = false;
-
-#if HAVE_NUMA_H
-#include <unistd.h>
-#include <errno.h>
-#include <stdio.h>
-#include <dlfcn.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#define PER_FUNCTION_BLOCK(fn) decltype(fn)* fn##_ptr;
-FOR_ALL_NUMA_FUNCTIONS
-#undef PER_FUNCTION_BLOCK
-
-void* g_numaHandle = nullptr;
-
-static bool ShouldOpenLibNuma()
-{
-#ifdef TARGET_LINUX
-    // This is a simple heuristic to determine if libnuma.so should be opened.  There's
-    // no point in linking and resolving everything in this library if we're running on
-    // a system that's not NUMA-capable.
-    int fd = open("/sys/devices/system/node/possible", O_RDONLY | O_CLOEXEC);
-
-    if (fd == -1)
-    {
-        // sysfs might not be mounted, not available, or the interface might have
-        // changed.  Return `true' here so NUMASupportInitialize() can try initializing
-        // NUMA support with libnuma.
-        return true;
-    }
-
-    while (true)
-    {
-        char buffer[32];
-        ssize_t bytesRead = read(fd, buffer, 32);
-
-        if (bytesRead == -1 && errno == EINTR)
-        {
-            continue;
-        }
-
-        close(fd);
-
-        // If an unknown error happened (bytesRead < 0), or the file was empty
-        // (bytesRead = 0), let libnuma handle this.  Otherwise, if there's just
-        // one NUMA node, don't bother linking in libnuma.
-        return (bytesRead <= 0) ? true : strncmp(buffer, "0\n", bytesRead) != 0;
-    }
-#else
-    return true;
-#endif // TARGET_LINUX
-}
-
-#endif // HAVE_NUMA_H
-
-// Initialize data structures for getting and setting thread affinities to processors and
-// querying NUMA related processor information.
-// On systems with no NUMA support, it behaves as if there was a single NUMA node with
-// a single group of processors.
-void NUMASupportInitialize()
-{
-#if HAVE_NUMA_H
-    if (!ShouldOpenLibNuma())
-    {
-        g_numaAvailable = false;
-        g_highestNumaNode = 0;
-        return;
-    }
-
-    g_numaHandle = dlopen("libnuma.so.1", RTLD_LAZY);
-    if (g_numaHandle == 0)
-    {
-        g_numaHandle = dlopen("libnuma.so.1.0.0", RTLD_LAZY);
-        if (g_numaHandle == 0)
-        {
-            g_numaHandle = dlopen("libnuma.so", RTLD_LAZY);
-        }
-    }
-    if (g_numaHandle != 0)
-    {
-#define PER_FUNCTION_BLOCK(fn) \
-    fn##_ptr = (decltype(fn)*)dlsym(g_numaHandle, #fn); \
-    if (fn##_ptr == NULL) { fprintf(stderr, "Cannot get symbol " #fn " from libnuma\n"); abort(); }
-FOR_ALL_NUMA_FUNCTIONS
-#undef PER_FUNCTION_BLOCK
-
-        if (numa_available() == -1)
-        {
-            dlclose(g_numaHandle);
-        }
-        else
-        {
-            g_numaAvailable = true;
-            g_highestNumaNode = numa_max_node();
-        }
-    }
-#endif // HAVE_NUMA_H
-    if (!g_numaAvailable)
-    {
-        // No NUMA
-        g_highestNumaNode = 0;
-    }
-}
-
-// Cleanup of the NUMA support data structures
-void NUMASupportCleanup()
-{
-#if HAVE_NUMA_H
-    if (g_numaAvailable)
-    {
-        dlclose(g_numaHandle);
-    }
-#endif // HAVE_NUMA_H
-}
index 6cbe644e261f31355462f5fa87eb1e1e4ac9cf99..5798ce5bae15ac92140e5b2e0d48af497622c7d0 100644 (file)
@@ -4,39 +4,8 @@
 #ifndef __NUMASUPPORT_H__
 #define __NUMASUPPORT_H__
 
-#include "config.gc.h"
-
-#if HAVE_NUMA_H
-
-#include <numa.h>
-#include <numaif.h>
-
-#endif // HAVE_NUMA_H
-
 void NUMASupportInitialize();
-void NUMASupportCleanup();
-
-#if HAVE_NUMA_H
-
-// List of all functions from the numa library that are used
-#define FOR_ALL_NUMA_FUNCTIONS \
-    PER_FUNCTION_BLOCK(mbind) \
-    PER_FUNCTION_BLOCK(numa_available) \
-    PER_FUNCTION_BLOCK(numa_max_node) \
-    PER_FUNCTION_BLOCK(numa_node_of_cpu)
-
-// Declare pointers to all the used numa functions
-#define PER_FUNCTION_BLOCK(fn) extern decltype(fn)* fn##_ptr;
-FOR_ALL_NUMA_FUNCTIONS
-#undef PER_FUNCTION_BLOCK
-
-// Redefine all calls to numa functions as calls through pointers that are set
-// to the functions of libnuma in the initialization.
-#define mbind(...) mbind_ptr(__VA_ARGS__)
-#define numa_available() numa_available_ptr()
-#define numa_max_node() numa_max_node_ptr()
-#define numa_node_of_cpu(...) numa_node_of_cpu_ptr(__VA_ARGS__)
-
-#endif // HAVE_NUMA_H
+int GetNumaNodeNumByCpu(int cpu);
+long BindMemoryPolicy(void* start, unsigned long len, const unsigned long* nodemask, unsigned long maxnode);
 
 #endif // __NUMASUPPORT_H__
diff --git a/src/coreclr/gc/unix/numasupport.static.cpp b/src/coreclr/gc/unix/numasupport.static.cpp
deleted file mode 100644 (file)
index 630ae52..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-
-#include "numasupport.h"
-
-#if HAVE_NUMA_H
-#define PER_FUNCTION_BLOCK(fn) decltype(fn)* fn##_ptr = fn;
-FOR_ALL_NUMA_FUNCTIONS
-#undef PER_FUNCTION_BLOCK
-
-#endif // HAVE_NUMA_H
-
-// The highest NUMA node available
-int g_highestNumaNode = 0;
-// Is numa available
-bool g_numaAvailable = false;
-
-void NUMASupportInitialize()
-{
-#if HAVE_NUMA_H
-    if (numa_available() != -1)
-    {
-        g_numaAvailable = true;
-        g_highestNumaNode = numa_max_node();
-    }
-#endif // HAVE_NUMA_H
-}
-
-void NUMASupportCleanup()
-{
-    // nop
-}
index fe75a0fe71d99a81c403875e3ec2434cd7ccc8c1..2c1edf7ab0ecdb3eae3982f1946119195e509e53 100644 (file)
@@ -58,8 +58,6 @@ The .NET Foundation licenses this file to you under the MIT license.
       <NativeLibrary Include="$(IlcSdkPath)$(FullRuntimeName).a" />
       <NativeLibrary Include="$(IlcSdkPath)$(EventPipeName)$(LibFileExt)" />
       <NativeLibrary Condition="'$(LinkStandardCPlusPlusLibrary)' != 'true' and '$(StaticICULinking)' != 'true'" Include="$(IlcSdkPath)libstdc++compat.a" />
-      <NativeLibrary Condition="'$(StaticNumaLinking)' == 'true'" Include="$(IlcSdkPath)libnumasupportstatic.a" />
-      <NativeLibrary Condition="'$(StaticNumaLinking)' != 'true'" Include="$(IlcSdkPath)libnumasupportdynamic.a" />
     </ItemGroup>
 
     <ItemGroup>
@@ -81,12 +79,6 @@ The .NET Foundation licenses this file to you under the MIT license.
       <NativeLibrary Include="@(NetCoreAppNativeLibrary->'%(EscapedPath)')" />
     </ItemGroup>
 
-    <ItemGroup Condition="'$(StaticNumaLinking)' == 'true' and '$(NativeLib)' != 'Static'">
-      <StaticNumaLibs Include="-Wl,-Bstatic" Condition="'$(StaticExecutable)' != 'true'" />
-      <StaticNumaLibs Include="-lnuma" />
-      <StaticNumaLibs Include="-Wl,-Bdynamic" Condition="'$(StaticExecutable)' != 'true'" />
-    </ItemGroup>
-
     <ItemGroup Condition="'$(StaticICULinking)' == 'true' and '$(NativeLib)' != 'Static'">
       <NativeLibrary Include="$(IntermediateOutputPath)libs/System.Globalization.Native/build/libSystem.Globalization.Native.a" />
       <DirectPInvoke Include="libSystem.Globalization.Native" />
@@ -134,7 +126,6 @@ The .NET Foundation licenses this file to you under the MIT license.
       <LinkerArg Include="-lrt" Condition="'$(_IsApplePlatform)' != 'true'" />
       <LinkerArg Include="-licucore" Condition="'$(_IsApplePlatform)' == 'true'" />
       <LinkerArg Include="-L/usr/lib/swift" Condition="'$(_IsApplePlatform)' == 'true'" />
-      <LinkerArg Include="@(StaticNumaLibs)" Condition="'$(StaticNumaLinking)' == 'true'" />
       <LinkerArg Include="@(StaticICULibs)" Condition="'$(StaticICULinking)' == 'true'" />
       <LinkerArg Include="@(StaticSslLibs)" Condition="'$(StaticOpenSslLinking)' == 'true'" />
       <LinkerArg Include="-lm" />
index a8348c97bbeeb492f209694f2db2b27fda829d91..9fe5db45c6d62c2acbdbbc87632b4a9afc1e864c 100644 (file)
@@ -148,6 +148,7 @@ else()
   list(APPEND COMMON_RUNTIME_SOURCES
     unix/PalRedhawkUnix.cpp
     ${GC_DIR}/unix/gcenv.unix.cpp
+    ${GC_DIR}/unix/numasupport.cpp
     ${GC_DIR}/unix/events.cpp
     ${GC_DIR}/unix/cgroup.cpp
   )
@@ -276,11 +277,3 @@ endif()
 if(FEATURE_PERFTRACING)
   add_subdirectory(eventpipe)
 endif()
-
-if (CLR_CMAKE_TARGET_UNIX)
-  add_library(numasupportdynamic STATIC ${GC_DIR}/unix/numasupport.dynamic.cpp)
-  install_static_library(numasupportdynamic aotsdk nativeaot)
-
-  add_library(numasupportstatic STATIC ${GC_DIR}/unix/numasupport.static.cpp)
-  install_static_library(numasupportstatic aotsdk nativeaot)
-endif(CLR_CMAKE_TARGET_UNIX)
index de7524384ffb3e4db564ed30476051f0d7743558..5ba64ee6d958811dd27e9d53b9e70539987aa681 100644 (file)
@@ -127,29 +127,3 @@ Alpine
 ```sh
 apk add cmake openssl-dev openssl-libs-static
 ```
-
-## Using statically linked NUMA
-This feature can statically link NUMA library (libnuma.a) into your applications at build time.
-NativeAOT binaries built with this feature can run even when NUMA libraries are not installed.
-
-You can use this feature by adding the `StaticNumaLinking` property to your project file as follows:
-
-```xml
-<PropertyGroup>
-  <StaticNumaLinking>true</StaticNumaLinking>
-</PropertyGroup>
-```
-
-License (LGPL v2.1): https://github.com/numactl/numactl/blob/master/LICENSE.LGPL2.1. Note that this license imposes specific requirements on distribution of statically linked binaries.
-
-### Prerequisites
-
-Ubuntu
-```sh
-apt install libnuma-dev
-```
-
-Alpine
-```sh
-apk add numactl-dev
-```
index 578deeb89d0c0c039c574385cb806e4fc8b89c99..50d12de47da1db7a2734ca66bb8a42485e0422a3 100644 (file)
@@ -19,7 +19,6 @@
 #cmakedefine01 HAVE_RUNETYPE_H
 #cmakedefine01 HAVE_GNU_LIBNAMES_H
 #cmakedefine01 HAVE_PRCTL_H
-#cmakedefine01 HAVE_NUMA_H
 #cmakedefine01 HAVE_PTHREAD_NP_H
 #cmakedefine01 HAVE_AUXV_HWCAP_H
 #cmakedefine01 HAVE_SYS_PTRACE_H
index 114e88409c473d2ff97537ea658dd6f442b5f170..99c53c3f35e4506ff2bb0f3ddd7f37f4b88c403f 100644 (file)
@@ -46,7 +46,6 @@ check_include_files(lwp.h HAVE_LWP_H)
 check_include_files(runetype.h HAVE_RUNETYPE_H)
 check_include_files(semaphore.h HAVE_SEMAPHORE_H)
 check_include_files(sys/prctl.h HAVE_PRCTL_H)
-check_include_files(numa.h HAVE_NUMA_H)
 check_include_files("sys/auxv.h;asm/hwcap.h" HAVE_AUXV_HWCAP_H)
 check_include_files("sys/ptrace.h" HAVE_SYS_PTRACE_H)
 check_symbol_exists(getauxval sys/auxv.h HAVE_GETAUXVAL)
index ac80635340b6b75ab97fc1d421dddd74dea1f890..e56f8c80c32124b3fbefc089318dfb7e01f74bc0 100644 (file)
@@ -5,7 +5,7 @@ FROM $SDK_BASE_IMAGE
 WORKDIR /msquic
 RUN apt-get update -y && \
     apt-get upgrade -y && \
-    apt-get install -y cmake clang ruby-dev gem lttng-tools libssl-dev libnuma-dev && \
+    apt-get install -y cmake clang ruby-dev gem lttng-tools libssl-dev && \
     gem install fpm
 RUN git clone --recursive https://github.com/dotnet/msquic
 RUN cd msquic/src/msquic && \
index 234c24682d41b88dea6862dc517e622939499017..039ce733a233a387a65124f54b51bcddfafbc88e 100644 (file)
@@ -92,7 +92,7 @@ To consume the current main branch of msquic, we pull code from [dotnet/msquic](
 WORKDIR /msquic
 RUN apt-get update -y && \
     apt-get upgrade -y && \
-    apt-get install -y cmake clang ruby-dev gem lttng-tools libssl-dev libnuma-dev && \
+    apt-get install -y cmake clang ruby-dev gem lttng-tools libssl-dev && \
     gem install fpm
 RUN git clone --recursive https://github.com/dotnet/msquic
 RUN cd msquic/src/msquic && \
@@ -120,4 +120,4 @@ Officially released `msquic.dll` is published to NuGet.org, see [Microsoft.Nativ
 To consume MsQuic from the current main branch, we use [dotnet/msquic](https://github.com/dotnet/msquic) repository which will build and publish `msquic.dll` to the transport feed, e.g. [dotnet8-transport](https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet8-transport). And from there, it'll get flown into this repository via [Darc subscription](https://github.com/dotnet/arcade/blob/main/Documentation/Darc.md). See https://github.com/dotnet/runtime/blob/bd540938a4830ee91dec5ee2d39545b2f69a19d5/eng/Version.Details.xml#L7-L10 and maestro-bot PR: https://github.com/dotnet/runtime/pull/71900.
 
 
-System.Net.Quic [project file](https://github.com/dotnet/runtime/blob/0304f1f5157a8280fa093bdfc7cfb8d9f62e016f/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj) allows switching between those two options with [`UseQuicTransportPackage` property](https://github.com/dotnet/runtime/blob/0304f1f5157a8280fa093bdfc7cfb8d9f62e016f/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj#L15).
\ No newline at end of file
+System.Net.Quic [project file](https://github.com/dotnet/runtime/blob/0304f1f5157a8280fa093bdfc7cfb8d9f62e016f/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj) allows switching between those two options with [`UseQuicTransportPackage` property](https://github.com/dotnet/runtime/blob/0304f1f5157a8280fa093bdfc7cfb8d9f62e016f/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj#L15).