- 博客(84)
- 收藏
- 关注
原创 DMA摘录
bp->pdev->dev: struct device指针,可以平台初始化里指定,主要是dma_mask之类,可参考framebuffer。之后, 假如有数据包到了, 网卡就把它放到上述dma分配的内存里(DMA缓冲区)里, 操作系统可以从该dma缓冲区拿走数据, 提交至协议栈。queue->rx_buffers_dma: 返回的内存物理地址,dma就可以用。DMA是设备内置的, dma_mask可以控制该设备可以访问的内存范围。size: 实际分配大小,传入dma_map_size即可。
2024-01-17 15:14:57
386
原创 非内核模块makefile和kbuild
kbuildMakefileKSRC?all:make -C (KSRCM(PWD)clean:make -C (KSRCM。
2023-12-09 12:55:40
461
原创 为内核新增字符驱动模块
在./source/driver/char下放置模块文件夹。告诉char根据这个config编译。与其AAA的kconfig关联。makefile文件参考。Kconfig文件参考。
2023-12-08 16:40:55
421
原创 softlock_up以及时钟中断问题记录
内核开关, 打开之后可以检测软锁。软锁发生之后, 当cpu在设定的时间间隔中没有发生时间中断的话, 该机制就会发送一个nmi中断, 让系统重启。该机制用看门狗机制实现。内核开关, 用于消除某个cpu上的时钟中断, 可以在uboot的cmdline里指定想要关闭时钟中断的cpu核心序号。该功能主要应用于一些对时间性能很敏感的系统, 因为任务切换会伴随着时钟中断, 其中的上下文切换会对任务的性能和实时性产生影响, 若应用需要强性能和强实时性, 最好的情况是一个任务独占一个cpu, 不做任何时间片切换。
2023-11-07 11:04:44
324
原创 设备树与中断,操作系统如何使用中断
interrupts属性可以描述多个中断, 该示例只描述了一个中断, 用9 0描述。9代表中断控制器的中断号, 而0代表高低电平触发相关。irq-gpios属性则描述了该设备连到了第几个中断控制器, 该中断控制器的第几个中断号, 用什么电平触发。在内核中生成了一个中断号代表所有中断。首先 cpu工程师会写好中断控制器的设备树节点, 里面会定义寄存器以及如何描述中断, gpio@0209…然后用irq_of_parse_and_map获取可以使用的中断号。后者表示该设备是一个中断控制器。
2023-10-28 16:39:35
250
原创 平台总线模型简介
平台总线模型将一个驱动分成两部分device.cdriver.c。一个描述硬件, 一个控制硬件。平台总线通过比较字符串, 将name相同的device.c和driver.c匹配到一起来控制硬件。driver通过平台总线去拿到device.c内容。平台总线的优点是减少重复代码 提高效率。类似.h和.c的关系平台总线的原则是先分离, 后搭档。
2023-05-24 17:21:03
772
原创 dpdk环境初始化异常 “failed to allocate private data“
dpdk默认支持4个Numa节点。所以在编译的时候要用。
2023-05-22 17:42:03
421
1
转载 dpdk rx或tx queue与lcore的数量关系
写网卡仿真器的时候, 遇到了一个问题, 可不可以多个核心对应一条queue, 这样可以大大加速填充的速率, 但会引起竞争条件。遂查询dpdk官方定义。本文摘自intel官方文档。
2023-05-18 18:26:38
585
原创 DPDK pci设备初始化过程
设备初始化利用gcc的属性attribute(constructor)定义的函数,可以在main函数执行前运行,还可以指定优先级attribute(constructor(prio)),prio从101开始,值越小越早执行。不指定优先级的版本是优先级更低的。
2023-05-18 14:45:02
597
转载 dpdk PA和IOVA模式
举例来说,一种减少分段影响的方式是使用更大的分页——问题虽然没被解决,但是单独的1千兆字节(GB)段比独立的2兆字节(MB)段能大幅度减小分段的数量。但上述的解决方法都不能根本地解决问题,而且整个DPDK社区都习惯了要去解决这些问题,每个DPDK用户(有意或无意)在使用时都会采取相同的思维模式——“我需要X MB内存,但以防万一,我要保留X + Y MB!作为PA的IOVA模式下,分配到整个DPDK存储区的IOVA地址都是实际的物理地址,而虚拟内存的分配与物理内存的分配相匹配。IOMMU就是MMU+IO。
2023-05-17 15:00:54
869
原创 merge被打回需要重新多次commit的问题
因为我们使用的 patch 已经过时了,所以这一步肯定会报错并中断(注意,虽然命令停止执行了,但我们依然处于git am命令的运行环境中,可以通过git status命令查看到当前的状态)。Git 提供了两种补丁方案,一是用git diff生成的UNIX标准补丁.diff文件,二是git format-patch生成的Git专用.patch 文件。当reset回去之后, 将c1的补丁打回来, 按照领导的指令修改, 再commit.这样修改代码就非常麻烦 所以可以采取补丁的方式。
2023-05-17 11:28:02
535
原创 版本库头文件引用不对造成的Bug
排查了很久,最后的原因是在app层忘记引用头文件, 编译器自动去找了/usr/local下的头文件。且系统的dpdk库文件和此时正在开发的dpdk不符, 造成了这种问题。发现强转类型发生了结构体成员变量位移了,里面的指针全乱了。驱动层拿到的结构体是正确的, 但是app层结构体却乱了。在开发的时候 分了两层 一层app 第二层driver。
2023-05-16 14:20:53
234
原创 dpdk vdev从进程设备获取
因为手上一个项目是网卡模拟器, 因此需要在rx_ring, tx_ring中写东西模拟网卡的收发功能。之前尝试使用物理地址完全解耦, 但是发现该种方案需要大量映射, 性能很差, 大概是发包仪的 1/2。如上图所示, 所有的dpdk程序都会使用hugepage作为存储全局变量的位置。这就是主从进程实现共享变量的原理。至此, 从进程可以通过全局变量去找到这个设备了。在probe函数中, 判断是否为从进程, 如果是从进程, 则尝试从主进程那里获取对应的。每次启动dpdk程序, dpdk对设备进行探测, 这里以。
2023-05-08 17:16:56
712
原创 leetcode刷题数据结构
1. sort重写最大数class LargerNumKey(str): def __lt__(x, y): return x+y < y+xclass Solution: def largestNumber(self, nums: List[int]) -> str: nums = [str(i) for i in nums] nums.sort(key=LargerNumKey, reverse = True)
2022-01-17 03:40:37
212
原创 常用刷题模板
二分比较好理解的左侧右侧二分统一版本r是len - 1, l + 1< r作为判断条件答案可能出现在l或r为Index的数据上 所以要判断之后返回def findLeft(): nonlocal A, target l, r = 0, len(A) - 1 while l + 1 < r: mid = (l + r) // 2 if A[mid] >= target: r = mid e
2022-01-08 05:42:41
586
原创 cmu云计算 docker与编排
gcp链接实例gcloud compute --project gcp-docker-kubernetes-xxxxxx ssh --zone us-east1-b clouduser@student-vm如果想用scp交互,可以从以下地方找到密钥对Linux and macOS Public key: $HOME/.ssh/google_compute_engine.pubPrivate key: $HOME/.ssh/google_compute_engine Windows: Public
2021-09-28 10:21:27
378
原创 cmu cloud computing p1 Elasticity
文章目录一.task11.1 手动实现1.1.1创建两个安全组1.1.2 测试主要介绍负载均衡相关一.task1填写目标代码,使其能够自动新增web server 以提供更高的的处理数据能力1.1 手动实现1.1.1创建两个安全组LoadGenerator HTTP Sec Group 负载均衡服务器webServer Group 服务器使用cmu提供的两个AMI进行启动, 一个做负载均衡,一个做数据处理安全组可以直接编辑入站出站规则 方便管理1.1.2 测试在LoadGenera
2021-09-07 09:48:49
540
原创 cmu 15619p0笔记
文章目录一. set up aws1. 命令行创建instance一些小问题:在Linux添加pem用于登陆一. set up aws1. 命令行创建instance首先创建好了aws账户之后, 有两种方式去控制instance,一种是通过网页端,一种是通过命令行。这里主要做一下命令行的笔记,aws安装 用sudo apt-get install awscli:1).配置awsaws configureAWS Access Key ID [None]: YOUR AWS ACCESS KEY
2021-09-01 22:57:44
837
1
原创 TPM测试返回值
1. 测试primary不对的返回值创建EK hierarchy的的primary对象tpm2_createprimary -C e -c EKprimary.ctx --format=pem --output=public.pem若用ek的srk加载owner底下的密钥:#include <stdio.h>#include <stdlib.h>#include <sys/wait.h>#include <sys/types.h> int
2021-08-19 08:25:11
233
原创 tpm2_create key的default attributes
在 tpm2-tss-2.4.6\include\tss2\tss2_tpm2_types.h中记录#define TPMA_OBJECT_RESERVED1_MASK ((TPMA_OBJECT) 0x00000001) /* shall be zero */#define TPMA_OBJECT_FIXEDTPM ((TPMA_OBJECT) 0x00000002) /* SET 1 The hierarchy of the object as indicated
2021-08-17 07:02:07
291
原创 TPM密钥(可迁移 不可迁移)
Storage Keys:存储密钥,用来加密数据和其它密钥的通用非对称密钥,这里的其它密钥可以是另外一个存储密钥,也可以是绑定密钥或签名密钥。它本身是长度2048bit的RSA私钥;它既可以是可迁移密钥,也可以是不可迁移密钥。SRK:storage Root Key,存储根密钥,是存储密钥的一个特例。整个系统拥有一个最高权限的存储密钥,这个最高级密钥也就是存储根密钥。它很特殊,在每个用户创建的时候生成,管理这个用户的所有数据,也就是存储可信根(Root of Trust for Storage,...
2021-08-15 23:32:14
2294
原创 byzantine模型中tpm的应用
在byzantine模型中,attacker可以做任何事情,包括对tpm的所有操作。那么问题来了 如果attacker删除了tpm的密钥对怎么办?首先思考的是使用ek,因为ek可以是无法被删除的。但问题是ek无法用于签名。ek只能用于验证tpm chip是否是权威厂商生产但是若要利用TPM进行身份识别,就必须依赖EK,因为ek是具有唯一性的。所以该怎么办?使用aik, aik就是用ek进行wrap的密钥。我的方案是将aik的key pair分布式存储在集群的每一台机器中,因为每个aik均被ek加密
2021-08-14 07:25:07
351
原创 使用fapi无法找到key
记录一下使用library被坑的经历fapi-config file{“profile_name”: “P_RSA2048SHA256”,“profile_dir”: “/opt/tpm_dev/etc/tpm2-tss/fapi-profiles/”,“user_dir”: “~/.local/share/tpm2-tss/user/keystore”,“system_dir”: “/opt/tpm_dev/var/lib/tpm2-tss/system/keystore”,“tcti”:
2021-08-02 04:48:20
222
原创 C++ sort按照pair进行排序
摘录:https://www.quora.com/How-do-I-sort-array-of-pair-int-int-in-C+±according-to-the-first-and-the-second-elementBy default std::sort will sort based on pair::first and then pair::secondIf you want the opposite write a comparator which is a function or fu
2021-07-31 00:58:46
1201
原创 C++嵌套vector的初始化写法
templatevector<vector> my_matrix(size_x, vector(size_y));
2021-07-29 21:29:25
992
原创 计算两个区间是否重合 以及重合长度
Meeting Scheduler一个很好的计算两个区间是否重合的方式,并可以计算重合点数据区间长度计算头的最大值, 尾的最小值即可 int ibegin = slots1[i][0], iend = slots1[i][1], jbegin = slots2[j][0], jend = slots2[j][1]; int head = max(ibegin,jbegin), tail = min(iend,jend);tail-head...
2021-07-26 10:09:43
1944
原创 lab相关 1.实验前集群的配置
lab集群的配置因为使用的afs分布式文件系统, 所以配置上需要做一些更改。具体来说:在试验阶段,因为root权限暂时无法获取,无法将tss安装在每台机器的根目录下。此外,同样是因为缺少root权限,配置文件无法写在每个机器的根目录下。因此,集群内所有的机器共用一个library,这个library装在 共享文件夹下,并在共享文件夹中创建每台机器对应的文件夹用于存放TPM数据。在有了root权限之后, 通常来说, 每台计算机均应该安装library到根目录下。而因为fapi需要keystore,
2021-07-24 08:51:19
145
原创 左侧二分模板的思考
左侧二分模板:左侧二分模板返回的是小于taget的序号所以当l最后会有几种情况l < array.size() && v[l]== target 如1 2 2找 2 l = 1 意思是小于2的数有1个,因为数组从0 开始,所以正好就找到了2,但实际意义并非是2. 这种情况下,直接找到了target返回target就完事了l=0, 此时有两种情况,一是: array[0]恰好是target,此时和 1 情况重复,因此不必要再写,第二种情况:数组中没有比target小的元素
2021-07-17 09:27:42
77
原创 vector 中 emplace_back和push_back的区别
vector 中 emplace_back和push_back的区别:1.push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。2.若vector<pair<,>>这种情况 push_back({x.y}) 要以pair的格式添加, 而emplace_back(x,y) 不需要加
2021-07-17 07:47:48
475
原创 leetcode二分算法 循环数组
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/好题思路:
2021-07-15 00:05:21
138
原创 c++ clear()只是调用析构 不是重置vector!!!
今天做题,想用vector.clear()清空数组 结果发现根本不是至0 坑了很久 void clear():删除存储在vector中的所有元素一、1.如果vector的元素是一些object,则它将为当前存储的每个元素调用它们各自的析构函数。2.如果vector存储的是指向对象的指针,此函数并不会调用到对应的析构函数。会造成内存泄漏。想要删除vector中的元素则应遍历vector使用delete,然后再clearfor(int i = 0; i < vec.size(); ++i){
2021-07-12 09:51:46
1012
原创 TPM名词
pcr bank:A Platform Configuration Register (PCR) is a memory location in theTPM that has some unique properties. The size of the value that can bestored in a PCR is determined by the size of a digest generated by anassociated hashing algorithm. A SHA-
2021-07-07 20:43:14
631
原创 git 添加git库进自己的库里
因为学习需要,有时会将别人的库添加到自己的库里。第一步是删除 .git文件夹第二步是删除.git文件夹的缓存 git rm -r --cached "文件夹的名称"
2021-07-04 23:11:06
155
原创 C++vector指针取值 与 空间释放
C++ new了一个vecotr, 可以用以下代码取值std::cout << (*vV)[0][0] << std::endl;c++若想清除vector空间占用,可以让其与空向量互换。clear()会破坏vector内部的所有对象,但实际上不会释放空间参考:https://stackoverflow.com/questions/10464992/c-delete-vector-objects-free-memory...
2021-07-02 22:10:14
1685
2
原创 TPM 踩坑实录
TPM踩坑实录因为要做byzantine容错,需要用到TPM进行签名以及recover。所以来搞一下TPM下载TSS:https://github.com/tpm2-software/tpm2-tss按照要求装好,如果用常规的.configure脚本生成,因为里面有docxygen文件,会导致后面make install的时候失败1. 安装生成makefile的时候胡烈doxygen-doc ./configure --disable-doxygen-doc2.环境变量TSS默认是安装在/
2021-07-02 03:24:57
1210
原创 linux工具命令
文章目录linux工具命令GDB编译原文件相关命令linux工具命令GDB一个比较好的总结编译原文件gcc bugging.c -o bugging -g -m32相关命令命令简写形式说明listl查看源码backtracebt、where打印函数栈信息nextn执行下一行steps一次执行一行,遇到函数会进入finish运行到函数结束continuec继续运行breakb设置断点info break
2021-07-02 03:05:35
97
原创 Linux 自用命令
Linux自用命令文章目录Linux自用命令编译以及路径相关gcc添加找到头文件的路径添加环境变量找到动态链接库的路径找到静态库的路径添加启进~./bashrc编译命令编译以及路径相关gcc添加找到头文件的路径export C_INCLUDE_PATH=$C_INCLUDE_PATH:/afs/cs.pitt.edu/projects/babay/local/include添加环境变量export PATH=$PATH:/afs/cs.pitt.edu/projects/babay/local/
2021-07-01 04:40:45
312
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人