小编Tim*_*ler的帖子

带有Intel 82X38/X48 Express芯片组的x86上的RHEL7.4 - 完全无法将中断传送到我的驱动程序

我和我的同事正在使用我们的一个基于PCIe的产品,我们发现某种平台/芯片组依赖性阻止了中断被传送到我们的Linux内核驱动程序(rapafp).我们必须继续在该领域支持的该产品的一个旧版本是从旧的PCI设计改造而来.所以我们得到的是一些FPGA,其中一个具有66MHz PCI-32接口,并且连接到Texas Instruments XIO PCI-to-PCIe桥接器.我应该注意到,我已经孜孜不倦地研究了几天,我只是没有到达任何地方.我们已经明确地考虑过我们自己设备的硬件问题,但是我们换掉了多张卡,并没有任何区别.

有效的参考系统

我们有一个运行RHEL6.5的系统运行良好,因此我们将其用作参考.以下是有关该平台的一些信息.我不知道你需要什么程度的细节,我不想写一个垃圾问题.请让我知道提供什么以及如何(内联问题,pastebin等)将有用.

来自uname -a:

Linux DL-2-107.localdomain 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

来自/ proc/interrupts:

           CPU0       CPU1       
...
 16:  609672457 1344098703   IO-APIC-fasteoi   uhci_hcd:usb3, pata_jmicron, rapafp    
Run Code Online (Sandbox Code Playgroud)

来自dmesg的信息:

rapafp driver version 3.3.0.5
rapafp: Requesting IRQ 16
TSI: rapafp0 (BusID 2:0:0) is RAPTOR 4000 @ 2048x2048
TSI: rapafp1 (BusID 2:0:0) is RAPTOR 4000 @ 1280x1024
Run Code Online (Sandbox Code Playgroud)

来自lspci:

# lspci -t
-[0000:00]-+-00.0
           +-01.0-[01-02]----00.0-[02]----00.0

00:01.0 PCI bridge: Intel Corporation 82Q35 Express PCI Express …
Run Code Online (Sandbox Code Playgroud)

interrupt linux-kernel pci-bus

5
推荐指数
0
解决办法
124
查看次数

如何将外部 C 库链接到 WebAssembly 构建

我正在阅读这篇文章(https://www.smashingmagazine.com/2019/04/webassembly-speed-web-app/),其中解释了他们如何使用 zlib 等来加速他们的 Web 项目:

为了支持 zlib 库,我们使用标志 USE_ZLIB;zlib 是如此普遍以至于它已经被移植到 WebAssembly,并且 Emscripten 会在我们的项目中为我们包含它

我想在我自己的 WASM 模块中使用 zlib。

在我的 C 代码(用 emcc 编译)中,我编写了这个接口函数:

#include <zlib.h>

int pcf_decompress_zlib(unsigned char *input, int input_length, unsigned char *output, int output_length)
{
    uLongf output_length_result = output_length;
    int result = uncompress(output, &output_length_result, input, input_length);
    if (result != Z_OK) {
        return 0;
    } else {
        return output_length_result;
    }
}
Run Code Online (Sandbox Code Playgroud)

我是这样编译的:

emcc decompress.c -O3 -s WASM=1 -s SIDE_MODULE=1 -s "EXPORTED_FUNCTIONS=['_pcf_decompress_zlib']" -s USE_ZLIB=1 -o decompress.wasm
Run Code Online (Sandbox Code Playgroud)

当我这样做时,emcc 自动下载到一个 zlib …

zlib webassembly

5
推荐指数
1
解决办法
717
查看次数

Linux套接字:零拷贝本地,TCP/IP远程

网络是我操作系统中最糟糕的区域,所以请原谅我提出一个不完整的问题.我已经读了几个小时了,但是我的脑子里有点游泳.(对我而言,与制定网络协议相比,我觉得芯片设计很容易.)

我有一些通过套接字相互通信的网络服务.具体来说,创建套接字fd = socket(PF_INET, SOCK_STREAM, 0);,自动获取TCP/IP.我需要这个作为基本案例,因为这些服务可能在不同的机器上运行.

但对于一个项目,我们试图将它们全部压缩到基于Atom Z530P的功能不足的嵌入式"设备"中,因此在我看来,内存复制开销是我们可以优化的.我在这里一直在阅读:data-link-access-and-zero-copyLinux_packet_mmap以及packet_mmap.

对于这种情况,可以创建如下的套接字:fd = socket(PF_PACKET, PF_RAW, 0);.还有很多其他事情要做,比如分配环形缓冲区,对它们进行映射,将它们与套接字相关联等等.看起来你只能使用sendtorecvfrom传输数据.据我所知,由于套接字是本地的,你不需要一个可靠的"流"类型套接字,所以原始套接字是适当的接口,我猜测环形缓冲区是以页面粒度使用的,每个数据包(或数据报)从页面边界开始.

在我花费大量时间尝试进一步调查之前,我希望一些有用的人可以帮助我解决一些问题:

  • 我应该从零拷贝套接字中获得多少性能优势?我想最后一次检查,我们从一个进程到另一个进程最多移动到40 MB /秒,最后到磁盘.在最基本的场景中,数据从捕获过程转移到一对多进程(其他人可以监听流),转移到写入磁盘的归档进程.这是两个不计算磁盘和内部东西的啤酒花.
  • Linux是否会自动执行此操作,优化在同一台计算机上运行的进程?
  • 在任何情况下,我都会在TCP端口中监听套接字.我可以使用它们在进程之间建立连接但仍然可以使用零拷贝吗?换句话说,我可以将AF_INET与PF_PACKET一起使用吗?
  • 具有SOCK_RAW的PF_PACKET是零拷贝套接字的唯一有效配置吗?
  • 是否有任何好的示例代码将使用TCP/IP的零拷贝作为后备?
  • 检测两个进程在同一台机器上的最简单或最好的方法是什么?他们知道彼此的IP地址,所以我可以比较并使用不同的代码路径.有更简单的方法吗?
  • 我可以在基于数据包的套接字上使用write()和read(),还是仅对流有效?(重写连接的方式会更简单,然后重写所有套接字代码.)
  • 我是否过度复杂化和/或优化错误的东西?OProfiler告诉我,大多数CPU时间花费在两个地方:(1)zlib,以及(2)内核,我无法分析,因为我使用的是CentOS 6.2,它没有提供vmlinux.我假设内核时间是空闲时间和数据复制的组合,而不是其他.

在此先感谢您的帮助!

sockets linux zero-copy

4
推荐指数
1
解决办法
5898
查看次数

从PHP / Apache,exec()或system()程序作为root用户:“ sudo:无法打开审核系统:权限被拒绝”

我已经花了半天的时间来解决这个问题,并且我已经做了很多研究。我也熟悉许多与此主题相关的讨论,例如这一主题: 如何以root用户身份运行PHP exec()?

不幸的是,我发现的建议似乎都不适合我。

首先,我正在为规范编写内容,因此我无法避免这样做。此外,所有计算机都将存在于未连接到Internet的专用网络上。虽然拥有一些安全性很重要,但最重要的是要防止错误。我的目标是配置一些“瘦服务器”。通过PHP脚本,我需要能够更改网络配置(静态或DHCP)并重新启动网络。

我尝试的第一件事是编写一个SUID根目录的C程序。它读取,修改和写入网络配置文件。如果我以普通用户身份运行它,它将运行良好,并且可以访问和修改root拥有的文件。但是,如果我从PHP脚本运行它,则会出现访问错误。看来Apache会以某种方式阻止SUID根。

根据其他讨论的建议,我尝试了“ sudo”方法。我暂时将其添加到/ etc / sudoers:apache ALL =(ALL)NOPASSWD:ALL

我得到的错误是:sudo:无法打开审核系统:权限被拒绝

根据此俄语页面,发生这种情况是因为RHEL(我正在使用Fedora)之类的系统默认对sudoers是requiretty。所以我将这一行添加到/ etc / sudoers:默认值!requiretty

我仍然遇到相同的错误。sudo:无法打开审核系统:权限被拒绝

我完全被困在这里了。也就是说,除非我想以根用户身份运行Apache本身,否则会比其他任何事情都更加不便。

有人可以在这里提出任何建议吗?我意识到我要做的事很奇怪。我敢打赌,你们中的一些人会向我介绍一些用于远程配置Fedora机器的现有系统(现在,我想到了,现在就开始研究)。

顺便说一句,我正在运行SELinux,因为默认情况下这就是Fedora 15的配置方式。

谢谢。

编辑:
我找到了本教程:http :
//www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/

不幸的是,当我运行“ setsebool httpd_disable_trans 1”时,出现错误:
无法更改活动布尔值:无效布尔值

我还尝试直接编辑不存在的“ / etc / selinux / targeted / booleans”,然后重新启动apache,但这也不起作用。

php apache sudo suid

3
推荐指数
1
解决办法
9925
查看次数

标签 统计

apache ×1

interrupt ×1

linux ×1

linux-kernel ×1

pci-bus ×1

php ×1

sockets ×1

sudo ×1

suid ×1

webassembly ×1

zero-copy ×1

zlib ×1