基于Rust-vmm实现Kubernetes运行时
containerd-shim/busybox/docker-runc , /usr/bin/docker-runc /bin/bash /bad_init /proc/self/fd/ 4. Linux Kernel Patch Are those enough? NO https://landscape.cncf.io/category=container-runtime&format=ca Pod QEMU VMM Firecracker VMM Rust-VMM container container Pod Sandbox Agent gVisor Guest Kernel O C I Gofer container container Pod Sandbox Sentry KVM/ptrace File Access OCI Implementation Seccomp, cgroup VM-based Sandbox Kata-container BareMetal Only Heavy control logic Application kernel based Sandbox gVisor Compatibility problem, Bottleneck in sentry mVMd + QEMU + eklet is what0 码力 | 27 页 | 34.17 MB | 1 年前3绕过conntrack,使用eBPF增强 IPVS优化K8s网络性能
at PREROUTING chain • SNAT at POSTROUTING chain • Pros • Iptables is widely adopted in popular Linux distributions • Cons • O(N^2) in control plane / O(N) in data plane • Poor in scheduling algorithm service? • Not mature enough eBPF brief • Write C • Compile into eBPF assembly code • Inject to kernel • Attach to network tc hooks • Triggered by ingress/egress packets IPVS bypass conntrack • Why efficient and secure • V.S Taobao IPVS SNAT patch • Bypass conntrack/iptables • Less modification to kernel Comparison with industry • Pitfalls • Performance of clusters of the same configure may differ0 码力 | 24 页 | 1.90 MB | 1 年前3THE FIRST EXPLORATION OF PROJECT SPARROW
Hacking The Ethical Hacker's Handbook, Fourth Edition» (ISBN : 9787302428671) & «Linux Hardening in Hostile Networks, First Edition» (ISBN: 9787115544384) Pure software developmement org/wiki/Microkernel Security I. Background Difference Between Microkernel and Monolithic Kernel: Source: https://www.guru99.com/microkernel-in-operating-systems.html I. Background new-golden-age-for-computer-architecture/fulltext Source: https://www.zdnet.com/article/risc-v-the-linux-of-the-chip-world-is-starting-to- produce-technological-breakthroughs/ I. Background0 码力 | 68 页 | 13.14 MB | 1 年前3Rust 异步并发框架在移动端的应用 - 陈明煜
Async Timer Parallel Calc 事件 到达 注 册 事 件 任务优先级调度 Task priority and quality of service 任务优先级调度 Linux CFS 调度 : 线程优先级 • 设置线程的 Nice 值给予线程不同的权重 2 个线程 A 和 B 。 A 的权重是 1024 , B 的权重是 2048 。那么 A 获得 CPU 的时间比例是 (1024 + 2048) = 33.3% Task priority and quality of service 任务优先级调度 对框架内的工作线程设置优先级,使其 拥有不同权重。 • 由 Kernel 决定调度时间 • 高优先级任务由高权重线程调度, 以此获得更多执行时间 • 全局队列区分高低优先级 Task priority and quality of service 高权重线程0 码力 | 25 页 | 1.64 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程
• 定义函数 kernel ,前面加上 __global__ 修 饰符,即可让他在 GPU 上执行。 • 不过调用 kernel 时,不能直接 kernel() ,而 是要用 kernel<<<1, 1>>>() 这样的三重尖括 号语法。为什么?这里面的两个 1 有什么用 ?稍后会说明。 • 运行以后,就会在 GPU 上执行 printf 了。 • 这里的 kernel 函数在 GPU CPU 调用 kernel<<<1, 1>>>() 后,并不 会立即在 GPU 上执行完毕,再返回。实际上只是把 kernel 这个任务推送到 GPU 的执行队列上,然后立即 返回,并不会等待执行完毕。 • 因此可以调用 cudaDeviceSynchronize() ,让 CPU 陷 入等待,等 GPU 完成队列的所有任务后再返回。从而 能够在 main 退出前等到 kernel 在 GPU 比如这里设置了 RTX3000 系列的架构版 本号 86 ,在 RTX2080 上就运行不出结 果。 • 最坑的是他不会报错!也不输出任何东西 !就像没有那个 kernel 一样!所以一定 要注意调对你的版本号。否则就会这样 kernel 好像没有执行过一样,只有 CPU 上的代码被执行了。 指定多个版本号 • 可以指定多个版本号,之间用分号分割。 • 运行时可以自动选择最适合当前显卡的版0 码力 | 142 页 | 13.52 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 09 CUDA C++ 流体仿真实战
思路不同的是我先在刚刚的 advect_kernel 算出对流后要采样的位置( loc ),然 后再对 vel 和 clr 根据刚刚算得的 loc 移动位置。这样 RK3 的对流只需要算一遍,避免 重复对每个场都做一次对流的开销。 对流部分:最终实现 • 然后,在 SmokeSim::advection 中调用 advect_kernel 和 resample_kernel 。 • 首先通过 advect_kernel advect_kernel 算出对流后要采样的位置,写入到 loc 。然后再对 clr 和 vel 分别从 loc 算出的位置重 新采样。核函数的 gridDim 通过上整除技巧保证每个元素都能访问到, blockDim 为 8x8x8=512 。 • 如果在 resample_kernel 需要读取 clr ,然后再写入 clr ,并且读写是不同的坐标位置。 • 因此对 clr 和 vel 使用了双缓冲,写入0 码力 | 58 页 | 14.90 MB | 1 年前3Bringing Existing Code to CUDA Using constexpr and std::pmr
block_size - 1) / block_size; add_gpu<<>>(N, x, y); // … } Ok, about the kernel parameters 9 |__global__ void add_gpu(int n, float* x, float* y) { int i0 = blockIdx.x * blockDim TEST_CASE("cppcon-1", "[CUDA]") { // … add_gpu<< >>(N, x, y); // … } Ok, about the kernel parameters 10 |Memory“In a typical PC or cluster node today, the memories of the CPU and GPU are |Execution Space Specifiers The __global__ execution space specifier declares a function as being a kernel. Such a function is: • Executed on the device, • Callable from the host. The __device__ execution 0 码力 | 51 页 | 3.68 MB | 5 月前3C++23: An Overview of Almost All New and Updated Features
D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp(17): ConsoleApplication2! mainCRTStartup+0xE 5> KERNEL32!BaseThreadInitThunk+0x14 6> ntdll!RtlUserThreadStart+0x2165 Stacktrace Library Use-case: automatically __scrt_common_main_seh+0x12E ConsoleApplication2!__scrt_common_main+0xE ConsoleApplication2!mainCRTStartup+0xE KERNEL32!BaseThreadInitThunk+0x14 ntdll!RtlUserThreadStart+0x2167 Agenda C++23 Core Language Explicit0 码力 | 105 页 | 759.96 KB | 5 月前3C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化
并根据一定权重累加,然后用于修改自身的值。 • 比如求一个场的梯度、散度、旋度、拉普拉斯。如果场是用结构网格 ( structured grid )表示,那就是一个插桩操作。 • 插桩的内核( kernel )指的就是这个“周围范围”的形状(如右图三个例子) 和每个地方读取到值对修改自身值的权重等信息。 • 个人认为,图像处理中的模糊操作,或者是滤波操作,就属于插桩。有的 插桩内核各轴向是对0 码力 | 147 页 | 18.88 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
cmake 的文件,我称之为包配置文件。 • Qt5Config.cmake 是你安装 Qt5 时,随 libQt5Core.so 等实际的库文件,一起装到你的 系统中去的。以我的 Arch Linux 系统为例: • 包配置文件位于 /usr/lib/cmake/Qt5/Qt5Config.cmake 。 • 实际的动态库文件位于 /usr/lib/libQt5Core.so 。 find_package 是系统的架构,例如 x86_64-linux-gnu 或 i386-linux-gnu 。 • (用于伺候 Ubuntu 喜欢把库文件套娃在 /usr/lib/x86_64-linux-gnu 目录下) https://zhuanlan.zhihu.com/p/60479441 举例说明 find_package 搜索路径 • 例如你是 64 位的 Linux 系统, find_package(Qt5 t5Config.cmake • /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake • /usr/share/cmake/Qt5/Qt5Config.cmake • /usr/lib/Qt5/Qt5Config.cmake • /usr/lib/x86_64-linux-gnu/Qt5/Qt5Config.cmake • /usr/share/Qt5/Qt5Config0 码力 | 56 页 | 6.87 MB | 1 年前3
共 32 条
- 1
- 2
- 3
- 4