
笔记
文章平均质量分 52
舞动CPU
10年+码农,热爱研究技术原理,追求极致性能; 对高性能有一定的理解,欢迎技术碰撞,可加本人微信: cpu-dance
展开
-
原子操作耗时分析
main_lock.c#include <string.h>#include <stdio.h>#include <stdlib.h>#include <sys/epoll.h>#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>#define __USE_GNU#include <sched.h>#include原创 2021-09-02 13:56:37 · 291 阅读 · 0 评论 -
hash研究
mhash.c#include <pthread.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sys/types.h>#include <ctype.h>#include <stdint.h>#include "common.h"#include "mhash.h"uint64_t g_uiquerycount原创 2021-08-27 13:38:12 · 163 阅读 · 0 评论 -
字节序及内存对齐
低 高|————————————————————————| 内存左低右高0x12345678大端序: 0x12345678 高位存低地址,低位存高地址 也是肉眼序、网络序列 只要少数cpu是大端序小端序: 0x78563412 高位存高地址,低位存低地址 x86 arm等主流cpu是小端序[root@localhost test]# gcc main_test.c[root@localhost test]# ./a.outD原创 2021-08-26 15:12:29 · 319 阅读 · 0 评论 -
linux gcc 原子操作函数
type __sync_fetch_and_add (type ptr, type value, …)// 将value加到ptr上,结果更新到ptr,并返回操作之前ptr的值type __sync_fetch_and_sub (type ptr, type value, …)// 从ptr减去value,结果更新到ptr,并返回操作之前ptr的值type __sync_fetch_and_or (type ptr, type value, …)// 将ptr与value相或,结果更新到ptr,原创 2021-08-26 11:00:17 · 457 阅读 · 0 评论 -
设置cpu亲和力demo
#include <sys/time.h>#include <stdlib.h>#include <stdio.h>#include <sys/epoll.h>#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>#define __USE_GNU#include <sched.h>#include <ctype.原创 2021-08-23 15:55:04 · 239 阅读 · 0 评论 -
高并发hash性能研究
mhash.htypedef struct node{ unsigned char strkey[48]; void *pdata; struct node *next;}node;typedef struct hashtable{ struct node * head; int count; pthread_spinlock_t lock;}hashtable;#define ERROR_SUCCESS 0#define ERROR_FAIL原创 2021-08-21 18:01:43 · 134 阅读 · 0 评论 -
认识中断是什么
本文转自 作者:闪客sun 公众号:低并发编程本来想写内核如何接收一个网络包这个过程,但发现把整个过程捋顺了,还是很难的。推导整个过程的起点是中断,包括硬中断和软中断。而这个过程要是讲清楚吧,感觉在整个网络包接收原理的大流程中有点喧宾夺主。但要是一笔带过吧,那对于这块有困惑的人就很难受,一切的起点没整明白在心里总是个疙瘩。所以,单拎出来一个主题中断,给大家把这个问题搞明白了,之后讲内核收包时直接引过来就好了,不想看的直接过,想看的就可以有篇前置文章详细了解,美滋滋。另外,整个操作系统就是一个中转载 2021-08-19 13:58:05 · 305 阅读 · 0 评论 -
如何测试一次内存访问的耗时?
程序在运行的过程访问主存每次是按cpu cache line 64B访问的(主流cpu cache line一般都是64B),如果命令L1 cache耗时约1ns,如果命令L2 cache耗时约3ns,如果命令L3 cache耗时约12ns,如果访问内存约50-100ns,上面这些数据都是从些网上的文章资料得知的。 如何写段代码测试下内存的访问时间,结果应该接近50-100ns ,本文介绍下测试方法: 1. 申请几段连续的虚拟内存,总大小4GB; 2. 给申请的4GB内存按页...原创 2021-07-30 00:20:30 · 2750 阅读 · 1 评论 -
kafka linux单机简易安装
前提是先安装好JDK下载kafka版本http://kafka.apache.org/downloadslinux上执行下载:wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.0/kafka_2.13-2.8.0.tgz解压包:tar -zxvf kafka_2.13-2.8.0.tgzzookeeper直接使用kafka中自带的,修改zookeeper配置如果zookeeper是集群配置,zookeepe原创 2021-07-07 21:04:27 · 178 阅读 · 1 评论 -
Java中的abstract class和interface
1.abstract class 只能做为父类被extends,不能实例对象;2.不一定有abstract function;3.有abstract function的class一定是abstract class;4.abstract function由子类实现;public abstract class Employee{ private int iAge; private String strName; public Employee(String strParam原创 2021-06-29 16:15:38 · 456 阅读 · 0 评论 -
gcc支持的原子操作函数系统
type __sync_fetch_and_add(typeptr,type value,…);// m+ntype __sync_fetch_and_sub(typeptr,type value,…);// m-ntype __sync_fetch_and_or(typeptr,type value,…); // m|ntype __sync_fetch_and_and(typeptr,type value,…);// m&ntype __sync_fetch_and_xor(typep原创 2021-06-29 11:22:52 · 106 阅读 · 0 评论 -
Java泛型
泛型类:public class Stu<N, A, S> { private N name; // 姓名 private A age; // 年龄 private S sex; // 性别 // 创建类的构造函数 public Stu(N name, A age, S sex) { this.name = name; this.age = age; this.sex = sex; }原创 2021-06-28 18:58:08 · 79 阅读 · 0 评论 -
Java的transient这人关键字,有点无聊
Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。作用:Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transien...原创 2021-06-28 17:26:10 · 85 阅读 · 0 评论 -
UDP发包极限测试
#include <sys/types.h>#include <sys/socket.h>#include <string.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <unistd.h>#include <errno.h>#include &原创 2021-06-06 16:35:35 · 837 阅读 · 0 评论 -
raspberry pi 4 ubuntu新安装
raspberry pi 4 ubuntu安装官网下载ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xzubuntu默认登录账号密码都是ubuntu,登录会要求改新密码开启root登录,sudo passwd root,设置root密码,sudo root切到root/etc/hostname是修改主机名配置无线网卡/etc/netplan/50-cloud-init.yamlnetwork: ethern原创 2021-06-06 16:20:28 · 419 阅读 · 0 评论 -
linux性能工具
修改进程在指定cpu上运行:taskset -pc 3 21184进程启动时指定CPU: taskset -c 1 ./redis-server ../redis.conf1.统计丢包netstat -sroot@U2:~# netstat -s -uIcmpMsg: InType0: 6 InType3: 2840330 InType5: 715 InType8: 11 InType11: 48 OutType0: 11 OutT...原创 2021-06-05 16:14:51 · 414 阅读 · 1 评论 -
Linux 4.5/4.6 中对 SO_REUSEPORT 的改进
Linux 3.9 加入了SO_REUSEPORT 选项,可以提高 UDP 和 TCP server 的伸缩性,Linux4.5/4.6分别进一步改进了 UDP 和 TCP 的 SO_REUSEPORT 实现。本文以 UDP 的实现为例来讲解,TCP 与之类似。UDP 协议的主要数据结构是两张 hash 表,指向 UDP 协议控制块 struct udp_sock。其中 hash 以 port 为 key,hash2 以 IP+port 为 key。这两张 hash 表的大小可以从 ...原创 2021-03-01 18:50:15 · 444 阅读 · 0 评论 -
原子操作例子分析
#include <sys/time.h>#include <stdlib.h>#include <stdio.h>long long ustime(void) { struct timeval tv; long long ust; gettimeofday(&tv, NULL); ust = ((long)tv.tv_sec)*1000000; ust += tv.tv_usec; return ust;...原创 2021-01-15 16:32:14 · 297 阅读 · 0 评论 -
L1 L2 L3 MEM速度与大小
以intel为例:L1 访问约3个周期,1ns左右L2访问约10个周期,3ns左右,正常约10MB,intel整了个SmartCache,大概是2个core把10MB共享用,这样速度要慢点,但是就是20MB了L3 访问约50个周期,20ns左右,当前最好的cpu L3约 20MB+memory访问约几百个周期,算100ns+好了一段程序在运转过程中,据统计80%以上都被放在cpu cache里命中了system call是栈空间切换,用户态到内核态切,所有的寄存器...原创 2021-01-12 12:17:03 · 1284 阅读 · 1 评论 -
硬盘的物理结构
一、物理结构:硬盘在物理结构上由头盘组件和控制电路板两大部分组成。㈠头盘组件头盘就是磁头和盘片的意思。头盘组件包括盘体、电机、磁头等部件。所有部件密封在外壳中,绝对无尘、真空,如果你一旦开启了这个密封外壳,那么这个硬盘就会宣告作废。其中盘体由单个或多个盘片组成,各个盘片之间由垫圈隔开,盘片表面极为平整光滑,并涂有磁性介质,是记录数据的载体。盘片多为铝制品,早期出现过陶瓷制品,现在又出现了玻璃材料。一个盘片对应上下两个盘面,分别对应两个磁头。主轴电机带动盘片作高速转动.由于盘片在高速转动时并不与读...原创 2021-01-02 18:51:07 · 2563 阅读 · 0 评论 -
时间空间
1s=1000ms(毫秒)=1000*1000μs(微妙)=1000*1000*1000ns(纳秒)CPU 2.5GHz时种周期,0.4ns,就是晶振一高一低那个时间,牛逼的波浪线机器周期,约6个时钟周期,不同cpu可能不一样,大致是这个关系,约2.4ns指令周期,i++可以分解成3个指令, 对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。 对于一些比较复杂的指令,例如转...原创 2020-12-29 18:22:57 · 425 阅读 · 0 评论 -
偶像讲的分布式高性能
本次分享分成4块: 基础资源优化。不管是X86、ARM,还是 Linux、Windows,不管是脚本语言还是C语言,这种优化都有效的,相对来说收益比较大、比较普惠一些,我把它列为基础资源优化。 网络效率优化。这包含三个层面3层,一是系统层,二是应用层,三是传输效率的优化。 降低请求时延。怎么用缓存等,我们关注用户的体验,能让单次请求的速度更快一些。 吞吐量。提升系统并发,从吞吐量来说怎么提升系统的并发。 一、基础资源优化基础资源的优化,在我看来核心是提升资源的利用原创 2020-12-24 15:11:30 · 298 阅读 · 1 评论 -
看不懂没关系, 知道厉害就行了! 中科大俩教授11年解了两道数学难题
“著名学者弗里曼·戴森说,有些数学家是鸟,有些是青蛙。飞鸟可以俯瞰延伸至遥远地平线的数学远景,青蛙则乐于深入探讨特定问题的细节。至于我们,就像是池塘边碰巧发现美丽花朵的青蛙。”近期,中国科学技术大学教授陈秀雄、王兵取得重大突破,证明了“哈密尔顿—田”和“偏零阶估计”这两个国际数学界20多年悬而未决的核心猜想。面对如潮赞誉,他们这样说。能完全看懂的“不到10人”陈秀雄、王兵的论文,发表于国际顶级数学期刊《微分几何学杂志》。学术界有人说,这篇长达123页的论文,全世界能完全看懂的估计“不到10人”。“确原创 2020-12-11 09:08:14 · 205 阅读 · 1 评论 -
c语言指针
指针是C语言的灵魂,精华之所在。指针强大而危险,用得好是一大利器,用得不好是一大潜在危害。正是指针具有强大而又危险的特性,加上指针比较难,很多人用的不好,所以越是封装程度高的语言,越是没有指针的"存在"。比如JAVA,Python,就是把指针隐藏去了,不让用户接触,但很多功能实质上还是用到指针的,只不过是封装好了,对用户隐藏。如果指针学得好,在编程时可谓如虎添翼,用起招式也会游刃有余。很多人觉得指针很难,其实不然,只要理解了指针的实质,多见,多练,也就是1+1=2的事。指针的实质也很简单:在C语原创 2020-12-10 12:42:18 · 96 阅读 · 0 评论 -
GNU 是什么,和 Linux 是什么关系?
Unix 系统被发明之后,大家用的很爽。但是后来开始收费和商业闭源了。一个叫 RMS 的大叔觉得很不爽,于是发起 GNU 计划,模仿 Unix 的界面和使用方式,从头做一个开源的版本。然后他自己做了编辑器 Emacs 和编译器 GCC。GNU 是一个计划或者叫运动。在这个旗帜下成立了 FSF,起草了 GPL 等。接下来大家纷纷在 GNU 计划下做了很多的工作和项目,基本实现了当初的计划。包括核心的 gcc 和 glibc。但是 GNU 系统缺少操作系统内核。原定的内核叫 HURD,一直完不成。同时 BS原创 2020-12-08 19:25:30 · 551 阅读 · 0 评论 -
系统调用
操作系统的主要功能是为应用程序的运行创建良好的环境,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用的(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序,如果没有系统调用和内核函数,用户将不能编写大型应用程序。所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户原创 2020-12-08 13:35:58 · 152 阅读 · 0 评论 -
LLDP协议
一、LLDP协议概述随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加自己特有的功能,这就导致在一个网络中往往会有很多具有不同特性的、来自不同厂商的设备,为了方便对这样的网络进行管理,就需要使得不同厂商的设备能够在网络中相互发现并交互各自的系统及配置信息。LLDP(Link Layer Discovery Protocol,链路层发现协议)就是用于这个目的的协议。LLDP定义在802.1ab中,它是一个二层协议,它提供了一种标准的链路层发现方式。LLDP原创 2020-12-07 22:15:35 · 3615 阅读 · 0 评论