自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ytfy339784578的专栏

新开的blog,把自己之前写的乱七八糟的东西都搬来啦,你一定想不到我是从QQ空间搬来的

  • 博客(77)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 一图说明tensor and pipeline model parallelism

self-attention是按照multi-head attention,两个GPU一边一个head计算各自出半个Y,然后各自半个Y再跟row tiling的B算出结果矩阵中50%的psum,然后两个GPU all-reduce做一下加法在两个GPU都合成出最终结果。其中MLP是A按列Tiling成两半,两个GPU各出半个Y,然后各自半个Y再跟row tiling的B算出结果矩阵中50%的psum,然后两个GPU all-reduce做一下加法在两个GPU都合成出最终结果。

2024-04-07 16:14:25 187

原创 训练-backpropagation

f(x,y)=xyx和y方向偏导(derive the partial derivative):最终就有可视化起来,(x+y)*z的back propagation会是这样的;是不是跟数字电路、神经很像。

2024-04-03 19:36:56 608

原创 Cache Coherent的代价

1. 有,可能独占可能share,CPU1的addr0状态变share,然后返回exclusive或share,然后CPU0读数据,这里是允许CPU0抢先读数据的(就是不用等CPU1返回,CPU0就读回数据来,等CPU1返回了再决定数据能不能用)CPU0和CPU1都Cache了addr0的数据,CPU0改掉了addr0的数据,但CPU1并不知道,然后CPU0给CPU1发了个内部中断,通知CPU1接收addr0的更改,结果CPU1看了看addr0,摇了摇头。真是不知道咋解决的。好像也是可以无的吧?

2024-03-21 21:40:05 641

原创 PASID 2022.3.7

1. 我认为的PASID意义无论在PF还是VF,PASID都是为了使Device(DMA/XPU)具备直接访问Host用户态进程内存空间的能力;在AMD和ARM,PASID都是通过与PRI/ATS合作,完成SVA(Shared Virtual Addressing),使设备具备与进程能共享虚拟地址空间。2. 为什么不将设备内存mmap到用户态,提供给用户使用PASID是使能Device master→Host DDR过程使用进程地址空间3. 我查到的PASID的应用状态。

2024-03-21 17:42:31 692

原创 照着PCIe 4.0 spec的目录写点东西 2021.1

高中有个挺不错的历史老师教给我们,看书不要先进入内容,要整本书都看以下再开始方的不片面。这个习惯我一直延续到现在,现在下定决心要解PCIe 4.0的spec,并且我对PCIe 4.0的熟悉程度远不如ARMv8 spec一般,所以还是按老路子走,先从目录和名词解释开始,虽然其实内容已经看过两章了。。。现在的PCIe的标准主要是一个叫做PCI SIG(Special interest group如果我没记错的话)的组织维护的,PCIe base specification 4.0 v1.0有1293页。从目

2024-03-21 17:25:59 705 1

原创 对VIPT PIPT VIVT这个事儿不能有局限性 2024.3

VIPT PIPT VIVT这几种Cache命中形式、Cache索引形式当然都是有非常多非常详细的解释,如果需要科普请直接在地址栏输入百度并回车。无非就是这仨大哥谁好谁不好,啥啥啥有缺陷,但在这里我要写的是一点其他的:好或不好其实都有用。

2024-03-20 17:47:16 1166

原创 备忘一次linux riscv cpu进入用户中断处理之前度过的时光 2024.3

按照1G Hz计算,一次中断要搞多久。

2024-03-20 15:28:06 377

原创 ARM和RISCV的barrier指令设计的思考 2024.3

回到最初的barrier设计的初衷,我们假设一个3G Hz主频的CPU,在访问cache的时候,可能只需要1个HZ,而在访问DDR的时候,需要等待100Hz-200Hz才能返回结果是是很稀松平常的事。而连续的data barrier是可以很容易的将CPU性能打到30M的(单片机),3G Hz的CPU只有30MHz的性能是多么可怕的事情,为了在这100Hz中减少CPU流水停滞,CPU在设计上会尽可能的将load/store早的发出,在load/store返回之前执行与此无关的指令。

2023-06-29 11:14:13 60

原创 x86在虚拟机里对由另一个线程atomic修改的变量polling,出现了长时间拿不到更新的变量数据的情况,不知为何?

改由__atomic_load()之后可正常获得更新后的变量值。

2022-05-29 00:02:19 211

原创 对比线程,一个VCPU是什么

1. VCPU是线程不?2. VCPU的线程是在用户态创建还是在KVM创建?3. 进入Guest代码的点?4. 退出Guest代码的点?5. VCPU的调度与用户线程的调度有何不同?7. 那么EL1的特殊寄存器集合是如何在每次context切换中保存/恢复的:

2022-05-28 23:59:47 1354 1

原创 __kvm_hyp_vector如何成为最终的EL2异常向量表

对于无VHE的情况 1. kvm_get_hyp_vector会给出__kvm_hyp_vector(A12/17/15似乎有不同的处理) 2. kvm_arch_hardware_enable->_kvm_arch_hardware_enable->cpu_hyp_reinit->cpu_init_hyp_mode-> __cpu_init_hyp_mode->kvm_call_hyp(pgd, stack, vector) 需...

2022-05-28 23:57:54 528

原创 从两个独立地址空间发起的对同一物理地址的atomic操作,是否会有效?

分析:atomic操作是ldrex/strex之类的指令,基于MESI或类MESI协议, 而MESI对与cache一致性是基于物理地址实现(如invalid), 所以,如果两个独立地址空间中映射同一个地址,那么这个地址就应该可以被atomic...

2022-05-28 23:56:16 142

原创 Qemu class和instance(存在其他更优秀的文档解释此命题,请自行搜索)

1. Qemu的type_init是在constructor属性中执行的,也就是在main之前,也就是所有type_init的设备都会在main之前执行其type_register_static;2. type_register_static会malloc TypeImpl数据结构,存放class_init/instance_init等回调函数和class_size/instance_size; 需要重点说下class_size:这是所注册设备Class数据结构的sizeof,比如 ...

2022-05-28 23:54:21 408

原创 为了在内核中可靠的持有一个进程,分析一下PID

出现一个新的pid的时机是在创建或操作进程;在较新的内核中,描述进程pid这个事儿由于掺杂了namespace变得复杂;以Flag CLONE_NEWPID为界,决定在create_new_namespace时,是否创建一个新的pid_namespace问题:PIDTYPE_PID/PIDTYPE_PGID/PIDTYPE_SID这几个不同的type的处理

2022-05-28 23:48:44 279

原创 CRIU内核补丁分析

1. 将procfs的proc_get_link中使用的inode传参改为dentry传参2. 在procfs添加/proc/pid/map_files/目录用于建立本进程到其所用动态库、进程的二进制文件的软链接,以文件在内存映射的VA地址段即文件名2.1 当dump一个进程的映射的时候,需要确切的知道其所用的二进制/动态库文件的映射地址,添加了map_files目录可以直接拿到这些映射2.2 用map_files做对比,也可以确定出此进程共享的匿名映射2.3 当restore一系列进程,这

2022-05-28 23:35:51 478

原创 Qspinlock的分析(仅分析快速获取部分,剩下部分是mcs锁的原理)

pending的加入使qspinlock对3竞争状态有极好的适应性A lock B pending C watch wait until timeout

2022-05-28 23:35:11 337

原创 Needleman–Wunsch algorithm

尼德曼-翁施算法这是一种对两个序列的相似性进行对比的算法(比如基因序列对比、蛋白质序列对比)偶尔看到一个硬件spec上有写对smith-waterman算法的优化,然后好奇学习了一下,结果就看到了它的爷爷needleman-wunsch算法。简单记录一下1. 对于两个序列首先形成如下带空行、空列矩阵,头一个空格置0GCATGCGGATTACA G C A T G C G 0 -1 -2 -3 -4

2022-05-28 23:32:09 736

原创 SOC上的总线真的是总线?

主要是基于ARM来表述一下soc总线的概念。

2022-05-28 18:54:18 1062 1

转载 霍夫曼编码的透彻示例

之前认真学过霍夫曼编码,但是时间一长又有点遗忘,偶然在维基百科看到霍夫曼编码的介绍,看到了一个很经典的示例,忍不住复习一下并裁剪过来以备再查,这是详细全文链接。霍夫曼树常处理符号编写工作。根据整组资料中符号出现的频率高低,决定如何给符号编码。如果符号出现的频率越高,则给符号的码越短,相反符号的号码越长。假设我们要给一个英文单字"F O R G E T"进行霍夫曼编码,而每个英文字母出现的频率分别列在下图。演算过程(一)进行霍夫曼编码前,我们先创建一个霍夫曼树。⒈将每个英文字母依照出现频率

2021-03-02 11:16:19 1947 2

原创 Hypervisor这个层次对TLB的使用与EL0/1比有限制吗

我在利用虚拟化这篇文章中出现了一个错误,这是一个不起眼,但是细思恐极,再细思安心的错误,我有这样一句话:对于在EL2中,这条尤其重要,很多cortex都会有IPA-PA相对于VA-PA的缩水,所以EL2中的代码要怎么做也是需要思考的问题。当然,现在我已经在这段话后面添加了一些解释,表述了自己的错误,我之前想当然的认为了:1阶段页表的虚拟地址是VA,对应EL1/0所用的地址,2阶段页表的...

2020-03-27 10:02:20 659

原创 iptables的背后

每次修改iptables为子设备做转发上网都要瞎搜索很久,iptables太踏马的复杂了,这次搜索完我一定要写点东西记住哪条规则让子设备上了网。背景:一台独设备A,只连接B设备;一台能上网设备B,有网卡与A连接;B设备B1网卡与A设备连接;B设备B2网卡上外网;完毕。目标:A设备上外网;完毕。实施:1. iptables的PREROUTING确保通常(一...

2020-03-13 20:27:32 1297

原创 GICv3-4宏观视图

按照主题来讲,首先是GIC本身这个大主题的拆解。从功能器件来看GICv3-4已经开始对虚拟化提供大量支撑,从物理硬件上,按照功能器件可以拆解成:Distributor、ITS、Redistributor、CPU interface的集合。先将图给出来:Distributor其中Distributor连接外设承载SPI(Shared Pheripheral Interrupts)...

2020-03-13 20:26:31 2238 11

原创 原子操作、MESI和内存屏障引起我对锁理解的智障2020.3

前言:先向已经贡献大量公开文档的前辈们致敬,不管是中文的、英文的;再鄙视一下ARM文档中关于DMB之类的文字,赤裸裸的鄙视,我截一段大家感受下:“The DMB instruction ensures that all affected memory accesses by the PE executing the DMB instruction that appear in program ...

2020-03-09 11:09:36 846 2

原创 内核中的DRM词汇解释

AGP(Accelerated Graphics Port)一种高速总线,允许图形卡从系统内存读数据,基于GART使不连续的内存在图形卡眼中作为连续处理,并使用DMA传输(还记着scatter-gather模式)。GART(Graphics Address Re-Mapping Table)我的理解就是IOMMU/SMMU之类的东西,外设的页表,然后外设可以访问不连续内存。GTT...

2020-02-28 15:32:52 621

原创 DRM的GEM

GEM(Graphics Execution Manager)主要完成:内存申请释放、指令执行、执行命令时的光圈管理(what?!)。缓存对象的申请主要与linux提供的shmem层相关。设备相关操作如指令执行、pinning、buffer读写、映射、域所有权的转移等,还是归设备驱动的ioctl。初始化使用GEM的驱动必须在struct drm_driver->driver_feat...

2020-02-28 15:32:03 4780 2

原创 三代DRI的变化

DRI1首先要说,DRI1已经不在考虑使用了,这里说一下它的原理:DRI1由于当时图形卡内存大小,只有一个屏幕front buffer+back buffer由所有DRI clients和X server使用,front buffer和back buffer就像现在显示系统的双缓冲一样,所有要做渲染操作的实体都直接渲染到back buffer,然后执行swap就更新画面,front变bac...

2020-02-28 15:30:34 1961

翻译 重用page->mapping

翻译自LWN.NET因为要在struct page这一小段内存中填入最大量的信息,linux kernel中的结构体page是最复杂的结构体之一。struct page中每一个区域都重度过载,开发者们都倾向于:若能避免,绝不对struct page做修改。不过,这并没有阻止JérômeGlisse在2018年Linux存储,文件系统和内存管理峰会的两次全体会议上提出重大更改的建议。建议提供了一...

2020-02-28 15:11:34 921

翻译 向struct page里塞更多东西

翻译并篡改更新自LWN.NET 2013年8月的一篇文章。通常,内核开发人员更倾向于设计可读性和可维护性高的数据结构。当人们理解一段代码使用的数据结构时,对代码本身的理解通常就不会遥远。因此,内核使用最频繁的数据结构之一也是其可理解性最差的之一,这个事实可能会令人惊讶。这个数据结构就是struct page,代表物理内存的页面。最近的一个补丁集,使struct page更加复杂,当然,这也为快...

2020-02-28 15:10:58 291

原创 信息量爆表的struct page->flags

先把kernel4.15的一段注释截图送上:很明显我关注的是之前crash中0x1ffff0000000000与0x5ffff0000000000的含义,然后再来一个神级大图:上面这个图很不错,但是对于不同的平台通过配置了.config中的参数如CONFIG_NODES_SHIFT、CONFIG_NR_CPUS等,flags中各段占据的字节数和bit分段点是不一样的,不过安排的顺序...

2020-02-28 15:10:22 560

原创 struct address_space解读

首先说的是Page Cacheaddress_space的操作将“文件”的某些部分映射到Linux page cache中的页面中。此page cache表示已映射到内存的某些物理设备(例如磁盘)上的数据。物理设备通常对应于磁盘,但不一定必须如此。以这种方式,page cache包含来自最近访问的“文件”的整个页面。在页面I / O操作(例如read()])中,内核检查数据是否驻留在page ...

2020-02-28 15:09:36 1758

原创 linux外设虚拟化的几个概念

VFIO(Virtual Function I/O)这是一个设备直通的方案,与Xen中的passthrough概念是一致的;主要是基于IOMMU和中断重映射,将制定的一个或几个设备安全的分配给某一个虚拟机使用,注意,是分配给单个虚拟机使用,它是在硬件支持的情况下解决单个设备多个虚拟机的问题。它是通过在硬件支持虚拟化如SR-IOV等特性的时候,将SR-IOV虚拟化出的物理设备实例直接映射给虚拟机...

2020-02-28 15:07:03 1173

原创 SMMUv3(2)

流的编号做一次转换需要地址、size以及相关属性如读/写/安全域/非安全域/可共享性/可缓存性;如果超过1个client设备使用SMMU流量,那么他们还要有StreamID来区分;StreamID在系统里的构建传送是具体实现决定的,逻辑上讲,一个StreamID就关联到一个发起转换的设备。物理设备到StreamID的映射必须描述给系统软件,ARM推荐StreamID用密集命名空间,从0开始;每...

2020-02-10 20:35:40 2861 12

原创 SMMUv3 (1)

一些词汇。DVM: Distributed Virtual Memory,相互传递广播TLB维护操作的消息的协议;RC: PCI-E的Root Complex,如下图:Endpoint(EP): 一个PCIE功能,用于一个SMMU client节点设备的contextPASID: Process Address Space ID,一个PASID是一个Endpoint的本地ID,...

2020-02-10 20:34:32 4476

原创 GICv3-4零散的寄存器解读(1)

ICC_SRE_EL3:控制EL3下选择系统寄存器接口,或内存映射接口,作为GIC CPU接口;(非正规表述就是对ICC_*/ICH*寄存器的访问是通过寄存器接口还是内存映射接口,如果使用内存映射接口,则访问寄存器会发生异常,并被本异常等级捕获) bit3 Enable:使能低异常等级对ICC_SRE_EL1/2的访问; 0-将Secure/non-SecureEL1...

2020-02-04 14:35:34 1350

原创 折书纸-一个快乐的小问题

给出要打印的页数n;打印时1张纸分4页,一摞纸从中间订成书后的页码要正确;页数n不能填满书的话,多余的页数要填NA。解决(代码不考虑输入过滤、溢出等问题):#include <stdio.h>#include <stdlib.h>void main(int argc, char* argv[]){ int n; char* arn; if(argc==2...

2020-02-03 22:39:45 151

翻译 Android内核似乎要向主线内核靠拢

2018.11.15Android设备都基于linux内核,但是这些设备从一开始并没有跑主线内核,因为添加了很多不在主线上的代码,这些主线外代码的内核代码的问题,正在想办法处理;虽然说现在就在这些Android设备上运行主线内核代码并不容易,但是比我们预想的可能更接近。Android内核从主线LTS内核而来,添加了Android指定代码来得到Android Common K...

2020-01-16 19:58:20 560

原创 DRM中的思路

linux已经有过fbdev管理图形适配器的FB,但是不能处理现代基于3D加速GPU的图形硬件。3D加速设备一般需要设置、管理一个在其硬件内部内存的指令序列,然后分发指令。DRM暴露有设备节点在/dev/dri/cardX,libdrm封装了对这个设备节点的操作。DRM包含两部分,generic DRM core,以及DRM Driver,DRM Driver是硬件相关部分。DRM cor...

2020-01-15 14:24:55 2349

原创 关于DRM(Direct Rendering Manager)的地位

1. 将关键的图形卡初始化放在内核,如上传固件,设置DMA区域2. 在多个用户态组件间共享渲染硬件,调度访问3. 控制用户态程序对DMA的使用,以防读写了不该动的数据,4. 通过提供显示内存alloc,管理图形卡内存5. 实现modesetting,FB放在了DRM内图片发自简书Appmodsetting是设置图形卡上的显示模式,从VGA中断或VESA调用,到直接操作图...

2020-01-15 14:24:46 382

原创 linux 图形栈的演进

1. 最开始,就是一段代码直接访问图形卡:XFree8 server;root运行XFree86 server,使之从用户态访问图形卡,不需要内核支持2D加速,非常容易在各操作系统间移植,不需要内核组件,就像这样:图片发自简书App2. 然后Utah-GLX 3D加速设计出现,也是从用户态访问图形卡,与2D完全独立,于此同时FrameBuffer驱动也开始推广,FB实现了另外的组件可以...

2020-01-15 14:24:36 1398

原创 图形驱动相关的一些词 surface pitch blit tiled,以及X中的一些词solid composite

1. surface 和 pitch图片发自简书App2. bilt图片发自简书App3. tiledNotice that surfaces are not always stored linearly in video memory, in fact for performance reasons it is extremely common that they ...

2020-01-15 14:24:28 410

AT指令集及其详解

详解了西门子系列GSM芯片 如 tc35 所使用的指令集AT+。

2014-02-13

深入浅出快速傅里叶算法,FFT详解

给基础不是很好,对傅里叶变换不太了解的朋友,内容甚至包含复数原理

2013-07-30

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

TA关注的人

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