高性能网络-DPDK初探-linux虚拟环境部署 ubuntu22.04.4版本兼容较低版本DPDK(19 )会有问题,我遇到了igb驱动接口不适配问题,gcc版本适配问题等问题,需要修改的代码较多,建议部署环境的时候需要根据实际需求进行选择。我选用的19.08版本可以通过./usertools/dpdk-setup.sh 交互编译。DPDK版本要根据实际需求和linux版本决定,DPDK版本迭代较快,对外接口变化以及内部驱动等接口差异较大。成功编译表示dpdk环境部署完成。编译可能会有一些报错,我遇到的有缺少库的问题,apt安装后重新编译即可。
hash浅析与应用 散列算法、哈希算法:是一种将任意长度的输入(又叫做预映射,pre-image)通过散列算法变换成固定长度输出(通常是一个较短的、固定长度的值,称为哈希值、散列值或消息摘要)的函数。方法1.先拆分,然后分别hash统计,通过散列表计数,拆分的文件全部算完后统计到一个整的散列表中(空间不足,需要在磁盘操作)然后获得最多的技术。问题1描述:hash 算法得到的结果是随机的,不能保证服务器节点均匀分布在哈希环上;★方法2:拉链法//散列表:使用最广泛的最经典的方法,将所有冲突的值都存储在同一个索引的链表中。
linux内核Q&A 申请锁的线程(或称为节点)会在其对应的CPU变量上自旋,等待其前驱节点释放锁。这种方式避免了多个线程在同一个共享变量上自旋,从而减少了缓存同步操作的次数,提高了系统性能。Linux中的信号量是一种用于进程或线程间同步和互斥的机制。内核使用内存屏蔽(Memory Barrier)的场景主要涉及到多线程或多处理器环境中的内存一致性问题。(2)有可能导致死锁–休眠的情况下多进程临界区都会等待对方释放,(4)中断服务函数(硬件触发)也会无法恢复中断之前状态的问题。
红黑树增删操作 叔叔节点是黑色且node是其父节点的左子节点。通过颜色翻转来解决,将父节点和叔叔节点设为黑色,祖父节点设为红色,然后将祖父节点设为新的node,继续循环。这是一种简化的说法,因为在实际实现中,红黑树通常使用NIL节点(空节点)来表示叶节点,并将这些NIL节点视为黑色。这是红黑树平衡的关键性质,它保证了树的高度大致是log n(n是树中节点的数量),从而保证了红黑树操作的效率。struct rb_node :定义了一个红黑树节点,包括指向父节点和颜色的信息、左子节点指针和右子节点指针。
高性能网络设计基础--网络编程--reactor 定义与原理定义:IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄(或称为IO通道)。一旦某个文件句柄就绪(即有数据可读或可写),就能够通知应用程序进行相应的读写操作;如果没有文件句柄就绪,则会阻塞应用程序,交出CPU。原理:多路复用机制通过操作系统提供的系统调用(如select、poll、epoll等)来监听多个IO事件的就绪状态。当有任何一个IO事件就绪时,操作系统会通知应用程序,告知哪些IO事件已经准备好可以进行读取或写入操作。i/o多路复用是对套接字监听的改进,更专注与事件本身。
reactor百万并发遇到的问题排查 解决方法2:放通服务:firewall-cmd --zone=public --add-service=http(服务名) --permanent。解决方法3:放通端口:firewall-cmd --zone=public --add-port=22/tcp --permanent。假设每个TCP连接的缓冲区大小平均为8KB(8KB是一个常见的估算值,可修改),则百万个TCP连接将占用约8GB的内存空间。报错为访问内存异常,gdb调试发现(截图不清晰),问题代码位置访问数组。
io_uring概要 在 liburing 库和 Linux 的 io_uring 接口中,io_uring_sq(提交队列,Submission Queue)、io_uring_cq(完成队列,Completion Queue)和 io_uring 结构体各自扮演着关键的角色,它们共同构成了 io_uring 异步 I/O 框架的基础。用户空间程序通过设置SQE的不同字段来指定要执行的I/O操作。Linux社区开发的一种新型异步I/O框架,通过提供高度可扩展和高性能的异步I/O接口,有效解决了传统异步I/O框架中的性能瓶颈。