• linux网络、存储性能测试


    network shell

    cat /tmp/f | /usr/bin/zsh -i 2>&1 | nc -vl 127.0.0.1 8081 > /tmp/f

    端口探测
    nc -vz -w1 192.168.50.10 3322
    nc -vz -w1 192.168.50.10 3300-3333

    双向转发 - 交叉配对
    mkfifo nc_pipe
    nc -l -p 1234 < nc_pipe | nc 127.0.0.1 5678 > nc_pipe

    传输文件
    nc -l -p xxx > file2
    nc x.x.x.x xxx < file1

    可以和tar配合来搞定目录
    nc -vl 8080 | tar -xzvf -
    tar -czvf - snic_dpdk | nc 172.29.47.131 8080 -v

    开启后门
    nc -lk -p xxx -e /bin/sh

    ref
    https://program-think.blogspot.com/2019/09/Netcat-Tricks.html?m=1

    chenshuo network

    performance test

    construct random file
    dd if=/dev/urandom of=data.bin bs=1M count=1024

    local host test

    硬件配置atom: 2个核

    测本地性能

    主要为了看看 内核网络协议栈的开销大不大
    2个进程,2个核
    time nc -N localhost 5001 < xxx.img
    nc -l 5001 > /dev/null

    4个进程,2个核
    213MB
    dd if=/dev/zero bs=1MB count=10000 | nc localhost 5001
    nc -l 5001 | pv -W > /dev/null

    网络连接性能

    nc xxx 5001 < data.bin
    nc -l 5001 > /dev/null

    disk io

    disk read - 450MB on 206

    dd if=/dev/sda of=/dev/null bs=1M count=1000 iflag=direct

    disk write - 450MB on 206

    dd if=/dev/zero of=data.bin bs=1M count=1000 oflag=direct

    on soc
    136MB

    206 的测试过程

    磁盘IO
    协议栈开销
    内存带宽

    disk read - 450MB on 206

    dd if=/dev/sda of=/dev/null bs=1M count=1000 iflag=direct

    disk write - 450MB on 206

    dd if=/dev/zero of=data.bin bs=1M count=1000 oflag=direct

    本地网络性能

    768MB 1.4s
    dd if=/dev/zero bs=1M count=1000 | nc localhost 5001

    1.1s
    time nc localhost 5001 < data.bin

    内存带宽

    1.7GB
    dd if=/dev/zero of=/dev/shm/A bs=2M count=1024

    网络和io可能重叠,然后串行 比如 ssh + networkIO

    sysctl -A | grep “tcp.*mem”

    阻塞会导致死锁 收发包队列是有限的。应对方式:TCP也要消息分包,然后要先本地存储,不要收完马上发。因为对端还在发,你发过去不接受,会堆积在收包缓冲队列。

    优雅关闭TCP

    read buffer 不为空时,close会触发rst

    SIGPIPE

    一个连接被rst后,继续socket write 会触发SIGPIPE信号.默认行为是杀死进程.

    signal(SIGPIPE, SIG_IGN);

    TCP_NODELAY

    NAGLE算法和tcp delay ack导致大延时 => 小数据包的 write-write-read 过程

    发送首包小数据packet, 后续包就要等待这个首包ack后才能发送,也就是1个延时RTT

    建议默认关闭nagle

    sudo tcpdump -i eth0 -n tcp port 5001

    SO_REUSEADDR

    适用服务器异常挂死后,重启,监听端口就不会提示 端口正在使用中。
    使得 可以 重复监听一个端口,这样就可以fork进程来监听

    thread per connection 节约了一个系统调用epoll_wait,等待描述符就绪

    read间隙 会不会 丢掉buffer

    阻塞也是一个速率匹配的过程,消费者没消费,生产者也会停滞的。

    读写共用一个线程。

    阻塞容易影响其他方向的IO

    noblocking write 不会阻塞read了

    block io can cause dead lock

    性能测试

    ab -k -n 100000 http://localhost:5001/

    页表

    还是要细致看看书

    视频不好回溯,看完视频 就忘,还不好回溯。

  • 相关阅读:
    asyncio.sleep
    [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
    花了20W才怠结出的短视频运营真话
    IP组播简介
    MySQL第八讲·如何进行数学计算、字符串处理和条件判断?
    【Matplotlib绘制图像大全】(十九):Matplotlib绘制等高线
    什么是CDN
    Java Pattern.split()方法具有什么功能呢?
    复杂逻辑的开发利器—Mendix快速实现AQL质量抽检
    网络IP地址配置
  • 原文地址:https://blog.csdn.net/qq_20679687/article/details/127652528