跳转至

2021

ZEN2

Zen 2 使用所谓的 TAGE 分支预测器,它比其前身具有更深的分支历史。这通过比 Zen (+) 更大的分支目标缓冲区 (BTB) 得到增强,L1 BTB(512 个条目)增加了一倍,L2 BTB 几乎增加了一倍(现在为 7K)。随着 MOP 缓存增长到 4K,更大更好的主题仍在继续。这特别方便,因为没有处理器想要多次解码微操作。将它们解码一次并将它们放入大(r)缓存中可以加快速度并使处理器更高效。

有趣的是,在分析了大量应用程序及其数据集大小后,指令缓存实际上从 64KB 下降到 32KB,但关联性从 4 路增加到 8 路。原因是,根据 Mike Clark 的说法,这种减少几乎不会降低性能:无论如何,大多数数据集都需要超过 64KB。新的缓存还具有改进的预取和更好的利用率。

这一切意味着 Zen 2 的前端更高效——有助于 IPC——但确实以占用更多空间为代价。

Zen 2 微架构的简化图

单个核心

参考文献

https://hexus.net/tech/news/cpu/131549-the-architecture-behind-amds-zen-2-ryzen-3000-cpus/

https://en.wikichip.org/wiki/amd/microarchitectures/zen_2

Openmpi MPIOPT

# 华为ARM
MPIOPT="-mca pml ucx --mca btl ^vader,tcp,openib,uct -x UCX_NET_DEVICES=mlx5_0:1"
mpirun -np 4 $MPIOPT ./prob1

mpirun参数

root用户需要加–allow-run-as-root 参数1 参数2

-x \

  1. 在执行程序之前将指定的环境变量导出到远程节点。
  2. 每个 -x 选项只能指定一个环境变量。 可以指定现有环境变量或使用相应值指定新变量名称。 例如:
    % mpirun -x DISPLAY -x OFILE=/tmp/out ...
    
  3. 建议用户在环境中设置变量,然后使用 -x 导出(非定义)它们。

MCA 组件

设置 MCA(Modular Component Architecture ) 参数

-mca 开关允许将参数传递给各种 MCA(模块化组件架构)模块。 MCA 模块对 MPI 程序有直接影响,因为它们允许在运行时设置可调参数(例如使用哪个 BTL 通信设备驱动程序,向该 BTL 传递什么参数等)。

-mca 开关接受两个参数:\ 和 \。 \ 参数通常指定哪个 MCA 模块将接收该值。例如,\ "btl" 用于选择用于传输 MPI 消息的 BTL。 \ 参数是传递的值。

mpirun -mca btl tcp,self -np 1 foo
告诉 Open MPI 使用“tcp”和“self”BTL,并运行一个已分配的“foo”节点。

可以多次使用以指定不同的 \ 和/或 \ 参数。如果多次指定相同的 \,则 \ 将用逗号 (",") 连接起来,将它们分隔开。

未知的\值不会报warning

MCA通过环境变量实现

OMPI_MCA_\=\

MCA通过指定包含相关选项的文件实现

-tune, --tune \

MCA设置的优先级

-mca选项会覆盖环境变量,也会覆盖默认文件

$OPAL_PREFIX/etc/openmpi/openmpi-mca-params.conf

或者$OPAL_PREFIX/etc/openmpi-mca-params.conf

或者$HOME/.openmpi/mca-params.conf

MCA 默认default值

https://stackoverflow.com/questions/36635061/how-to-check-which-mca-parameters-are-used-in-openmpi

set mpi_show_mca_params to all

MCA可用的组件-通过ompi_info

ompi_info指令

ompi_info - 显示有关 Open MPI 安装的信息 三种常见场景: 1. 检查本地配置并查看 Open MPI 是如何安装的。 2. 向 Open MPI 社区提交错误报告/帮助请求 3. 查看已安装的 Open MPI 插件列表并查询它们支持哪些 MCA 参数。 4. ompi_info --all 显示所有MCA选项,包括在某些环境变量值下才可用的隐藏选项

ompi_info查看使用情况

比如不清楚 --mca btl vader,可以运行 ompi_info --param btl vader --level 9

BTL

MPI point-to-point byte transfer layer, used for MPI

BTL 组件框架负责处理所有点对点消息传送,该层只是简单地移动字节序列,不考虑上层点对点通信协议,包含了一组用于发送/接收或RDMA 的通信组件单元。BTL 不受 MPI 语义的影响,它仅仅是通过最基本的传递功能来在进程间进行数据交换(包括连续的和非连续的数据)。这样的组件框架为网络设备的开发商提供了便利,同时也可以支持更广泛的结点间通信设备。

^号与...符号

btl 参数的值是一个由逗号分隔的组件列表,带有可选的前缀 ^(插入符号)来表示排除之后的组件。

% mpirun --mca framework comp1, comp2 ^comp3 # ^comp3前注意没有,号
在此示例中,组件 comp1 和 comp2 包含在 --mca 框架指定的框架中。组件 comp3 被排除在外,因为它前面有 ^(插入符号)符号。
% mpirun --mca framework ^comp3,comp1
因为,号的原因是一个整体,所以是排除comp3,comp1两项

例如,以下命令从 BTL 框架中排除 tcp 和 openib 组件,并隐式包含所有其他组件

% mpirun --mca btl ^tcp,openib ... # ...是rest的意思
在命令中使用插入符号后跟省略号表示“对其余组件执行相反的操作”。 当 mpirun --mca 命令指定要排除的组件时,省略号后面的插入符号隐式包含该框架中的其余组件。 当 mpirun --mca 命令专门包含组件时,后面跟有省略号的表示“并排除未指定的组件”。

例如,以下命令仅包含 btl 的 self、sm 和 gm 组件,并隐式排除其余部分:

% mpirun --mca btl self,sm,gm ...

PML

MPI point-to-point management layer

PML 组件框架负责管理所有消息的传递,实现了 MPI 点点通信原语,包括标准、缓冲、准备和同步四种通信模式。PML 根据具体的调度策略对 MPI 消息进行调度,该策略是根据 BTL 的具体属性决定的。短消息传递协议和长消息传递协议也是在 PML 中实现的。所有控制信息(ACK/NACK/MATCH)也都由 PML 进行管理。这种结构的优点是将传输协议从底层互连中分离出来,显著的降低了代码的复杂度和冗余度,增强了可维护性。

需要进一步的研究学习

不使用btl??

遇到的问题

暂无

参考文献

https://docs.oracle.com/cd/E19923-01/820-6793-10/mca-params.html

https://www.open-mpi.org/faq/?category=openfabrics

http://blog.sysu.tech/MPI/OpenMPI/OpenMPI%E5%B8%B8%E7%94%A8%E6%8A%80%E5%B7%A7/

http://blog.sysu.tech/MPI/OpenMPI/OpenMPI%E5%B8%B8%E7%94%A8%E6%8A%80%E5%B7%A7/

https://blog.csdn.net/qq_15457239/article/details/49152209

IPCC Preliminary SLIC Analysis part4 : cluster environment

login node

id

[sca3173@ln121%bscc-a5 ~]$ id sca3173
do_ypcall: clnt_call: RPC: Remote system error
do_ypcall: clnt_call: RPC: Remote system error
uid=5804(sca3173) gid=5804(sca3173) groups=5804(sca3173),1518

cpu

Intel(R) Xeon(R) Silver 4208 CPU @ 2.10GHz

slurm

ON AVAIL  TIMELIMIT  NODES  STATE NODELIST 
amd_256      up   infinite      3 drain* fa[0512,0911],fb1111 
amd_256      up   infinite      1  down* fa0714 
amd_256      up   infinite      1   comp fb1106 
amd_256      up   infinite     16  drain fa[0109,0411,0414,0601,0608-0609,0810,1203],fb[0104,0110,0513,0908,1007,1208,1212,1216] 
amd_256      up   infinite    377  alloc fa[0101-0108,0110-0116,0201-0202,0204-0216,0301-0316,0401-0410,0412-0413,0415-0416,0501-0511,0513-0516,0602-0607,0610-0616,0701-0713,0715-0716,0801-0809,0811,0813-0816,0901-0910,0912-0916,1001-1016,1101-1116,1201-1202,1204-1216,1301-1316],fb[0101-0103,0105-0109,0111-0116,0201-0204,0207-0216,0301-0316,0401-0416,0501-0512,0514-0516,0601-0616,0702-0716,0803-0815,0901-0904,0906-0907,0909-0911,0913-0916,1001-1003,1010,1012-1014,1016,1101,1103-1105,1107-1110,1113-1115,1201-1207,1211,1213-1214,1302-1304,1309-1315],fc[0101-0105,0115,0205-0207,0209,0215] 

memery

[sca3173@ln121%bscc-a5 ~]$ cat /proc/meminfo
MemTotal:       196339948 kB = 187gB
MemFree:        89580888 kB = 85 gB
MemAvailable:   163166580 kB = 102 gB

architecture

[sca3173@ln121%bscc-a5 public1]$ lsb_release -d | awk -F"\t" '{print $2}'
CentOS Linux release 7.9.2009 (Core)

[sca3173@ln121%bscc-a5 public1]$ cat /proc/version
Linux version 3.10.0-1160.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

GPU 集显

[sca3173@ln121%bscc-a5 public1]$  lshw -numeric -C display
WARNING: you should run this program as super-user.
  *-display                 
       description: VGA compatible controller
       product: Integrated Matrox G200eW3 Graphics Controller [102B:536]
       vendor: Matrox Electronics Systems Ltd. [102B]

disk

[sca3173@ln121%bscc-a5 public1]$ df -h /public1
Filesystem                                Size  Used Avail Use% Mounted on
10.10.58.1@o2ib:10.10.58.2@o2ib:/public1  2.7P  240T  2.3P  10% /public1

IP 内网IP

[sca3173@ln121%bscc-a5 public1]$ hostname -I | awk '{print $1}'
172.16.58.14

compute node

> cat lscpu.txt                
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                64
On-line CPU(s) list:   0-63
Thread(s) per core:    1
Core(s) per socket:    32
Socket(s):             2
NUMA node(s):          2
Vendor ID:             AuthenticAMD
CPU family:            23
Model:                 49
Model name:            AMD EPYC 7452 32-Core Processor
Stepping:              0
CPU MHz:               2345.724
BogoMIPS:              4691.44
Virtualization:        AMD-V
L1d cache:             32K
L1i cache:             32K
L2 cache:              512K
L3 cache:              16384K
NUMA node0 CPU(s):     0-31
NUMA node1 CPU(s):     32-63
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl nonstop_tsc extd_apicid aperfmperf eagerfpu pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_l2 cpb cat_l3 cdp_l3 hw_pstate sme retpoline_amd ssbd ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip overflow_recov succor smca

没有gcc/7.3.0

比赛是2节点128核的环境

计算节点网络拓扑图

我们是A5 分区。

没有找到手册,只有一个官网图。但是虽然频率是2.35GHz,但是内存只有251GB啊,什么情况。

FTP 2 : debug

选项含义

  1. 只能下载。不能上传、删除、重命名。write_enable=NO
  2. 只能上传、删除、重命名。不能下载。download_enable=NO
    STOR - store a file on the remote host 上传文件
    RETR - retrieve a remote file 下载文件
    

遇到的问题

  1. 修改好后,上传文件mkdir都会报错
    550 Permission denied.
    
    write_enable=YES 也不对,user_config_dir的注释忘改了
  2. 用虚拟用户配置
    响应:  500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    
    解决办法
     write_enable=YES
     allow_writeable_chroot=YES
     chmod 755 upload
    
  3. 无法下载,是符合实际应用情况。但是如何改变 我以为只要 cmds_allowed=RETR 报错
    550 Failed to open file.
    
    sudo chmod 644 index3.html
    
  4. 可以删除文件。可以通过创建多个虚拟账号弥补。 禁止删除(去除DELE)
    cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
    
    或者
    cmds_denied=DELE
    

参考文献

VSFTPD实现用户权限不能删除 只能上传、下载

OpenVPN

实验室OpenVPN使用场景

  1. 首先有一个常年挂网络通的,可以校外网IP直连的机器A。
  2. 使用OpenVPN,将对内网机器的ssh请求,通过A机器转发。

所以如果没有可以校外网IP直连的机器A,OpenVPN是没有意义的。

配置OpenVPN服务器端

google openvpn查看 ubuntu https://ywnz.com/linuxyffq/3952.html

  1. 安装OpenVPN服务
  2. 安装easy-rsa,用来制作证书 wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
  3. 生成CA证书(crt=cert) 有ca.crt和ca.key两个文件
  4. 生成server端证书
    1. KEY_NAME = qszyvpn
    2. 应有qszyvpn.crt、qszyvpn.csr、qszyvpn.key三个文件
    3. 为服务器生成加密交换时的秘钥协议,应有dh2018.pem文件
  5. 生成Client端证书
    1. 应有client1.crt、client1.csr、client1.key三个文件
  6. 修改配置文件server.conf
  7. 配置规则
  8. 运行
    /etc/init.d/openvpn start
    
  9. 查看端口占用
    netstat -tunlp |grep 1194
    

具体服务器端文件生成命令

test on snode0

# 安装
sudo apt-get install openvpn
sudo apt-get install easy-rsa
# 配置easy-rsa
cd /etc/openvpn/server
cp -r /usr/share/easy-rsa/ . 
## 拷贝模板并修改vars的参数
cp vars.example vars
vim vars
# 配置Easyrsa及生成公钥
./easyrsa init-pki
    Note: using Easy-RSA configuration from: ./vars
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /etc/openvpn/server/easy-rsa/pki
./easyrsa build-ca nopass
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:acsa
    CA creation complete and you may now import and sign cert requests.
    Your new CA certificate file for publishing is at:
    /etc/openvpn/server/easy-rsa/pki/ca.crt
"nopass"参数是避免每次都要输入密码,可选项 这一步完成后,在pki目录下会生成ca.crt,pki/private目录下生成ca.key
# 生成服务器私钥和请求
./easyrsa gen-req shaojie nopass
    Common Name (eg: your user, host, or server name) [shaojie]:
    Keypair and certificate request completed. Your files are:
    req: /etc/openvpn/server/easy-rsa/pki/reqs/shaojie.req
    key: /etc/openvpn/server/easy-rsa/pki/private/shaojie.key
# 拷贝服务器私钥文件到openvpn配置文件目录下
cp pki/private/shaojie.key /etc/openvpn/server
因为同一台服务器即做CA服务器又做VPN服务器,自己给自己签发的时候会生成同名文件,先把服务器的请求文件改个名,再导入请求
# 生成服务器证书
mv pki/reqs/shaojie.req pki/reqs/shaojieServer.req
./easyrsa import-req pki/reqs/shaojieServer.req shaojie
    Using SSL: openssl OpenSSL 1.1.1f  31 Mar 2020
    The request has been successfully imported with a short name of: shaojie
    You may now use this name to perform signing operations on this request.
./easyrsa sign-req server shaojie
将两个shaojie.crt文件和ca.crt文件一起复制到openvpn配置文件目录下
cp pki/ca.crt pki/issued/shaojie.crt /etc/openvpn/server
# 生成加密文件(可选,可以提高VPN安全性),这个比较慢,需要稍等几分钟
./easyrsa gen-dh
    DH parameters of size 2048 created at /etc/openvpn/server/easy-rsa/pki/dh.pem
openvpn --genkey --secret ta.key #生成随机密钥(仅适用于非TLS静态密钥加密模式):--genkey : 生成一个随机密钥作为共享密钥
cp ta.key pki/dh.pem /etc/openvpn/server
至此,服务器端文件:ca.crt dh.pem easy-rsa shaojie.crt shaojie.key ta.key准备好了

openvpn配置文件

# 拷贝解压
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server
gzip -d /etc/openvpn/server/server.conf.gz
vim /etc/openvpn/server/server.conf
# 监听的端口号,默认1194,如果要改的话防火墙也要相应修改。(可选)
port 1194

#TCP或UDP,如改成tcp的话,通常端口相应修改成443
;proto tcp
proto udp

# 设置SSL/TLS根证书(ca)、证书(cert)和私钥(key),记得我的服务器名是axvpn,这里也要相应修改 (必选)
ca ca.crt
cert shaojie.crt
key shaojie.key 

# 指定迪菲·赫尔曼参数。
# 默认是dh2048.pem, 记得我们生成了dh.pem,改下 (必选)
dh dh.pem

# 推送路由信息到客户端,以允许客户端能够连接到服务器背后的其他私有子网。 (可选)
# 就是允许客户端访问VPN服务器自身所在的其他局域网
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
push "route 10.111.0.0 255.255.0.0"

# 如果启用该指令,所有客户端的默认网关都将重定向到VPN,这将导致诸如web浏览器、DNS查询等所有客户端流量都经过VPN。(可选)
;push "redirect-gateway def1 bypass-dhcp"

# 某些具体的Windows网络设置可以被推送到客户端,例如DNS或WINS服务器地址。(可选)
# 下列地址来自opendns.com提供的Public DNS 服务器。
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
push "dhcp-option DNS 8.8.8.8"

# 如果有注释的话,取消这句的注释,再加一句  (必选)
#防DDOS攻击,openvpn控制通道的tls握手进行保护,服务器端0,客户端1
tls-auth ta.key 0 # 该文件应该保密
key-direction 0

# 选择一个密码加密算法。
# 该配置项也必须复制到每个客户端配置文件中。 
# 添加SHA256算法
cipher AES-256-CBC
auth SHA256

# 在完成初始化工作之后,降低OpenVPN守护进程的权限, (最好取消注释)
# 该指令仅限于非Windows系统中使用。
user nobody
group nobody

# Notify the client that when the server restarts so it
# can automatically reconnect.
# 如果协议改成了TCP,这里数值要改成0
explicit-exit-notify 1

#推送一条路由信息给客户端
#推送路由,若是推送失败,需要检查server 是否设置正常,该故障我遇到过,设置ifconfig-pool了,发现推送失效
push "route 192.168.11.0 255.255.255.0" #(即这个网段的IP的信息都经过VPN)

#记录日志,每次重新启动openvpn后追加原有的log信息
log-append /var/log/openvpn.log

配置OpenVPN客户器端

或者设置isc.ovpn(中间两项是client的)

ca ca.crt
cert ???.crt
key ???.key 
tls-crypt tc.key
OneDrive下有snode6的ovpn文件

具体客户器端文件生成命令

# 生成客户端私钥和请求
./easyrsa gen-req tsjclient nopass
    Common Name (eg: your user, host, or server name) [tsjclient]:
    Keypair and certificate request completed. Your files are:
    req: /etc/openvpn/server/easy-rsa/pki/reqs/tsjclient.req
    key: /etc/openvpn/server/easy-rsa/pki/private/tsjclient.key
# 同理生成证书
mv pki/reqs/tsjclient.req pki/reqs/tsjclient2.req
./easyrsa import-req pki/reqs/tsjclient2.req tsjclient
./easyrsa sign-req client tsjclient
# 保存所需密钥、证书和之前的ta.key ca.crt
cp pki/private/tsjclient.key pki/issued/tsjclient.crt ta.key pki/ca.crt ../../client

OpenVPN的查看

sudo service openvpn status
 openvpn.service - OpenVPN service
     Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2021-04-24 20:40:13 UTC; 2 months 22 days ago
   Main PID: 1691 (code=exited, status=0/SUCCESS)
      Tasks: 0 (limit: 154190)
     Memory: 0B
     CGroup: /system.slice/openvpn.service

Warning: journal has been rotated since unit was started, output may be incomplete.
$ cat server.conf
    local 202.38.73.26
    port 1194
    proto udp
    dev tun #tun路由模式,tap桥模式,据说tun效率高于tap,但是tun只能转发IP数据,tap是二层可以封装任何协议,window下只有tap模式
    ca ca.crt
    cert server.crt
    key server.key
    dh dh.pem
    tls-crypt tc.key # 新加入 ,不使用 tls-auth ta.key 0 改用 tls-crypt tc.key openvpn 2.4 版的新參數
    topology subnet # OpenVPN默认的拓扑方式是net30:表示掩码30位,有地址浪费
    server 10.8.0.0 255.255.255.0 #定义分配给客户端的IP段,服务端自己默认使用第一个可用地址
    ifconfig-pool-persist ipp.txt #在openvpn重启时,再次连接的客户端将依然被分配和以前一样的IP地址
    # push表示推送,即将配置推送给客户端,让客户端也使用
    push "redirect-gateway def1 bypass-dhcp" #重定向默认网关 此设置将路由/强制所有流量通过VPN。
    push "dhcp-option DNS 202.38.64.56" #指定客户端使用的主DNS
    push "dhcp-option DNS 202.38.64.17" #指定客户端使用的备DNS
    server-ipv6 2001:0db8:ee00:abcd::/64
    push "route-ipv6 2001:da8:d800:811:ae1f:6bff:fe8a:e4ba/64"
    push "route-ipv6 2000::/3"
    keepalive 10 120 #表示每隔10秒ping一下客户端/服务端,若是120秒内无响应,认为down,随即重启openvpn(强烈开启)
    auth SHA512 # 加密算法
    cipher AES-256-CBC
    user nobody # 待openvpn初始化完成后,将其降级为nobody权限运行
    group nogroup
    persist-key #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
    persist-tun #通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,否则网络连接会先linkdown然后linkup
    status openvpn-status.log #状态文件:定期(默认60s)把状态信息写到该文件,以便自己写程序计费或者进行其他操作(需要关闭selinux)
    verb 3 #日志记录级别,可选0-9,0只记录错误信息,4能记录普通的信息,5和6在连接出现问题时能帮助调试,9显示所有信息,甚至连包头等信息都显示(像tcpdump) 
    crl-verify crl.pem # crl证书 ./easyrsa gen-crl产生,默认180天过期
    explicit-exit-notify # 如果协议改成了TCP,这里数值要改成0
OpenVPN配置文件通常位于/etc/openvpn中,通常命名为*.conf。 server.conf是规范的;客户端配置文件名通常类似于.conf

subnet(子网拓扑)

注意用户ccd文件固定ip时候写法变成了:

ifconfig-push 10.8.0.3 255.255.255.0
10.8.0.3是给VPN用户分配的虚拟IP,其服务端是server 10.8.0.0 255.255.255.0,也就是10.8.0.0/24,用户只能获取到10.8.0.X的虚拟IP,去掉10.8.0.1、10.8.0.255就只剩下253个可分配的IP池了。

重定向默认网关

为什么要重定向网关:vpn客户端是经常出差的,网络环境不安全,希望它将所有流量传到公司,经公司出口

其中包含的flags有"local autolocal def1 bypass-dhcp bypass-dns block-local ipv6 !ipv4"(多个标志之间用空格分隔),

推荐使用def1,它使用0.0.0.0/1和128.0.0.0/1而不是0.0.0.0/0来覆盖默认网关,即有新路由也保留原始默认网关,只是优先匹配而已

block-local 是表示当客户端拨入后,阻断其除与本地网关的访问外,本地的其他IP都不允许访问

PKI

Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。

  1. PKI的核心是身份证明书的发行
  2. PKI的世界里,这个身份证明书,被叫做“证明书”。发行“证明书”的机关叫做“认证机关”。还有一个就是统一管理证明书的证书“档案库/证书库”。这三个东西加起来,就是PKI的主要构成要素。
  3. 证明书是被存放在硬盘或者IC卡里面的。证明书的文件构造是一种叫做 X.509 的协议规定的。另一方面,认证机关也其实就是一个网络应用程序。
  4. PKI提供的证明书可以用来 身份确认 和 通信加密。
  5. 用“证明书中的密钥”加密过的内容,只能用自己才有的另一个“私人的密钥”才能解密。这样的话,如果你发送给自己的内容被他人窃取的话,他人也无法解密。
  6. 在PKI机制中,放在“证明书里面的密钥”可以被任意自由分发,这里的“证明书里的密钥”被叫做“公开密钥(Public Key)”。与此相对,本人保管的那个“私人的密钥”就要做“私有密钥(Private Key)”。
  7. 认证机关的可信度,直接与证书的可信度挂钩,也就是与整个PKI机制的可信度息息相关。
  8. 在技术上,伪造证明书是非常简单的。所谓假的证明书,比如说有一个所谓的“比尔的证明书”,但是里面含有的公开密钥是史提芬的公开密钥。那么,别人发给比尔的信息,史蒂芬可以解密,反而比尔自己不能解密。

如何查看OpenVPN已连接的用户

将标志--management IP port [pw-file]添加或将相同的指令添加到您的中server.conf,例如:

management localhost 7505

这将允许您远程登录到该端口,并为您提供要运行的命令列表:

telnet localhost 7505

help

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

5分钟让你知道什么是PKI

https://www.wsfnk.com/archives/698.html

USTC Network Information Center

科大各个校区的IP

  1. 根据中国各地IP分布图
  2. 科大的IP如下,但是我还是不知道是哪个区的
    1. 114.214.160.0 114.214.255.255 我的IP在这,这可能是西区
  3. 西区活动中心机器IP
    1. 210.45.112.144
    2. 202.38.72.23 中国科学技术大学教育网
    3. 222.195.72.118
  4. 瀚海机器
    1. 211.86.151.101
  5. wlt之前有个各网络出口,现在403了

如何根据IP确定地址(比省市更具体)

http://ip.yqie.com/ip.aspx?ip=210.45.112.144

只能查询到都是科大的地址

如何判断IP是动态还是静态

vi /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTO=dhcp 说明是DHCP 获得的地址 可是机器上就没有/etc/sysconfig/这个目录???

科大网络提供哪些服务

只有校内教工才可以申请域名。

个人主页ftp系统服务

  1. 教工服务器的域名为 staff.ustc.edu.cn, IP 地址为 202.38.64.11。 个人主页网络地址形式为 http://staff.ustc.edu.cn/~username 。 学生服务器的域名为 home.ustc.edu.cn, IP地址为 202.38.64.10。 个人主页网络地址形式为 http://home.ustc.edu.cn/~username 。
  2. 这两台服务器均支持 IPv6访问,域名分别是 staff6.ustc.edu.cn 和 home6.ustc.edu.cn 。
  3. 出于安全考虑,个人主页不支持 php 等服务器端程序。
  4. 用命令行方式登录 FTP 系统时会提示用户的使用情况(注:有些 ftp客户程序如IE不显示这些消息),如提示“Login OK, used 11M of 200M.”

而且我发现科大的IP都属于"国内免费IP地址"指中国教育和科研网免费地址列表范围内的IP地址。列表

主页代理是什么?

没有主页代理以前,用户的主页放在某台计算机上,可以被访问的范围就取决于这台计算机的IP地址开通的范围。利用主页代理技术,Internet上所有的计算机都可以通过域名访问用户的主页,而且没有流量费。

主页代理要求用户为自己的主页申请一个域名,指向网络中心的主页代理服务器,并把自己的主页放在校园网络上的某台计算机(不含宿舍网络、VPN以及无线上网的计算机 )上。当网络上的某台计算机通过域名访问到网络中心的主页代理服务器时,主页代理服务器就会从用户的计算机上把主页内容取过来,并返回给访问的计算机。

静态IP出校管理

telnet 202.38.64.59 8888
    Your IP is 202.38.73.26:

    Sorry, your IP has no right to go out USTCnet.
    Connection closed by foreign host.

电子邮件

我校邮件系统的主页网址是 http://email.ustc.edu.cn(普通,非SSL加密)和 https://mail.ustc.edu.cn(SSL加密),供用户免费使用,默认,教师用户空间为4GB,学生用户空间为500MB。

另:各有1GB作为“网络存储”(即“网络磁盘”)用于存放用户的个人文件;具有个人主页和FTP服务,详见个人主页/FTP系统。

学生毕业离校或者教工离职半年后,邮箱可以继续使用,但容量将会缩减,个人主页和FTP系统权限也取消。

我校邮件系统支持POP3/IMAP收信协议和SMTP发信协议,IP地址同为202.38.64.8,设置时需要身份验证,用户名和密码同邮件。

电子邮件地址形式为: 教工:@ustc.edu.cn 学生:@mail.ustc.edu.cn

需要进一步的研究学习

linux如何判断IP是动态还是静态

参考文献

https://netfee.ustc.edu.cn/faq/index.html#netacctypes

XeonScalable

Skylake-SP微架構 Mesh Interconnect Architecture

首次嘗試採用了全新網格互連架構(Mesh Interconnect Architecture),以取代前面幾代微架構採用的環狀(Ring)互連設計,可以在增加核心數的同時,也能夠維持很快存取資料,以及支援更高記憶體頻寬的需求。

Caching and Home Agent

The LLC coherence engine and Home agent (CHA) merges the caching agent and home agent (HA) responsibilities of the chip into a single block. In its capacity as a caching agent the CHA manages the interface between the core the IIO devices and the last level cache (LLC).

NUMA架构、非統一記憶體存取架構 (Non-uniform memory access)中最重要的两个部分是:QPI architecture和memory subsystem。

LLC(一般指L3 Cache)是memory subsystem中最为重要的一个组成部分。Sandy Bridge架构之后,每个core都有自己的LLC(last level cache),然后通过一个ring on-die Interconnect来联通。

Snoop Filter

SnoopFilter,探听过滤器是为了在多核心乃至多处理器的协同工作时,保持缓存一致性(CacheCoherent)。

在统一总线架构中,一个处理器的所有操作都可以被其他处理器看到,因此处理器可以利用一种叫做Snoop(侦听)的操作来监视总线上的缓存操作指令,当侦听到其他处理器的操作涉及到本处理器上的共享缓存页面的时候,就可以进行相关的操作来保持缓存一致性(通常,就是使本地的缓存页面变为Invalid无效)。

Skylake-SP core

如图,在Skylake core的基础上加入了AVX和额外的L2 cache

Skylake core

可以看见寄存器都在绿色的Scheduler里

FMA指令集

FMA指令集(英语:Fused-Multiply-Add,即积和熔加运算)是x86架构微处理器上的指令集。FMA指令集是128位和256比特的流式单指令流多资料流扩展集(SSE)指令集,以进行积和熔加运算。[1]FMA指令集允许创建新的指令并有效率地执行各种复杂的运算,可结合乘法与加法运算(即进行积和熔加运算),通过单一指令执行多次重复计算,从而简化程序,从而使系统能快速执行绘图、渲染、照片着色、立体音效,及复杂向量运算等计算量大的工作。

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

架构的手册 https://github.com/RRZE-HPC/likwid/wiki/SkylakeSP#fixed-purpose-counters

ServerLogin

ip a输出的含义

ip a = ip address 1. lo是linux中的虚拟网络接口 同一台机器的不同进程进行通信时会用到。实现了同一台机器的进程之间的socket通信。虚拟网络接口不需要驱动程序。 1. link/ether是二层协议 mac地址: ac:1f:6b:8a:e4:ba 广播地址:ff:ff:ff:ff:ff:ff 3. inet(v4)是三层协议 ip地址:202.38.73.26/24 广播地址:202.38.73.255 4. inet6是三层协议 ipv6地址:fe80::ae1f:6bff:fe8a:e4ba/64

名词解释

  1. LOWER_UP 是物理层链路标志(网络层以下的层,IP 一般位于此层)。 LOWER_UP 表示插入了以太网电缆并且设备已连接到网络。
  2. LOOPBACK 接口不与其他主机通信。 通过它发送的所有数据包都将被返回,只能接收被退回的数据包。
  3. BROADCAST——该设备具有向共享同一链路的所有主机发送数据包的功能。一个典型的例子是以太网链路。
  4. POINTOPOINT——链路只有两端,每一端连接一个节点。发送到此链接的所有数据包都将到达对等方,我们收到的所有数据包都来自这个对等方。
  5. NBMA 如果 LOOPBACK、BROADCAST 和 POINTOPOINT 均未设置,则假定接口为 NMBA(非广播多路访问)。这是最通用的设备类型,也是最复杂的设备类型,因为连接到 NBMA 链接的主机无法在没有额外配置信息的情况下发送给任何人。
  6. MULTICAST -- 是一个咨询标志,指示接口知道多播,即将数据包发送到相邻节点的某个子集。广播是多播的一种特殊情况,其中多播组由链路上的所有节点组成。需要强调的是,软件不得将缺少此标志解释为无法在此接口上使用多播。根据定义,任何 POINTOPOINT 和 BROADCAST 链路都是多播的,因为我们可以直接访问所有邻居,因此可以直接访问它们的任何部分。当然,由于费用高,不建议在纯广播链路上使用高带宽组播传输,但并非严格禁止。
  7. the loopback “lo,” the ethernet以太网(以太网是一种计算机局域网技术) “eth0,” and the WiFi “wlan0.”
  8. mtu 1500:``maximal transfer unit''最大传输单位为1500
  9. qdisc :``queuing discipline''显示了接口上使用的排队算法。
  10. noqueue 表示该接口不排队任何东西,
  11. noop 表示该接口处于黑洞模式,即发送给它的所有数据包都被立即丢弃。
  12. mq 调度器做两件事: 将设备 TX 队列作为类,允许将不同的 qdiscs 附加到它们,这些 qdiscs 被嫁接到 TX 队列 当前所有设备队列根 qdiscs 的累积统计信息 它默认用于多队列设备而不是常规的 pfifo_fast qdisc,但也可以手动附加以在附加非多队列(共享)qdisc 后恢复多队列行为。
  13. state UP:网络接口已启动
  14. group default:接口组
  15. qlen 1000:传输队列长度
  16. scope global eth0: 任何地方有效
  17. scope link: 只在这个设备有效
  18. scope global dynamic mngtmpaddr noprefixroute 大概是动态的时刻变化来保证隐私的
  19. valid_lft forever: 有效生命周期
  20. preferred_lft forever: 首选寿命

其他名称解释

接口标志汇总在尖括号中: 1. PROMISC——设备监听链路上的所有流量并将其提供给内核,即使这些流量不是发往我们的,不是广播的,也不是发往我们所属的多播组的。 通常这种模式只存在于广播链路上,用于网桥和网络监控。 2. ALLMULTI -- 设备接收在链路上徘徊的所有多播数据包。 此模式由多播路由器使用。 3. NOARP——这个标志与其他标志不同。 它没有不变的值,其解释取决于所涉及的网络协议。 通常,它表示设备不需要地址解析,并且软件或硬件知道如何在没有协议栈任何帮助的情况下传送数据包。 4. DYNAMIC -- 是一个咨询标志,指示接口是动态创建和销毁的。 5. SLAVE——这个接口绑定到一些其他接口以共享链接容量。

广播地址是什么

网络中的每个机器的网卡都接收所有的包,而网络层以后就只接收两种包了, 一种是目标地址是自己的,另外一种就是目标地址是广播地址的, 广播地址是你的网络号和决定的,除了网络号部分的地方全是1(二进制的 1)即可 举例: 你的ip是192.168.1.1 掩码是255.255.255.0 那么你的网络号是192.168.1 而你的广播地址就是:192.168.1.255 了。 那么你的操作系统会把发向 192.168.1.1 和 192.168.1.255 的包接收下来处理,那么发送 这个广播消息的机器就是利用“广播地址在子网中传播信息”了。

什么情况下能访问私有地址?

处于同一个网关下

怎么判断网络处于同一个网关下

想判断两个ip地址是不是在同一个网段,只需将ip地址与子网掩码做与运算,如果得出的结果一样,则这两个ip地址是同一个子网当中。

网关、路由器、三层交换机是什么,区别

网关

网关是一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关;而‘路由器’么一般特指能够实现路由寻找和转发的特定类产品,路由器很显然能够实现网关的功能。

换句话说,路由器可以实现网关的功能,但是路由器功能不仅仅是实现网关;网关可以由路由器实现,但是也不仅仅是由路由器实现

与网桥只是简单地传达信息不同,当信息到达网关以后,网关要对信息重新进行加工,以适应目的系统的需求。

交换机

交换机:工作在数据链路层,原理等同于多端口网桥。作用是连接数个相同网段的不同主机,减少网内冲突,隔离冲突域。利用存储转发和过滤技术来从物理上分割网段。

路由器(Router)

是连接因特网中各局域网、广域网的设备,是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。

当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。

因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。它会根据信道的情况自动选择和设定路由,以***路径,按前后顺序发送信号。

路由器和交换机的区别

路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。

chivier服务器动态公网IP说法存疑

服务器开机的时候也没有连wlt,也有IP

服务器IP到底是不是内网

看ip a可以判断

修改DNS服务器,从外面能不能访问到内网

并不能,DNS服务器只是域名与IP地址的映射,你需要链接到网关才能找到内网ip

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

https://netbeez.net/blog/linux-interface-information/

http://linux-ip.net/gl/ip-cref/ip-cref-node17.html

网络所属网关判断 https://network.51cto.com/art/201901/591192.htm

https://blog.csdn.net/miracleon/article/details/102250801

IPCC Preliminary SLIC Analysis part3 : Hot spot analysis

vtune hotspots

vtune threading

GUN profile gprof + gprof2dot graphviz

g++ -pg -g -std=c++11 SLIC.cpp -o SLIC
./SLIC # generate gmon.out
less gmon.out
    "gmon.out" may be a binary file.  See it anyway?
gprof ./SLIC
gprof ./SLIC|  /home/shaojiemike/github/isc21-gpaw/LogOrResult/profile/gprof2dot.py -n0 -e0 | dot -Tpng -o output.png
没什么用

接下来

  1. 向量化
  2. 并行化

什么时候OpenMP并行,什么时候MPI并行

根据具体资源情况来,貌似是一个节点,那可以从OpenMP入手

自动并行化

Intel编译器的自动并行化功能可以自动的将串行程序的一部分转换为线程化代码。进行自动向量化主要包括的步骤有,找到有良好的工作共享(worksharing)的候选循环;对循环进行数据流(dataflow)分析,确认并行执行可以得到正确结果;使用OpenMP指令生成线程化代码。

/Qparallel:允许编译器进行自动并行化

/Qpar-reportn:n为0、1、2、3,输出自动并行化的报告

说明:/Qparallel必须在使用O2/3选项下有效

c++向量化怎么实现

什么是向量化

所谓的向量化,简单理解,就是使用高级的向量化SIMD指令(如SSE、SSE2等)优化程序,属于数据并行的范畴。

如何对代码向量化

向量化的目标是生成SIMD指令,那么很显然,要对代码进行向量化,

第一是依靠编译器来生成这些指令;

第二是使用汇编或Intrinsics函数。

自动向量分析器

Intel编译器中,利用其自动向量分析器(auto-vectorizer)对代码进行分析并生成SIMD指令。另外,也会提供一些pragmas等方式使得用户能更好的处理代码来帮助编译器进行向量化。

  1. 基本向量化 /Qvec:开启自动向量化功能,需要在O2以上使用。在O2以上,这是默认的向量化选项,默认开启的。此选项生成的代码能用于Intel处理器和非Intel处理器。向量化还可能受其他选项影响。由于此选项是默认开启的,所以不需要在命令行增加此选项。

  2. 针对指令集(处理器)的向量化 /QxHost:针对当前使用的主机处理器选择最优的指令集优化。

对于双重循环,外层循环被自动并行化了,而内层循环并没有被自动并行化,内层循环被会自动向量化。

影响向量化的因素
  1. 首先当然是指令集是否支持
  2. 内存对齐相关的问题,也是影响向量化的,很多的SSE指令都要求内存是16字节对齐,如果不对齐,向量化会得到错误结果。

如何判断向量化成功

看汇编代码 没成功需要手动内联向量化汇编代码???

Intel 编译器的向量化实现

AMD 编译器向量化实现

AMD 与 Intel 编译器的区别

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

https://blog.csdn.net/gengshenghong/article/details/7027186

https://blog.csdn.net/gengshenghong/article/details/7034748

https://blog.csdn.net/gengshenghong/article/details/7022459

IPCC Preliminary SLIC Analysis part2 : Run process

VScode Debug Run

Debug Process

  1. 创建lables来存储分类结果, m_spcount 200, m_compactness 10
  2. 计时运行 slic.PerformSLICO_ForGivenK(img, width, height, labels, numlabels, m_spcount, m_compactness);
  3. 参数的最后两项是required number of superpixels和weight given to spatial distance(空间距离的权重)也就是K=200
  4. 串行初始化赋值klabels[s] = -1
  5. DoRGBtoLABConversion(ubuff, m_lvec, m_avec, m_bvec);对于整个图像:重载的浮点版本
    1. 提取第一个像素rgb(229,226,218)
    2. 串行RGB2LAB( r, g, b, lvec[j], avec[j], bvec[j] );
    3. int变成double数组
  6. 声明perturbseeds true,edgemag
  7. DetectLabEdges(m_lvec, m_avec, m_bvec, m_width, m_height, edgemag);
    1. 串行对每个像素进行\(\(dx=(l[i-1]-l[i+1])^2+(a[i-1]-a[i+1])^2+(b[i-1]-b[i+1])^2\)\)\(\(dy=(l[i-width]-l[i+width])^2+(a[i-width]-a[i+width])^2+(b[i-width]-b[i+width])^2\)\)\(\(edgemag[i]=dx+dy\)\)为了之后计算6.5-PerturbSeeds
    2. 值得注意的是i的取值说2600 = width+1是第二行第二列,一直到倒数第二行倒数第二列
  8. GetLABXYSeeds_ForGivenK(kseedsl, kseedsa, kseedsb, kseedsx, kseedsy, K, perturbseeds, edgemag);
    1. int step = sqrt(double(sz)/double(K)); \(S=\sqrt{N/k}=225\)
    2. xoff 与 yoff 为一半 112
    3. int X = x*step + (xoff<<(r&0x1));六角网格???
    4. 串行对每个绿圈存了颜色坐标五元组在kseedsl/a/b/x/y 有196个中心
    5. PerturbSeeds(kseedsl, kseedsa, kseedsb, kseedsx, kseedsy, edgemag);
      1. 串行对这196个中心和周围8个位置进行,最小edgemag值的寻找。
      2. 并更新196个中心的位置
  9. int STEP = sqrt(double(sz)/double(K)) + 2.0;
  10. PerformSuperpixelSegmentation_VariableSandM(kseedsl,kseedsa,kseedsb,kseedsx,kseedsy,klabels,STEP,10);
    1. if(STEP < 10) offset = STEP*1.5;
    2. DBL_MAX ? doubel_max 1.7976931348623157e+308
    3. 变量sigma , distxy, maxxy
    4. double invxywt = 1.0/(STEP*STEP);
    5. 迭代10次
      1. 对中心聚类
        1. 串行对这196个中心首先划出[2S*2S]的区域(上下左右offset或者STEP)
        2. 再串行对这\(4S^2\)的区域的每个像素,计算与其区域中心的距离 \(\(dist = \frac{(l-kl[n])^2+(a-ka[n])^2+(b-kb[n])^2}{maxlab[n]}+\frac{(x-kx[n])^2+(y-ky[n])^2}{S^2}\)\)
        3. 注意maxlab[n]初始值是10*10,根据dist更新该像素的距离中心的最小距离数组distvec,和指向的最近中心klable由于是2S*2S,相邻中心的周围区域是有一部分重叠的(如图中黄色荧光笔区域),相当于聚类到各个中心,注意由于中心对自己dist=0,是不可能某一中心距离其他中心更近。
      2. 串行将maxlab与maxlab更新为该聚类集合里的最大值
        1. 注意maxlab与maxlab都是每个中心维护一个
      3. 质心移动:串行将每个聚类区域的每个点的五元组加到质心上,然后除以聚类区域元素总数来得到新的质心五元组
      4. 迭代10次结束(其实可以判断质心是否不再移动来提前结束)
  11. EnforceLabelConnectivity(klabels, m_width, m_height, nlabels, numlabels, K);
    1. 串行新数组赋值for( int i = 0; i < sz; i++ ) nlabels[i] = -1;全部标记为未处理
    2. 串行对所有元素进行如下处理
      1. 如果旧index未被处理
        1. 在其左下上右找到已经处理的元素的nlable,将其值保存在adjlable里
        2. 从该元素开始上下左右寻找未处理,而且其klabels值与旧klabels值相同的元素。
          1. 将其nlable值改为lable,应该也达到标记为已处理的效果
          2. 最终效果就是把该元素相邻连接区域klabels值与旧klabels值相同的全部标记
        3. 如果这块相邻区域过小count <= SUPSZ >> 2
          1. 则将其全部元素赋值为adjlable,即并入上块区域
      2. 旧index++。
      3. 最终效果就是所有的元素重新整合聚类,达到消除过小区域与不连续区域的效果
  12. 结果与check.ppm对比
  13. 我以为只要读取lable的分类,大概sz个int
  14. fread(rgb, (w)(h)3, 1, fp);
  15. 作者是傻逼,只用了1/3的空间

skills: size of arrays

a.size()

相关知识

RGB与Lab颜色空间互相转换

Lab颜色空间简介

同RGB颜色空间相比,Lab是一种不常用的色彩空间。1976年,经修改后被正式命名为CIELab。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。

RGB转Lab颜色空间

RGB颜色空间不能直接转换为Lab颜色空间,需要借助XYZ颜色空间,把RGB颜色空间转换到XYZ颜色空间,之后再把XYZ颜色空间转换到Lab颜色空间。

RGB与XYZ颜色空间有如下关系:

LAB与XYZ颜色空间有如下关系: X,Y,Z会分别除以0.950456、1.0、1.088754。

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献