自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 【Linux内核思辩】kmallo VS vmalloc,谁与争锋?

kmalloc()函数的操作与用户空间的malloc()函数非常相似,不同之处在于多了一个flags参数。kmalloc()函数是获取内核内存的简单接口,以字节为单位分配内存。如果需要整页内存,之前讨论的接口可能是更好的选择。然而,对于大多数内核分配,kmalloc()是首选的接口。该函数返回一个指向至少size字节长度的内存区域的指针。分配的内存区域是物理连续的。出错时,它返回NULL。内核分配总是成功的,除非可用内存不足。因此,在所有调用kmalloc()后,必须检查NULL并适当处理错误。

2023-04-11 18:15:21 293

原创 【Linux内核解剖】内核问题之softlockup以及应对之法

操作系统(Operating System, OS)是管理计算机硬件和软件资源、协调计算机系统中各个任务执行的基本软件。操作系统的核心组件是内核(Kernel),它负责处理系统调用、内存管理、进程调度等基本功能。内核是操作系统的基石,其稳定性和性能对整个系统至关重要。Linux内核中有两种类型的lockup:softlockup和硬lockup。它们都会导致系统无响应,但原因和表现有所不同。softlockup通常是由于内核中的一个或多个任务长时间占用CPU,导致其他任务无法得到执行;

2023-04-09 15:59:10 2326

原创 【GPT系列-从理论到实践】Improving Language Understanding by Generative Pre-Training

为什么要有这片研究成果呢?之前的方法有什么困难,在NLP领域的各个任务上有什么不足?这段文字强调了从原始文本中有效地学习的能力对于减轻自然语言处理(NLP)中对监督学习依赖的重要性。大多数深度学习方法需要大量手动标注的数据,这限制了它们在许多因缺乏标注资源而受限的领域的适用性。在这些情况下,能够利用无标签数据中的语言信息的模型为收集更多标注提供了一种有价值的替代方案,因为收集标注可能既耗时又昂贵。此外,即使在监督较多的情况下,以无监督的方式学习良好的表示也可以显著提高性能。

2023-04-07 15:00:40 354

原创 【GPGPU编程】GPGPU架构剖析之谓词寄存器

我们知道CPU可以控制程序的条件执行,GPGPU也支持线程的条件执行,但是条件执行语句等对整体的计算性能影响比较大,为了尽可能提升GPGPU整体的计算吞吐量,在GPGPU内部集成了谓词寄存器。

2023-04-06 10:00:35 911 1

原创 【GPGPU编程】GPGPU内部的可编程处理器,可编程体现在哪里?

综上所述,GPGPU内部的可编程多处理器(SM)具有高度可编程性,允许开发者编写自定义的并行程序,实现各种图形渲染和通用计算任务。这种可编程性体现在支持可编程着色器、并行编程模型、动态调度和高级功能支持等方面。我们一般称GPGPU的核心是可编程多处理器,在NVDIA中称为流处理器,即Streaming Multiprocessor, SM,在AMD的架构中称之为计算单元,即Compute Unit, CU。可编程着色器:现代GPU架构支持可编程着色器,如顶点着色器、几何着色器、片段着色器和计算着色器等。

2023-04-05 22:07:34 229

原创 【GPGPU编程】核心概念blockIdx和blockDim区别和联系

而线程网格是由线程块组成,其数量有gridDim来指定。线程块是线程的集合,其数量由blockDim来指定。我们在编程时会通过blockIdx和blockDim和数据的索引index来建立映射。线程网格是最大的线程范围,它包含了主机代码在启动内核函数时所涉及到的所有线程。在GPGPU的架构中,有两个核心概念:blockIdx和blockDim。这两个有什么区别和联系呢?

2023-04-04 13:33:21 424

原创 【C++高并发编程】reactor并发编程模型

Reactor模式是一种事件驱动的并发编程模型,它解决了在高并发环境下处理大量客户端请求的问题。Reactor模式的核心思想是将事件的处理逻辑与事件分发机制解耦,使得程序能够以非阻塞方式处理多个I/O事件。Reactor模式利用操作系统提供的I/O多路复用机制(如select、poll、epoll等),高效地监听和分发事件。Reactor模式的基本组件:fill:#333;color:#333;color:#333;fill:none;分发事件生成事件处理事件Reactor事件处理器事件源。

2023-04-01 18:46:51 969

原创 【C++高性能编程专题】高并发编程模式

不同的是,Proactor模式中的事件处理是基于异步操作完成的,即IO操作完成后,系统会发出信号通知应用程序,然后应用程序可以处理已完成的IO操作。在Actor模式中,每个Actor都是单线程执行,因此不需要考虑线程同步和资源竞争的问题,可以避免很多并发问题,提高程序的可维护性和可靠性。Active Object模式是一种基于消息传递的并发模式,它通过将对象的方法调用封装为消息,将消息传递给对象的消息队列中,然后由对象的私有线程从队列中取出消息进行处理。该模式通常使用同步线程池和异步事件处理器来实现。

2023-04-01 12:36:00 603

原创 【shell高级特性】shell参数扩展

我们在编程生涯中,打交道最多的便是shell脚本了,帮助我们批量完成任务。但是,很多人对bash的使用其实是比较浅的,很多shell的高级特性没有涉入到。这节介绍下shell中的参数扩展。

2023-04-01 11:16:00 186

原创 【理论与实战篇】操作系统,从理论到实战:篇一,多系统引导

这一篇我们先来实现引导程序,即一个bootloader,用于引导后续的操作系统。为了方便,我们的程序设计遵循多系统引导协议,更加通用化。

2023-03-31 15:05:31 633

原创 【Linux内核动态追踪】kprobes深度剖析和实战

当你尝试加载一个未经验证的内核模块时,内核会输出 “module verification failed: signature and/or required key missing” 的错误信息,并且内核会被 “taint”,表示内核已经不再是干净的状态。这需要一些额外的步骤,包括生成公钥和私钥、使用私钥为内核模块创建数字签名、将公钥添加到系统的信任列表等。在 Linux 系统中,数字签名可以用于验证内核模块的完整性和真实性,从而防止未经验证的内核模块对系统的安全性和稳定性产生威胁。

2023-03-30 17:29:01 269

原创 【性能工具专题】内存分析工具之smem使用深度解析

PSS和USS可以帮助您识别和调试共享内存问题,而RSS可以帮助您了解进程实际使用的物理内存量。如果您需要更深入地了解进程的内存使用情况,则可以查看PSS、USS和RSS值的详细报告,以识别问题并进行调试。因此,PSS表示进程当前使用的内存量,其中包括共享库和代码的内存;RSS表示进程当前在RAM中驻留的物理内存总量,它包括进程所使用的所有内存,包括共享内存、私有内存和页缓存。当使用smem命令时,它将返回一个内存使用情况报告,其中包括一些缩写词,如PSS、USS和RSS。它可以统计的比较详细。

2023-03-27 17:39:32 702

原创 【工具强化】Jupyter Notebook插件

这一篇,我们来争强jupyter notebook的功能,使得这个工具可以帮我们更加高效地工作。在前一章,我们已经安装好了jupyter noteboo,并且配置了远程访问的功能。再次在服务器上启动jupyter notebook。在客户端重新刷新页面,就可以看到很多插件选项了。需要在服务区上启动某些插件。通过运行以上三个命令安装。

2023-03-25 19:29:52 152

原创 【实战debug】jupyter notebook远程访问设置

服务器上配置jupyter notebook以后台服务进程方式启动,默认启动时不调用服务器端的浏览器。在客户端浏览器中输入服务器ip+port来登陆jupyter notebook服务。以上设置完成后,就可以在服务器上启动 jupyter notebook。设置为True,默认时False,且被#注释了。,设置启动notebook时默认不打开浏览器。设置为’*',默认是"localhost"的交互式shell中,输入命令。环境中生成的密码hash值。

2023-03-25 18:01:37 581

原创 深度学习,从理论到实践

笔者从2015年就开始入局机器学习,深度学习,那时候,基于机器学习的各项比赛如火如荼,2015年,AplhaGo大战李世石,揭开了人工智能走向大众的序幕。如果,2023年,OpenAI的ChatGPT,尤其是GPT3.5之后的大模型技术能力更是惊人,写代码,写文章,给建议,翻译等各项任务无所不能。

2023-03-25 17:14:55 61

原创 中断线程化,洞悉万象-从理论抽象级到代码实现级

尽管存在这些问题,中断线程化在很多实时和嵌入式系统领域已经变得非常普遍。许多驱动程序和系统已经成功地采用了线程化中断处理程序,从而改善了系统的实时性能和响应性。为了充分利用中断线程化的优势并减少潜在问题,驱动开发人员和系统设计者需要考虑以下因素:仅对需要实时性能和响应性的中断使用线程化处理程序。对于不需要实时性能的中断,可以继续使用传统的硬件中断处理程序。仔细权衡线程化中断处理程序的优先级,以确保高优先级任务可以及时抢占执行。在选择使用线程化中断处理程序时,注意避免不必要的上下文切换和调度开销。

2023-03-22 11:05:02 912

原创 ARM64异常模型之系统错误异常System Error

系统错误异常(System Error Exceptions)是处理器在遇到系统级别错误时引发的异常。这些错误通常与硬件故障、外部信号或系统总线错误有关。系统错误异常通常需要特殊的处理程序来诊断和处理,因为它们通常表明硬件设备、内存子系统或其他关键系统组件中存在问题。以下是一些常见的系统错误异常类型和相关说明:Synchronous External Abort(同步外部终止):这种异常在处理器试图访问发生错误的外部存储器位置时触发。

2023-03-20 22:24:37 1284

原创 精品品读:I’ll Do It Later: Softirqs, Tasklets, Bottom Halves, Task Queues, Work Queues and Timers

中断是对设备驱动程序的信号,表示有工作需要完成。然而,如果驱动程序在中断处理程序中做太多的工作,系统响应性能将会降低。直到Linux 2.3.42之前,避免这个问题的标准方法是使用bottom half或者task queue将一些工作调度到以后再做。这些处理程序在中断启用的情况下运行,处理时间较长对系统响应性的影响较小。为了实现更好的SMP可扩展性,用于softnet的工作引入了两个新的延迟工作的方法:softirq和tasklet。

2023-03-20 14:18:18 83

原创 中断延迟处理机制之Tasklet,从理论到实践

作为Linux内核中的下半部工作机制之一,tasklet有它存在的价值和意义,和其它的中断延迟工作机制互补。Tasklet是在I/O驱动中实现延迟执行函数的首选方法。如前所述,Tasklet是建立在两个名为HI_SOFTIRQ和的软中断之上。多个Tasklet可以与同一个软中断相关联,每个Tasklet都包含自己的函数。实际上,这两个软中断并没有什么区别,只是在函数中,它先执行HI_SOFTIRQ的Tasklet,再执行的Tasklet。Tasklet和高优先级Tasklet存储在和数组中。

2023-03-20 10:17:19 651

原创 Ftrace深度解析之篇一,开创者

Ftrace广泛应用于Linux内核的调试、性能分析和优化工作,为内核开发者提供了动态、低开销、灵活且易于使用的跟踪工具。此外,Ftrace还提供了过滤器和触发器功能,使得用户可以仅捕获感兴趣的数据,降低了分析和调试的难度。动态跟踪需求:内核开发者需要一种可以在运行时插入和移除探针的方法,以便在不修改内核代码或重新编译内核的情况下进行跟踪和分析。可扩展性:Ftrace是一个可扩展的框架,开发者可以为其添加新的跟踪器和事件,以满足未来的需求。这使得Ftrace成为了一个持续发展、适应不断变化需求的跟踪工具。

2023-03-19 18:46:55 92

原创 如何删除C++容器中满足特定条件的元素

C++ 中的 remove-erase idiom 解决了在删除容器(如 vector、list、deque 等)中满足特定条件的元素时可能遇到的以下问题:遍历与删除的问题:当我们在遍历容器的过程中删除元素时,可能会导致迭代器失效,从而引发未定义行为。remove-erase idiom 通过将要删除的元素移至容器末尾,并在遍历结束后统一删除,避免了这个问题。效率问题:直接使用容器的 erase 函数逐个删除元素可能导致低效的操作。

2023-03-18 21:40:36 801

原创 谈谈Linux内核的软中断机制

这些新的底半部处理机制解决了早期 “bottom half” 实现的问题,为内核提供了更好的性能、优先级支持和多处理器兼容性。自 Linux 内核 2.1.x 和 2.3.x 版本以来,Tasklets 和 SoftIRQ 已成为内核中的标准底半部处理机制,取代了早期的 “bottom half” 实现。硬件中断是由硬件设备触发的,用于通知 CPU 需要处理的事件。随着 Linux 内核的发展,越来越多的子系统需要更高效、灵活的底半部处理机制,而早期的 “bottom half” 无法满足这些需求。

2023-03-18 20:53:39 328

原创 Linux 伪/虚拟设备

伪设备是 Linux设备模型中的一种特殊设备,这种类型的设备可以不对应一个真实的硬件实体,即表示成一种虚拟的设备。Linux常见的伪设备/虚拟设备包括:它是一个块设备循环器,可以将文件作为块设备挂载到文件系统中。/dev/loop[x] 是一个虚拟块设备,它允许将一个文件或其他块设备映射到一个挂载点上。通过这种方式,用户可以创建一个虚拟文件系统,其中的文件看起来像是一个真正的磁盘分区。使用 /dev/loop[x] 可以方便地创建和管理磁盘映像文件、安装镜像和虚拟机等。

2023-03-18 16:32:59 298

原创 Linux系统调用之setfsuid

Linux系统调用深入解读,刨根挖底

2022-05-23 18:32:10 437 1

AIGC(GPT-4)赋能通信行业应用白皮书,以场景化的形式对 GPT- 4 如何赋能通信行业进行了分析

本白皮书通过对 AIGC 的典型代表 GPT-4 的研究,以场景化的形式对 GPT- 4 如何赋能通信行业进行了分析,并针对通信行业如何构建行业 GPT 进行了初 步探讨和实践。期待行业同仁围绕通信和人工智能协同创新,构建开放共享的创 新生态,促进人工智能与通信产业的深度融合,加速构建下一代信息基础设施, 助力经济社会数字化转型。 以 ChatGPT/ GPT-4 为代表的 AIGC 迈出了通用人工智能的第一步,开启了 AI 新代际,打开了诸多行业变革的想象天窗。AIGC 大模型将使机器可以大规模 参与知识类和创造性工作,成为继移动互联网之后未来最大的技术平台。 ChatGPT 首次实现了人与机器之间自然的交互界面,GPT-4 具备更高的交互理 解力和准确率。通信行业作为人与人、人与自然、人与机器之间进行信息交流与 传递的行业,天然具有与 ChatGPT/ GPT-4 的结合力。基于白皮书的分析可以看 到,AIGC 可作为先进生产力工具改进信息通信服务能力,从各个层面深度赋能 通信业,构建为千行百业数字化转型赋能的智慧通信。与此同时,AIGC 也将推 动通信业从人与人之间的沟通交流扩展

2023-04-07

C++高性能编程之proactor模式代码示例

C++高性能并发编程之proactor模式应用实例,应用于网络编程领域,包含一下几个部分: 1 服务器端程序:一个server代码展示如何使用现代C++11编程高并发代码,一个Makefile文件 2 客户端程序:一个客户端代码展示如何发送消息给服务器C++高并发代码实现,一个Makefile文件辅助编译 3 一份说明文件,帮助如何运行程序,安装必要的依赖库 4 代码实际测试可运行

2023-04-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除