电子发烧友网 > 嵌入式技术 > 正文

用户空间和内核空间通讯-Netlink 上

2019年04月29日 15:32 次阅读

Alan Cox在内核1.3版本的开发阶段最先引入了Netlink,刚开始时Netlink是以字符驱动接口的方式提供内核与用户空间的双向数据通信;随后,在2.1内核开发过程中,Alexey Kuznetsov将Netlink改写成一个更加灵活、且易于扩展的基于消息通信接口,并将其应用到高级路由子系统的基础框架里。自那时起,Netlink就成了Linux内核子系统和用户态的应用程序通信的主要手段之一。

2001年,ForCES IETF委员会正式对Netlink进行了标准化的工作。Jamal Hadi Salim提议将Netlink定义成一种用于网络设备的路由引擎组件和其控制管理组件之间通信的协议。不过他的建议最终没有被采纳,取而代之的是我们今天所看到的格局:Netlink被设计成一个新的协议域,domain。

Linux之父托瓦斯曾说过“Linux is evolution, not intelligent design”。什么意思?就是说,Netlink也同样遵循了Linux的某些设计理念,即没有完整的规范文档,亦没有设计文档。只有什么?你懂得---“Read the f**king source code”。

当然,本文不是分析Netlink在Linux上的实现机制,而是就“什么是Netlink”以及“如何用好Netlink”的话题和大家做个分享,只有在遇到问题时才需要去阅读内核源码弄清个所以然。

什么是Netlink

关于Netlink的理解,需要把握几个关键点:

1、面向数据报的无连接消息子系统

2、基于通用的BSD Socket架构而实现

关于第一点使我们很容易联想到UDP协议,能想到这一点就非常棒了。按着UDP协议来理解Netlink不是不无道理,只要你能触类旁通,做到“活学”,善于总结归纳、联想,最后实现知识迁移这就是学习的本质。Netlink可以实现内核->用户以及用户->内核的双向、异步的数据通信,同时它还支持两个用户进程之间、甚至两个内核子系统之间的数据通信。本文中,对后两者我们不予考虑,焦点集中在如何实现用户<->内核之间的数据通信。

看到第二点脑海中是不是瞬间闪现了下面这张图片呢?如果是,则说明你确实有慧根;当然,不是也没关系,慧根可以慢慢长嘛,呵呵。

在后面实战Netlink套接字编程时我们主要会用到socket(),bind(),sendmsg()

和recvmsg()等系统调用,当然还有socket提供的轮训(polling)机制。

Netlink通信类型

Netlink支持两种类型的通信方式:单播和多播。

单播:经常用于一个用户进程和一个内核子系统之间1:1的数据通信。用户空间发送命令到内核,然后从内核接受命令的返回结果。

多播:经常用于一个内核进程和多个用户进程之间的1:N的数据通信。内核作为会话的发起者,用户空间的应用程序是接收者。为了实现这个功能,内核空间的程序会创建一个多播组,然后所有用户空间的对该内核进程发送的消息感兴趣的进程都加入到该组即可接收来自内核发送的消息了。如下:

其中进程A和子系统1之间是单播通信,进程B、C和子系统2是多播通信。上图还向我们说明了一个信息。从用户空间传递到内核的数据是不需要排队的,即其操作是同步完成;而从内核空间向用户空间传递数据时需要排队,是异步的。了解了这一点在开发基于Netlink的应用模块时可以使我们少走很多弯路。假如,你向内核发送了一个消息需要获取内核中某些信息,比如路由表,或其他信息,如果路由表过于庞大,那么内核在通过Netlink向你返回数据时,你可以好生琢磨一下如何接收这些数据的问题,毕竟你已经看到了那个输出队列了,不能视而不见啊。

Netlink的消息格式

Netlink消息由两部分组成:消息头和有效数据载荷,且整个Netlink消息是4字节对齐,一般按主机字节序进行传递。消息头为固定的16字节,消息体长度可变:

Netlink的消息头

消息头定义在文件里,由结构体nlmsghdr表示:

点击(此处)折叠或打开

struct nlmsghdr

{

__u32        nlmsg_len;    /* Length of message including header */

__u16        nlmsg_type;    /* Message content */

__u16        nlmsg_flags;    /* AddiTIonal flags */

__u32        nlmsg_seq;    /* Sequence number */

__u32        nlmsg_pid;    /* Sending process PID */

};

消息头中各成员属性的解释及说明:

nlmsg_len:整个消息的长度,按字节计算。包括了Netlink消息头本身。

nlmsg_type:消息的类型,即是数据还是控制消息。目前(内核版本2.6.21)Netlink仅支持四种类型的控制消息,如下:

NLMSG_NOOP-空消息,什么也不做;

NLMSG_ERROR-指明该消息中包含一个错误;

NLMSG_DONE-如果内核通过Netlink队列返回了多个消息,那么队列的最后一条消息的类型为NLMSG_DONE,其余所有消息的nlmsg_flags属性都被设置NLM_F_MULTI位有效。

NLMSG_OVERRUN-暂时没用到。

nlmsg_flags:附加在消息上的额外说明信息,如上面提到的NLM_F_MULTI。摘录如下:

标记作用及说明NLM_F_REQUEST如果消息中有该标记位,说明这是一个请求消息。所有从用户空间到内核空间的消息都要设置该位,否则内核将向用户返回一个EINVAL无效参数的错误NLM_F_MULTI消息从用户->内核是同步的立刻完成,而从内核->用户则需要排队。如果内核之前收到过来自用户的消息中有NLM_F_DUMP位为1的消息,那么内核就会向用户空间发送一个由多个Netlink消息组成的链表。除了最后个消息外,其余每条消息中都设置了该位有效。NLM_F_ACK该消息是内核对来自用户空间的NLM_F_REQUEST消息的响应NLM_F_ECHO如果从用户空间发给内核的消息中该标记为1,则说明用户的应用进程要求内核将用户发给它的每条消息通过单播的形式再发送给用户进程。和我们通常说的“回显”功能类似。……

大家只要知道nlmsg_flags有多种取值就可以,至于每种值的作用和意义,通过谷歌和源代码一定可以找到答案,这里就不展开了。上一张2.6.21内核中所有的取值情况:

nlmsg_seq:消息序列号。因为Netlink是面向数据报的,所以存在丢失数据的风险,但是Netlink提供了如何确保消息不丢失的机制,让程序开发人员根据其实际需求而实现。消息序列号一般和NLM_F_ACK类型的消息联合使用,如果用户的应用程序需要保证其发送的每条消息都成功被内核收到的话,那么它发送消息时需要用户程序自己设置序号,内核收到该消息后对提取其中的序列号,然后在发送给用户程序回应消息里设置同样的序列号。有点类似于TCP的响应和确认机制。

注意:当内核主动向用户空间发送广播消息时,消息中的该字段总是为0。

nlmsg_pid:当用户空间的进程和内核空间的某个子系统之间通过Netlink建立了数据交换的通道后,Netlink会为每个这样的通道分配一个唯一的数字标识。其主要作用就是将来自用户空间的请求消息和响应消息进行关联。说得直白一点,假如用户空间存在多个用户进程,内核空间同样存在多个进程,Netlink必须提供一种机制用于确保每一对“用户-内核”空间通信的进程之间的数据交互不会发生紊乱。

即,进程A、B通过Netlink向子系统1获取信息时,子系统1必须确保回送给进程A的响应数据不会发到进程B那里。主要适用于用户空间的进程从内核空间获取数据的场景。通常情况下,用户空间的进程在向内核发送消息时一般通过系统调用getpid()将当前进程的进程号赋给该变量,即用户空间的进程希望得到内核的响应时才会这么做。从内核主动发送到用户空间的消息该字段都被设置为0。

Netlink的消息体

Netlink的消息体采用TLV(Type-Length-Value)格式:

Netlink每个属性都由文件里的struct nlattr{}来表示:

Netlink提供的错误指示消息

内容

当用户空间的应用程序和内核空间的进程之间通过Netlink通信时发生了错误,Netlink必须向用户空间通报这种错误。Netlink对错误消息进行了单独封装,:

点击(此处)折叠或打开

struct nlmsgerr

{

int        error; //标准的错误码,定义在errno.h头文件中。可以用perror()来解释

struct nlmsghdr msg; //指明了哪条消息触发了结构体中error这个错误值

};

Netlink编程需要注意的问题

基于Netlink的用户-内核通信,有两种情况可能会导致丢包:

1、内存耗尽;

2、用户空间接收进程的缓冲区溢出。导致缓冲区溢出的主要原因有可能是:用户空间的进程运行太慢;或者接收队列太短。

如果Netlink不能将消息正确传递到用户空间的接收进程,那么用户空间的接收进程在调用recvmsg()系统调用时就会返回一个内存不足(ENOBUFS)的错误,这一点需要注意。换句话说,缓冲区溢出的情况是不会发送在从用户->内核的sendmsg()系统调用里,原因前面我们也说过了,请大家自己思考一下。

当然,如果使用的是阻塞型socket通信,也就不存在内存耗尽的隐患了,这又是为什么呢?赶紧去谷歌一下,查查什么是阻塞型socket吧。学而不思则罔,思而不学则殆嘛。

Netlink的地址结构体

在TCP博文中我们提到过在Internet编程过程中所用到的地址结构体和标准地址结构体,它们和Netlink地址结构体的关系如下:

struct sockaddr_nl{}的详细定义和描述如下:

点击(此处)折叠或打开

struct sockaddr_nl

{

sa_family_t    nl_family;    /*该字段总是为AF_NETLINK    */

unsigned short    nl_pad;        /* 目前未用到,填充为0*/

__u32        nl_pid;        /* process pid    */

__u32        nl_groups;    /* mulTIcast groups mask */

};

nl_pid:该属性为发送或接收消息的进程ID,前面我们也说过,Netlink不仅可以实现用户-内核空间的通信还可使现实用户空间两个进程之间,或内核空间两个进程之间的通信。该属性为0时一般适用于如下两种情况:

第一,我们要发送的目的地是内核,即从用户空间发往内核空间时,我们构造的Netlink地址结构体中nl_pid通常情况下都置为0。这里有一点需要跟大家交代一下,在Netlink规范里,PID全称是Port-ID(32bits),其主要作用是用于唯一的标识一个基于netlink的socket通道。通常情况下nl_pid都设置为当前进程的进程号。然而,对于一个进程的多个线程同时使用netlink socket的情况,nl_pid的设置一般采用如下这个样子来实现:

点击(此处)折叠或打开

pthread_self() << 16 | getpid();

第二,从内核发出的多播报文到用户空间时,如果用户空间的进程处在该多播组中,那么其地址结构体中nl_pid也设置为0,同时还要结合下面介绍到的另一个属性。

nl_groups:如果用户空间的进程希望加入某个多播组,则必须执行bind()系统调用。该字段指明了调用者希望加入的多播组号的掩码(注意不是组号,后面我们会详细讲解这个字段)。如果该字段为0则表示调用者不希望加入任何多播组。对于每个隶属于Netlink协议域的协议,最多可支持32个多播组(因为nl_groups的长度为32比特),每个多播组用一个比特来表示。

关于Netlink剩下的知识点,我们在后面的实战环节有用到时再讨论。



 

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

你了解过Linux内核中的Device Mapp...

Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机...

发表于 2019-04-29 15:25 0次阅读
你了解过Linux内核中的Device Mapp...

你知道linux内核中的device mappe...

LVM2是Linux 下的逻辑卷管理器,它可以对磁盘进行分区等。但是我们这里用LVM主要是利用用户空...

发表于 2019-04-29 15:19 2次阅读
你知道linux内核中的device mappe...

高端内存的详解:linux用户空间与内核空间

Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据...

发表于 2019-04-28 17:33 14次阅读
高端内存的详解:linux用户空间与内核空间

Linux内核模块间函数调用正确方法

模块之间发生调用关系是常有的事情,下面以两个模块A、B,B使用A模块提供的函数为例,讲解正确使用的方...

发表于 2019-04-28 17:00 12次阅读
Linux内核模块间函数调用正确方法

需要掌握的Linux内核源码分析方法

Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层...

发表于 2019-04-28 16:54 9次阅读
需要掌握的Linux内核源码分析方法

了解Linux体系结构和内核结构

用户空间中包含了C库,用户的应用程序。在某些体系结构图中还包含了shell,当然shell脚本也是L...

发表于 2019-04-28 16:52 11次阅读
了解Linux体系结构和内核结构

需要了解的Linux内核读写文件

在用户态,读写文件可以通过read和write这两个系统调用来完成(C库函数实际上是对系统调用的封装...

发表于 2019-04-28 16:43 7次阅读
需要了解的Linux内核读写文件

详细介绍Linux内核链表

链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重...

发表于 2019-04-28 16:39 10次阅读
详细介绍Linux内核链表

学会编写Linux内核模块

KDIR指向了系统当前内核的源代码树(build是源代码目录的一个链接,源代码一般在/usr/src...

发表于 2019-04-28 16:18 9次阅读
学会编写Linux内核模块

工程师应该了解的Linux内核引导参数

内核引导参数大体上可以分为两类:一类与设备无关、另一类与设备有关。内核源码树下的 Documenta...

发表于 2019-04-28 16:14 15次阅读
工程师应该了解的Linux内核引导参数

Linux 内核里的数据结构关键:基数树

基数树是一种 压缩的字典树compressed trie ,而字典树是实现了关联数组接口并允许以 键...

发表于 2019-04-28 16:04 15次阅读
Linux 内核里的数据结构关键:基数树

需要了解的Linux 内核工作原理

广义地来说kernel就是一个软件,它在硬件和运行在计算机上的应用程序之间提供了一个层。严格点从计算...

发表于 2019-04-28 15:25 10次阅读
需要了解的Linux 内核工作原理

你知道嵌入式Linux内核?文件系统的制作也是有...

嵌入式Linux系统使用的是Linux内核,制作方法基本和X86平台的Linux内核一致,下面介绍制...

发表于 2019-04-28 15:13 10次阅读
你知道嵌入式Linux内核?文件系统的制作也是有...

你知道Linux内核字符设备驱动的写操作?

如果驱动程序要向从用户空间将数据从buf拷贝到内核空间,必须利用内核提供的内存拷贝函数count:用...

发表于 2019-04-28 15:04 9次阅读
你知道Linux内核字符设备驱动的写操作?

要学会调试内核打印debugfs

name是创建的目录名字,parent是该目录的父目录。如果填NULL,则直接出现在debugfs的...

发表于 2019-04-27 19:01 14次阅读
要学会调试内核打印debugfs

用户空间和内核空间通讯-Netlink

当内核态的Netlink发送数据到用户空间时一般需要填充skbuff的控制块,填充的方式是通过强制类...

发表于 2019-04-26 13:49 20次阅读
用户空间和内核空间通讯-Netlink

用户空间和内核空间通讯- Netlink

如果我们在Netlink协议簇里开发一个新的协议,只要在该文件中定义协议号即可,例如我们定义一种基于...

发表于 2019-04-26 13:44 25次阅读
用户空间和内核空间通讯- Netlink

Linux 内核/sys 文件系统介绍

linux2.6内核引入sysfs文件系统,sysfs可以看成与proc,devfs和devpty同...

发表于 2019-04-25 16:20 16次阅读
Linux 内核/sys 文件系统介绍

基于Android的Linux内核的电源管理:E...

显然,该函数执行后,会在生成/sys/power目录,该目录下会建立一系列属性文件,其中一个就是/s...

发表于 2019-04-24 14:31 17次阅读
基于Android的Linux内核的电源管理:E...

工程师需要了解的Android系统架构及内核

Android是Google公司开发的基于Linux平台的开源手机操作系统,它包括操作系统、中间件、...

发表于 2019-04-24 13:44 20次阅读
工程师需要了解的Android系统架构及内核

NET II母婴程序安装

发表于 2019-04-24 10:27 8次阅读
NET II母婴程序安装

请问ad09层次原理图怎么使多张子图里面有名字相同的NET而不报Duplicate Net Names Wire

发表于 2019-04-23 23:43 12次阅读
请问ad09层次原理图怎么使多张子图里面有名字相同的NET而不报Duplicate Net Names Wire

Linux内核线程优先级设置的方法介绍

内核级线程和进程是一样的,前者与POSIX线程(pthread)有很大的区别。因此,内核的进程调度策...

发表于 2019-04-23 14:58 28次阅读
Linux内核线程优先级设置的方法介绍

Arduino接入OneNET云服务

作为开源三大硬件之一,Arduino应用已经非常广泛了,创客们使用Arduino开发了各种智能系统。

发表于 2019-04-22 15:47 61次阅读
Arduino接入OneNET云服务

OneNET平台MQTT协议分析

首先在修改官方例程中的参数信息,把WiFi名称和密码改成使用PC无线网卡模拟的热点网络,OneNET...

发表于 2019-04-19 15:03 42次阅读
OneNET平台MQTT协议分析

在openwrt中增加一个自定义的内核模块包的步骤

发表于 2019-04-16 14:25 20次阅读
在openwrt中增加一个自定义的内核模块包的步骤

概述linux异步信号handle

程序的二进制代码在内存中都有着确定的执行流程,为什么收到异步信号以后,程序会被“中断”,然后跳转到这...

发表于 2019-04-15 14:58 41次阅读
概述linux异步信号handle

Linux操作系统的用户空间和内核空间开发需要谨...

作为中央核心处理单元的CPU,除了生产工艺的不断革新进步外,在处理数据和响应速度方面也需要有权衡。稍...

发表于 2019-04-15 14:48 36次阅读
Linux操作系统的用户空间和内核空间开发需要谨...

微软把Linux看作危险的异类

这是一个美妙而且疯狂的时代,瞬息万变,一切皆有可能。 曾经一度,微软把Linux看作危险的异类

发表于 2019-04-12 16:44 416次阅读
微软把Linux看作危险的异类

请问同网络不同器件处不同线宽怎么设置?

发表于 2019-04-12 05:43 33次阅读
请问同网络不同器件处不同线宽怎么设置?

基于Linux和S3C2410的嵌入式图象传输系统的具体实现

发表于 2019-04-08 09:36 532次阅读
基于Linux和S3C2410的嵌入式图象传输系统的具体实现

浅析cephfs内核客户端性能追踪问题

发表于 2019-04-04 14:21 32次阅读
浅析cephfs内核客户端性能追踪问题

请问有MRF24J40MA的LIB

发表于 2019-04-03 12:38 14次阅读
请问有MRF24J40MA的LIB

linux内核对进程的管理分为两个方面

众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。l...

发表于 2019-04-03 08:58 128次阅读
linux内核对进程的管理分为两个方面

Net系列MVC的使用

发表于 2019-03-27 15:35 27次阅读
Net系列MVC的使用

IBM 豪赌微内核,开发下一代操作系统

IBM早在20世纪90年代豪赌微内核,看好它是操作系统领域的下一大技术,为此不惜耗费数十亿美元,最后...

发表于 2019-03-26 11:31 467次阅读
IBM 豪赌微内核,开发下一代操作系统

Camera Link 28位信号映射如何连接数据位

发表于 2019-03-18 14:59 53次阅读
Camera Link 28位信号映射如何连接数据位

使用u-boot的命令菜单下载内核,内核启动失败

发表于 2019-03-14 07:45 172次阅读
使用u-boot的命令菜单下载内核,内核启动失败

工业物联网快速增长 2019年IO-Link产品...

根据市场研究机构FMI的最新报告,2018年IO-Link产品全球销售额超过35亿美元,IO-Lin...

发表于 2019-02-12 14:00 717次阅读
工业物联网快速增长 2019年IO-Link产品...

mmap系统调用和vmalloc获取地址空间

mmap()系统调用是在用户进程与内核之间共享内存区域的常用方法。我们最近有个程序,需要应用进程能够...

发表于 2019-02-02 16:13 348次阅读
mmap系统调用和vmalloc获取地址空间

为什么安装Apollo3.0内核之后无法安装Nv...

新手想问一下,为什么安装Apollo3.0内核之后无法安装Nvidia驱动,并出现这样的报错?如果先...

发表于 2019-01-19 09:49 637次阅读
为什么安装Apollo3.0内核之后无法安装Nv...

为什么大部分NET程序员工资相对低

最近看到很多抱怨贴,也许有一定的道理,但是你想过没,为什么大部分.NET程序员工资相对低?我个人是这...

发表于 2019-01-11 15:14 692次阅读
为什么大部分NET程序员工资相对低

一名Net程序员的年终总结

恍恍惚惚2010年已经接近尾声了,一方面感叹时间过于迅速,另一方面不得不考虑明年的打算了。仔细想来今...

发表于 2018-12-20 14:35 1100次阅读
一名Net程序员的年终总结

学会分析Linux内核需要多久?8分钟

出于简便考虑,在此分析中,我忽略了对大内核的处理的分析,因为对大内核的处理,只是此引导过程中的一个很...

发表于 2018-12-04 17:06 939次阅读
学会分析Linux内核需要多久?8分钟

Vivad快捷键大全

Vivado里你会用哪些快捷键?

发表于 2018-12-01 09:40 431次阅读
Vivad快捷键大全

简析ARM内核和架构概念及其之间的关系

ARM产品越来越丰富,命名也越来越多。很多朋友提问: ARM内核和架构都是什么意思?内核和架构的关系...

发表于 2018-11-28 09:05 1031次阅读
简析ARM内核和架构概念及其之间的关系

使用SDAccel和RTL内核在AWS F1上进...

该视频概述了F1和SDAccel,使您可以了解AWS F1 HW和SW堆栈。 观看此视频,以深入了...

发表于 2018-11-28 06:56 284次阅读
使用SDAccel和RTL内核在AWS F1上进...

如何创建和使用Xilinx的UltraScale...

了解如何创建和使用Xilinx的UltraScale PCI Express解决方案。 使用Viv...

发表于 2018-11-28 06:36 383次阅读
如何创建和使用Xilinx的UltraScale...

intoPIX TICO夹层压缩的演示介绍

intoPIX TICO夹层压缩提供高达4:1的视觉无损压缩,并在使用Xilinx HDMI IP内...

发表于 2018-11-28 06:24 317次阅读
intoPIX TICO夹层压缩的演示介绍

Xilinx的HDMI 1.4Tx/Rx和HDM...

Xilinx的HDMI 1.4 Tx / Rx和HDMI 2.0 Tx / Rx的IP内核将采用最新...

发表于 2018-11-28 06:23 602次阅读
Xilinx的HDMI 1.4Tx/Rx和HDM...

Xilinx ST 2059 IP内核技术的演示

即将推出的Xilinx ST 2059 IP内核的早期技术演示展示了将时序和同步功能集成到ST 20...

发表于 2018-11-28 06:19 299次阅读
Xilinx ST 2059 IP内核技术的演示

Linux设备驱动程序基础知识的了解

了解Linux设备驱动程序的基础知识,重点关注设备节点,内核框架,虚拟文件​​系统和内核模块。 提...

发表于 2018-11-26 06:51 539次阅读
Linux设备驱动程序基础知识的了解

新型Xelic 100G楼梯EFEC内核演示

Xilinx Alliance成员演示采用新型Xelic 100G楼梯EFEC内核,与Cortina...

发表于 2018-11-26 06:37 299次阅读
新型Xelic 100G楼梯EFEC内核演示

如何在ZC702板上运行Linux内核源代码

了解如何获取Xilinx Linux内核源代码,配置它,构建内核和设备树,最后在ZC702板上运行新...

发表于 2018-11-23 07:09 687次阅读
如何在ZC702板上运行Linux内核源代码

u-boot中Hush shell的功能及编写脚...

了解u-boot中Hush shell的功能,以及如何为其编写脚本。 说明了存储和检索脚本的方法。

发表于 2018-11-22 07:00 756次阅读
u-boot中Hush shell的功能及编写脚...

N维内核范围的问题空间

OpenCL的一个关键概念是将应用程序问题划分为多维问题空间。 被称为N维内核范围的问题空间的每个...

发表于 2018-11-22 06:44 739次阅读
N维内核范围的问题空间

SDAccel RTL内核向导(4-3)

该培训视频涵盖了SDAccel RTL内核向导,并详细介绍了打包RTL设计,构建FPGA设计和生成A...

发表于 2018-11-21 06:30 385次阅读
SDAccel RTL内核向导(4-3)

华为麒麟980内核照有什么内部秘密华为麒麟980...

华为麒麟980是第一个公开宣布的7nm工艺移动芯片,台积电代工,集成了多达69亿个晶体管,但对于核心...

发表于 2018-11-11 11:04 1561次阅读
华为麒麟980内核照有什么内部秘密华为麒麟980...

优化简单的OpenCL内核:调整内核优化

Robert Ioffe描述了一系列一致的优化,可以提高英特尔®上的OpenCL内核性能Iris™图...

发表于 2018-11-07 06:17 438次阅读
优化简单的OpenCL内核:调整内核优化

英特尔上OpenCL内核性能的优化

Robert Ioffe描述了一系列一致的优化,可以提高英特尔®上的OpenCL内核性能Iris™图...

发表于 2018-11-07 06:16 543次阅读
英特尔上OpenCL内核性能的优化

利用Embree Ray Tracing Ker...

利用Embree Ray Tracing Kernel进行高级光线跟踪和场景创建

发表于 2018-11-06 06:56 963次阅读
利用Embree Ray Tracing Ker...

微软新的机器学习框架核心产品机器学习引擎infe...

感觉微软对开源上瘾了。在开源了跨平台机器学习框架ML.NET之后,微软又开源了一个非常重要的机器学习...

发表于 2018-10-14 11:01 1075次阅读
微软新的机器学习框架核心产品机器学习引擎infe...

Linux这么多的内核版本你是怎么选的?内核版本...

Linux Kernel 的稳定分支维护者 Greg Kroah-Hartman 近日在其个人博客上...

发表于 2018-10-03 12:34 830次阅读
Linux这么多的内核版本你是怎么选的?内核版本...

如何解决Linux进程调度优先级数字混乱的问题?...

有点晕 Linux进程的调度优先级数字会在好几个地方出现:内核,用户,top命令。他们各自都有自己的...

发表于 2018-10-03 10:24 735次阅读
如何解决Linux进程调度优先级数字混乱的问题?...

Linus Torvalds宣布暂时退出Linu...

“专注于技术的优势在于你可以拥有一些主要的客观衡量标准,这样一些共识才有可能达成,而社区也会非常健康...

发表于 2018-09-30 09:05 1403次阅读
Linus Torvalds宣布暂时退出Linu...

NET工程师应具备的基本素质有哪些

下面我就和大家一起来分享下作为一名.NET工程师应具备的七大技能吧:

发表于 2018-09-27 10:20 954次阅读
NET工程师应具备的基本素质有哪些

Linux内核的代码隐藏的美妙故事

因为LINUX操作系统的流行,Linus 已经成为地球人都知道的名人。虽然大家可能都听过钱钟书先生的...

发表于 2018-09-23 14:49 871次阅读
Linux内核的代码隐藏的美妙故事

Linux内核作为一个超级巨大的开源项目,你知道...

当涉及基于公司电子邮件域的顶级内核贡献者时,该列表由 Intel,Red Hat,Linux Fou...

发表于 2018-09-18 17:51 1540次阅读
Linux内核作为一个超级巨大的开源项目,你知道...

用英特尔®分配实现Python的高性能计算

Learn how to accelerate Python* for advanced numer...

发表于 2018-09-14 06:09 500次阅读
用英特尔®分配实现Python的高性能计算

关于嵌入式系统的特点和Linux内核的实时应用分...

Linux本身为分时操作系统,其系统目标为较好的平均响应时间和较高的吞吐量,而实时系统则主要考虑任务...

发表于 2018-09-05 17:25 288次阅读
关于嵌入式系统的特点和Linux内核的实时应用分...