ARTS 第 7 周

发布于: 2020 年 05 月 31 日
ARTS 第 7 周

" 每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点 "

Algorithm - 找众数

题目链接:https://leetcode-cn.com/problems/majority-element/

代码仓库:https://github.com/fhx1998/LeetCode/blob/master/src/MajorityElement169.java

Review - Linux 零拷贝

阅读原文地址:https://www.linuxjournal.com/article/6345?page=0,0

wiki词条:https://en.wikipedia.org/wiki/Zero-copy

总结

前置知识

  • 系统调用:操作系统为了统一接口提供的函数以供操作资源,比如 read,write方法

  • 用户态:用户程序运行的用户空间,无法直接访问底层硬件资源

  • 内核态:用户程序进行系统调用,委托内核态间接操作硬件资源

  • DMA:直接存储技术,不通过 CPU 进行

 

假设你打算使用某软件将本机磁盘上的文件传输给某个客户端。

 

因为计算机系统的保护机制,用户应用程序是在用户空间上运行,在涉及到硬件资源操作时,通过系统调用(比如调用 read() 方法读取文件内容),借助内核间接访问资源。

 

可以看到,整个过程有四次文件复制操作。过程中,因为涉及到内核态与用户态之间的上下文转换和频繁且缓慢的 I/O 操作,其读写性能是比较糟糕的。

 

零拷贝技术可以简单的理解成将参与到整个过程中的 用户空间态 省去,省去上下文切换的开销,减少 I/O 操作,很好的提高了效率。

 

图片中,从内核缓存到 socket buffer 的 copy 操作被优化了。这需要硬件技术的帮忙。

 

通过支持聚集操作的网络接口,待传输的数据不必占用主存的连续空间,网卡的 DMA 引擎也可以将分布在不同位置的数据集中到一个数据传输中。

如果你有疑惑的话可以戳这里,StackOverflow 上有关聚集操作的回答。

大概的解释就是,如果网卡不支持聚集操作,那么就需要将内核缓冲区中物理分布分散的数据通过 CPU 拷贝,连续的存放在 socket buffer 中以供 DMA 引擎拷贝。

 

在 Linux 的 2.4 内核版本,socket buffer 的描述符就被修改升级以支持适应刚才说的特性 - 这也是 Linux 零拷贝的基础。

 

不同之前的整个复制操作,内核将待传输数据的分布位置,待传输数据的长度等通过描述符复制给 socket buffer。 DMA 引擎(支持聚集操作)直接将数据从 kernel buffer 复制到协议引擎。

 

零拷贝的含义

实际上整个复制过程仍然包括了使用 DMA 引擎进行数据拷贝,所有不能说这是真正意义上的零拷贝。

 

但我们站在 CPU 角度,在没有引入零拷贝技术前,都会涉及到 CPU 拷贝的步骤。引入之后,CPU 参与的步骤变少,且没有了用户态和内核态的上下文切换,节省了 CPU 开销。

 

所以,可以在 CPU 角度看这个 "零",而不是零次拷贝操作。

Tip - IDEA 快捷键

对于常用的操作,有意识的去强化,比如我遇到某些常用的操作就要去查一下有没有对应的快捷键。当然也可以系统的去看一下相关的手册。

不止 IDEA 中的快捷键,任何平台都可能有让你惊喜的快捷键等你发现。

 

分享一些我最近常用的快捷键

  • Alt + 方向键 左和右,可以方便的在打开的窗口之间切换

当前打开的是 MyPow50.java,向右就切换到 ThreeSum15.java 中

  • Alt + 对应的数字,打开/关闭 该数字对应的模块。

  • 等等 ...

 

刻意的去使用它会在不知不觉中提高效率。

(不知道有没有相关的研究数据)

 

Share - 收藏的错觉

学习资料很多,优质文章很多且可能分布在不同的平台,有时候你会先收藏想着下次再看。

 

其实这种想法是很危险的,给了我们一种已经学习的错觉。最后这些优质的收藏内容很可能就这样浪费了。

 

因为平台很多,很容易就忘记在哪个平台的收藏了哪些内容。

 

我最近就想起来在微博收藏了一些内容,等时隔许久想起来要去看的时候,我甚至找不到微博中 收藏 的入口在哪里。

 

我的做法就是在浏览器建立一个专门的书签,当发现优质的学习内容时,把链接复制到书签里。

 

此外,还需要刻意的强化,让自己习惯的意识到这里有这么一个文件夹,需要我常打开去看,去学习。

发布于: 2020 年 05 月 31 日 阅读数: 7
用户头像

学习个球

关注

还未添加个人签名 2017.11.15 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
ARTS 系列的其他文章可以看这里:https://blog.csdn.net/FangHX25
2020 年 05 月 31 日 23:15
回复
没有更多了
ARTS 第 7 周