摘要:
多核下的数据修改及数据同步修改:(承接上面多核读取结束后,CPU A对数据进行了修改) 1.CPU A进行Local write,修改变量z=2,此时要将其cache line的状态修改为M(修改),并通知有缓存了z变量的CPU,此处即CPU B。 2.CPU B需要将本地cache 中的z设置为I 阅读全文
摘要:
需求:A程序要求不能阻塞,低延迟。同时,有一个需求是从A程序得到的数据 ,写文件或者数据库。 写文件这个消费者必然消费的远慢于A程序,这里是把写文件 用来做线程还是进程。 线程的话,用无锁队列需要多个消费者线程,多个队列。如果有锁的队列的话,必然影响A程序(如果消费者使用锁,生产者便不能往有锁队列放 阅读全文
摘要:
网卡开启多队列,一个队列会选择一个cpu,一般开启跟cpu核数相同的队列上层网络线程绑定cpu,在recv的时候,会选择这个cpu,同时选择对应的队列 然后工作线程 也绑定在这个cpu上,会增加缓存命中,这不还是会影响recv吗,不就相当于一个线程 所以还是工作线程绑定在另外的cpu上,同时send 阅读全文
摘要:
1 .水平触发: 当我们关注的事件为读事件时,只要缓存中有东西可读,那么就触发;当我们关注的事件为写事件时,只要缓存中有东西可写那么就触发。 边沿触发: 当我们关注的事件为读事件时:1.当由不可读变为可读时会触发(即BUFFE由空到非空)。2.当可读的内容变多时(即有新的数据到来)会触发。 当我们关 阅读全文
摘要:
1. cpu cache会加载第一次miss之后的连续内存,所以访问内存尽量连续。 如果工作线程不是很消耗cpu,那么网络线程和工作线程绑定到同一个cpu上,会减少cpu cache同步。如果是消费者线程计算密集,或者低延迟,需要独占cpu,觉得还是分开的好 2. 3. epoll_wait 之后, 阅读全文
摘要:
阅读全文
摘要:
关键在 read(fd,buffer,size),buffer的大小 如果读缓冲区数据足够多的话,read可能会全部填满,也有可能读取一部分 所以,最好是知道要收数据的结构,根据结构的大小去定义buffer的size收数据 阅读全文
摘要:
1. 应用层 网络使用多路复用 2. 工作线程 根据cpu密集型还是io密集型,创建合适线程 thraed local ,绑定cpu 3. 网卡手法数据 使用dma方式,应该比irq 硬件中断方式好,虽然都是不停的触发,但是irq触发的话,cpu不能处理其他的事情 4. 在系统协议栈层 通过rfs, 阅读全文
摘要:
内核如何从网卡接收数据,传统的过程:1.数据到达网卡;2.网卡产生一个中断给内核;3.内核使用I/O指令,从网卡I/O区域中去读取数据; 我们在许多网卡驱动中(很老那些),都可以在网卡的中断函数中见到这一过程。 但是,这一种方法,有一种重要的问题,就是大流量的数据来到,网卡会产生大量的中断,内核在中 阅读全文