小编jwb*_*ley的帖子

Linux,了解 setsockopt() PACKET_FANOUT 用于网络扩展

我已经阅读了数据包手册页和一些博客| 试图了解如何使用 PACKET_FANOUT 套接字选项来扩展接收数据的处理的帖子(我希望使用 SOCK_RAW 以高速捕获流量,> 10Gbps)。我已经通读了这个示例代码(复制如下),但我不确定我是否完全理解它。

让我们想象一个场景;网卡上已经设置了RSS,入口流量在RX队列之间均匀分布,有一个8核CPU和8个网卡RX队列,每个RX队列[0-7]分别向CPU[0-7]发送一个中断(关于 MMAP、零拷贝、poll() 等的进一步讨论不在此处讨论)。

这是我在示例代码中看到的事件顺序:

  1. 启动了 8 个工作线程 [0-7],每个线程都固定到一个 CPU [0-7]。
  2. 每个线程使用setup_socket()绑定到同一物理 NIC、promisc 模式和同一 FANOUT 组的所有部分创建一个套接字(我们再次说 0-7)。
  3. 现在我们有(例如)工作线程 0 绑定到 CPU 0,它创建了套接字 0。该线程进入一个无限循环,仅对套接字 0 调用 read()。
  4. 当数据包进入 NIC RX 队列 0 时,将向 CPU 0 发送中断。CPU 0 将数据包 DMA 到内核接收缓冲区空间。PACKET_FANOUT 套接字选项与标志 PACKET_FANOUT_CPU 一起应用,因此只有与数据包进入的 CPU 内核(内核 0)read()上的套接字才会在对该套接字进行调用时显示可用数据(因此套接字 0 由线程 0 创建only),然后由于此标志,数据仅复制到该线程的用户空间接收缓冲区。

第 4 点是我对这个过程的理解中的主要疑问点。我是否正确理解在这种情况下如何使用 PACKET_FANOUT 进行缩放,以及我们如何将工作线程锁定到处理中断的同一核心?

void start_af_packet_capture(std::string interface_name, int fanout_group_id) {

    // …
Run Code Online (Sandbox Code Playgroud)

c sockets linux networking multithreading

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

如何在Ansible $ var中循环次数?

我想在Ansible中运行一个变量中定义的次数.这有可能吗?

想象一下服务器列表,我们想在每台服务器上创建一些编号文件.这些值在vars.yml中定义:

server_list:
  server1:
    name: server1
    os: Linux
    num_files: 3
  server2:
    name: server2
    os: Linux
    num_files: 2
Run Code Online (Sandbox Code Playgroud)

我想要的输出是文件/tmp/1,/tmp/2/tmp/3在server1 上创建,/tmp/1/tmp/2在server2上创建.我试图写用剧本with_nested,with_dict而且with_subelements但我似乎无法找到任何方式到这一点:

- hosts: "{{ target }}"

  tasks:

    - name: Load vars
      include_vars: vars.yml

    - name: Create files
      command: touch /tmp/{{ loop_index? }}
      with_dict: {{ server_list[target] }}
      loop_control:
        loop_var: {{ item.value.num_files }}
Run Code Online (Sandbox Code Playgroud)

如果我需要在每台服务器上创建50个文件,我可以看到如何为每个服务器创建一个列表变量,如果列表中包含50个项目,这只是数字1到50,但这将是一个自我击败Ansible的使用.

dictionary loops nested-loops ansible

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

安装Perl DateTime

在为Perl安装DateTime时,我收到以下错误,但它失败了;

#   Failed test 'Make sure we can add 50 years worth of years in America/New_York time zone'
#   at t/30future-tz.t line 45.
Use of uninitialized value in numeric ge (>=) at /home/bensley/.cpan/build/DateTime-0.72/blib/lib/DateTime.pm line 138.

#   Failed test 'Make sure we can add 50 years worth of days in America/Chicago time zone'
#   at t/30future-tz.t line 45.
Use of uninitialized value in numeric ge (>=) at /home/bensley/.cpan/build/DateTime-0.72/blib/lib/DateTime.pm line 138.

#   Failed test 'Make sure we can add 50 years worth …
Run Code Online (Sandbox Code Playgroud)

perl perl-module

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

Android:strings.xml中的字符串不是字符串?

在res/values下编辑我的strings.xml时,我可以看到它们出现在gen/my_package/R.java中,但它们是静态的最终int,为什么会这样?

- 为什么它们是静态最终的,大概这意味着我无法更新它们,即如果我将字符串分配给文本框,是否可以在某些时候从我的代码更新该字符串以更新文本框的内容?

- 同样为什么这些整数,特别是它们似乎是十六进制值.如果这是声明这些值的首选方法,为什么我们不首先将它们声明为十六进制值?

string android

2
推荐指数
1
解决办法
562
查看次数

Bash“for”循环,如果条件计数为零?

我在 bash 中有一个 for 循环;

for Names in `grep "name" $people`
do
    echo "name is $name"
done
Run Code Online (Sandbox Code Playgroud)

我怎么能有一个像这样的 if 语句;

for Name in `grep "name" $people`
# Make sure we found some names
if [ "count of $Name=0" ]
then
    echo "no names found"
fi

# Else, if we did grep out a list of names, print them
do
    echo "name is $Name"
done
Run Code Online (Sandbox Code Playgroud)

bash for-loop count

2
推荐指数
1
解决办法
502
查看次数

我需要什么样的MySQL加入?

在表中具有匹配ID值的简单MySQL表:

table 1;
pid, firstname

table 2;
id, pid, property, value
Run Code Online (Sandbox Code Playgroud)

可以说表1中有一个人输入:

pid: 1
firstname: fred
Run Code Online (Sandbox Code Playgroud)

对于每个人,有多个表2条目:

pid: 1
property: likes cats?
value: no

pid: 1
property: eye colour
value: orange

pid: 1
property: favourite food
value: sox
Run Code Online (Sandbox Code Playgroud)

我想只选择两个表中的两个条目,比如说眼睛的颜色,并赞成给定人物ID的食物条目.什么样的外部联接可以实现这一目标?

SELECT `t1`.name
FROM `table1` AS t1
LEFT JOIN `table2` t2 ON `t1`.pid = `t2`.pid
WHERE `t1`.pid = 1
AND `t2`.property =  'eye colour'
Run Code Online (Sandbox Code Playgroud)

我被困在这里,如何从table2获得两行并包括赞成食物?(在任何人说出之前,我不能改变这个数据库的结构).

谢谢阅读.

mysql outer-join

2
推荐指数
1
解决办法
90
查看次数

Grep有两个有序字符串(如正则表达式中的逻辑AND)

我试图用两个字符串grep文件的行,所以string1 logical_ AND string2.

示例行grep:

The quick brown fox and the cat
Run Code Online (Sandbox Code Playgroud)

我希望grep通过匹配"快速""猫"来排除那一行,注意"the""cat"之间的空格.这就是让我失望的原因.

grep .*quick.*cat myfile
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想grep "猫"和;

grep .*quick.*the cat myfile
Run Code Online (Sandbox Code Playgroud)

显然由于空间不起作用.我不明白我怎么能用空间包围"猫"

regex grep

2
推荐指数
1
解决办法
5269
查看次数

c ++ cout uncasted memory(void)

这就是场景;

// I have created a buffer
void *buffer = operator new(100)

/* later some data from a different buffer is put into the buffer at this pointer
by a function in an external header so I don't know what it's putting in there */

cout << buffer;
Run Code Online (Sandbox Code Playgroud)

我想打印出在这个指针放入缓冲区的数据,以查看输入的内容.我想将其打印为原始ASCII,我知道会有一些不可打印的字符,但我也知道一些易读​​的文字被推到了那里.

从我在互联网上看到的内容cout不能打印出像a的未发布数据void,而不是a intchar.但是,例如,编译器不会让我在运行中使用它(char).我应该创建一个单独的变量,在指针处转换值然后cout该变量,还是有一种方法可以直接执行此操作以保存另一个变量?

c++ casting cout

2
推荐指数
1
解决办法
424
查看次数

Bash脚本:sed/awk/regex匹配IP地址并替换

我在bash脚本中有一个字符串,其中包含一行日志条目,例如:

Oct 24 12:37:45 10.224.0.2/10.224.0.2 14671: Oct 24 2012 12:37:44.583 BST: %SEC_LOGIN-4-LOGIN_FAILED: Login failed [user: root] [Source: 10.224.0.58] [localport: 22] [Reason: Login Authentication Failed] at 12:37:44 BST Wed Oct 24 2012
Run Code Online (Sandbox Code Playgroud)

澄清; 在那里列出的第一个IP"10.224.0.2"是提交此日志条目的机器,登录尝试失败.有人试图从日志条目"10.224.0.58"中第二个IP地址的计算机登录并失败.

我希望用该机器的主机名替换第一次出现的IP地址"10.224.0.2",因为你可以看到目前是"IPADDRESS/IPADDRESS",这两次使用相同的信息是没用的.所以在这里,我想grep(或类似地)输出第一个IP,然后将其传递给类似host命令以获取反向主机并在日志输出中替换它.

我想重复第二次IP"10.224.0.58".我想找到这个IP,并用主机名替换它.

不过,这不仅仅是那两个特定的IP地址,任何IP地址.所以我想搜索1到3之间的4个整数,相隔3个句号'.'

正则表达式是前进的方向,还是使问题复杂化?

非常感谢.

regex awk replace sed

2
推荐指数
1
解决办法
1万
查看次数

PostgreSQL;在 INSERT 中使用 SELECT 子查询

我正在尝试使用SELECT子查询来选择staff具有该属性的所有用户Likes tea,然后对于所有其他员工用户,为每个用户在表中插入一行,该属性表示他们也喜欢茶(事实证明每个人都喜欢茶,但是收集表数据时未记录)。

这是数据集的一个例子;

 tbl_users:
 user | attribute     
------+---------------
 dave | Likes tea     
 dave | Likes coffee  
 alan | Likes tea     
 fred | Likes juice   
 fred | Likes water   
 john | Likes cola    

 tbl_groups:
 user | group
------+---------------
 dave | staff         
 alan | staff         
 fred | staff         
 john | staff         
 neil | non-staff     
 tony | non-staff     
Run Code Online (Sandbox Code Playgroud)

下面是缺少的语句,如果我单独写出所有必需的INSERT语句,它们将获得相同的结果,但是实际数据集中需要数千个INSERTs,所以我真的想使用子查询(或类似的)来为我做一下:

INSERT INTO tbl_users (user, attribute) VALUES ('fred', 'Likes tea');
INSERT INTO tbl_users (user, attribute) …
Run Code Online (Sandbox Code Playgroud)

postgresql subquery

2
推荐指数
1
解决办法
6390
查看次数