跳转至

笔记

OpenLDAP

OpenLDAP

分布式、多平台集成认证系统

ibug在实验室机器整活还行

https://ibug.io/blog/2022/03/linux-openldap-server/

https://harrychen.xyz/2021/01/17/openldap-linux-auth/

https://www.cnblogs.com/dufeixiang/p/11624210.html

改shell

复杂还有bug,我还是改profile吧

https://ibug.io/blog/2022/03/linux-openldap-server/#user-chsh

挂载

挂在同一个地方,肯定是一样的

# shaojiemike @ snode2 in ~ [20:18:20]
$ df -h .
Filesystem       Size  Used Avail Use% Mounted on
10.1.13.1:/home   15T   11T  3.1T  78% /staff

# shaojiemike @ snode0 in ~ [20:25:51]
$ mount|grep staff
10.1.13.1:/home on /staff type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,soft,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.1.13.50,local_lock=none,addr=10.1.13.1)

tmpfs是磁盘里的虚拟内存的意思。

设置

具体设置要登录到中央机器上去

# shaojiemike @ hades1 in ~ [20:41:06]
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 hades1
# 222.195.72.30 hades0
# 202.38.72.64 hades1
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

114.214.198.26  synology
10.1.13.1       acsa-nfs
10.1.13.6       discovery
10.1.13.50      snode0
10.1.13.51      snode1
10.1.13.52      snode2
10.1.13.53      snode3
10.1.13.54      snode4
10.1.13.55      snode5
10.1.13.56      snode6
10.1.13.114     swabl
10.1.13.119     node19
10.1.13.102     node2
10.1.13.58      hades0
10.1.13.57      hades1
# shaojiemike @ snode0 in ~ [20:36:26]
$ sudo cat /etc/nslcd.conf
# /etc/nslcd.conf
# nslcd configuration file. See nslcd.conf(5)
# for details.

# The user and group nslcd should run as.
uid nslcd
gid nslcd

# The location at which the LDAP server(s) should be reachable.
uri ldaps://ldap.swangeese.fun

需要进一步的研究学习

  1. 总共涉及几台机器

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

Python MPI

全局解释器锁(GIL,Global Interpreter Lock)

Python代码的执行由Python虚拟机(解释器)来控制。

对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同时只有一个线程在运行。所以就会出现尽管你设置了多线程的任务,但是只能跑一个的情况。

但是I/O密集的程序(爬虫)相对好一点,因为I/O操作会调用内建的操作系统C代码,所以这时会释放GIL锁,达到部分多线程的效果。

通常我们用的解释器是官方实现的CPython,要真正利用多核,除非重写一个不带GIL的解释器。

Python 鸡肋的多线程

from threading import Thread

Python 多进程正常实现

通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响。

from multiprocessing import Process

子进程调用实例

def TIMEOUT_COMMAND(command, timeout=10):
    """call shell-command and either return its output or kill it
    if it doesn't normally exit within timeout seconds and return None"""
    import subprocess, datetime, os, time, signal
    cmd = command.split(" ")
    start = datetime.datetime.now()
    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,encoding="utf-8",preexec_fn=os.setsid) #让 Popen 成立自己的进程组
    # https://www.cnblogs.com/gracefulb/p/6893166.html
    # 因此利用这个特性,就可以通过 preexec_fn 参数让 Popen 成立自己的进程组, 然后再向进程组发送 SIGTERM 或 SIGKILL,中止 subprocess.Popen 所启动进程的子子孙孙。当然,前提是这些子子孙孙中没有进程再调用 setsid 分裂自立门户。
    ic("BHive-noUseOSACA-before",process.pid,process.poll())
    while process.poll() != 208: # poll()(好像BHive208是正常结束)返回0 正常结束, 1 sleep, 2 子进程不存在,-15 kill,None 在运行
        ic("BHive-noUseOSACA-During",process.pid,process.poll())
        time.sleep(0.2)
        now = datetime.datetime.now()
        if (now - start).seconds> timeout:
            # BHive有子进程,需要杀死进程组。但是需要新生成进程组,不然会把自己kill掉
            os.killpg(os.getpgid(process.pid), signal.SIGKILL)
            # os.killpg(process.pid, signal.SIGTERM) SIGTERM不一定会kill,可能会被忽略,要看代码实现
            # https://blog.csdn.net/zhupenghui176/article/details/109097737
            # os.waitpid(-1, os.WNOHANG)
            (killPid,killSig) = os.waitpid(process.pid, 0)
            if killPid != process.pid or killSig!=9:
                errorPrint("TIMEOUT_COMMAND kill failed! killPid %d process.pid %d killSig %d" % (killPid, process.pid, killSig))
            ic("Killed",process.pid,process.poll())
            return None
    ic("BHive-noUseOSACA-Finished",process.pid,process.poll())
    return process.stdout.readlines()

使用Queue或者Pipe通讯

https://github.com/Kirrito-k423/BHive-Prediction-Compare/blob/main/pythonTest/0326_newBar_qcjiang.py

多核的解决方法:调用C语言的链接库

把一些计算密集型任务用C语言编写,然后把.so链接库内容加载到Python中,因为执行C代码,GIL锁会释放,这样一来,就可以做到每个核都跑一个线程的目的!

进程池

from mpi4py import MPI

子进程实例

python的子程序实现有问题,运行中,会有bhive-reg遗留下来(多达20个,需要按照下面手动kill,这也是核数建议为总核数的1/3的原因
### check process create time
ps -eo pid,lstart,cmd |grep bhive
date
### kill all process by name
 sudo ps -ef | grep 'bhive-re' | grep -v grep | awk '{print $2}' | sudo xargs -r kill -9
### 以为的原因 subProcess.pool 返回程序状态的时候,除了运行和结束状态,还有休眠等其他状态。也就是程序在发射之后并不是直接进入运行状态的。判断程序是否超时不能通过判断是否运行,因为一开始while循环进不去
while process.poll() is None:
而应该是判断是否正常结束(208是BHive结束返回值,不同程序不同)
while process.poll() != 208:
### 继续分析 实际debug还是有 ![](https://pic.shaojiemike.top/img/20220625173740.png) 在debug输出里没有这些pid check了,输出的个数是符合的。 不懂了,我都没调用,这僵尸进程哪里来的?除非是BHive产生的。 ### 实际原因 调用的Bhive会产生子进程,原本的python实现不能杀死子进程的子进程。需要改用杀死进程组的实现 ### 杀死进程组 ![](https://pic.shaojiemike.top/img/20220625185611.png) 可能设定是timeout是20秒,但是htop程序运行了2分钟也没有kill。这是正常的,因为主程序挤占资源导致挂起了,导致无法及时判断和kill

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

Conference

论文索引网站

Mendeley

ResearchGate

Web of Science

PubMed生物

Nature Index

dblp computer science bibliography,按照会议搜索.DBLP默认是以年份和会议名称排序的

Google Scholar

Microsoft Academic。最近,微软宣布将关闭仅次于谷歌Scholar的第二大学术搜索引擎Microsoft Academic

相关论文的查找

查找相关论文的引用关系,并可视化

论文会议查找

  1. Google Scholar 或者IEEE Xploredblp里输入论文名,在所有版本里选择最新的(一般就是论文发出的会议和期刊)
  2. 获取论文会议名后
  3. 在CCF推荐会议里查找(不要缩写,查找关键字)

期刊查询

LetPub

期刊查询小助手

翻译

DeepL全文翻译

影响因子

影响因子(impact factor,IF)是ISl的期刊引证报告(Journal Citation Reports,JCR)中公布的一项数据,自1975年开始,JCR每年公布一次上一年的数据。影响因子指某期刊前两年发表的论文在统计当年的被引用总次数除以该期刊在前两年内发表的论文总数。这是一个国际上通用的期刊评价指标。影响因子是以年为单位进行计算的。

期刊影响因子

https://academic-accelerator.com/

https://www.scimagojr.com/journalsearch.php?q=20571&tip=sid

综合

CCF 推荐会议下载 https://www.ccf.org.cn/Focus/2019-04-25/663625.shtml

https://blog.csdn.net/tmb8z9vdm66wh68vx1/article/details/100571714

https://github.com/bugaosuni59/TH-CPL

HPC期刊,会议时间

CCF会议deadline可视化

https://ccfddl.github.io/

call4papers

A类期刊

名称 全称 截稿时间 结果时间 篇幅 官网
A类期刊
TOCS ACM Transactions on Computer Systems - - - https://dl.acm.org/journal/tocs
TPDS IEEE Transactions on Parallel and Distributed Systems - - - -
TC IEEE Transactions on Computers - - - -
TCAD IEEE Transactions On Computer-Aided Design Of Integrated Circults And Systems - - - -
TOS ACM Transactions on Storage - - - -
综合类A类期刊
JACM Journal of the ACM - - - -
Proc. IEEE Proceedings of the IEEE - - - -
- Science China - - - -
- 中国科学 - - - -

A类会议

名称 全称 上次时间 下次时间 篇幅 官网
FAST USENIX Conference on File and Storage Technologies 2022-2-22~24 2023-2-20~23 长文11页,短文6页 https://www.usenix.org/conference/fast22/technical-sessions
FPGA ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 2022-2-27~3-1 online - - https://www.isfpga.org
ASPLOS International Conference on Archltectural Support for Programming Languages and Operating Systems 2022-02-28~3-4 2023-2 - https://asplos-conference.org/2022/
PPoPP ACM SIGPLAN Symposium on Principles & Practice Of Parallel Programming 22-4-2~6 online https://ppopp22.sigplan.org
HPCA International Symposium on High-Performance Computer Architecture 2022-4-2~6 线上 - https://hpca-conf.org/2022/
EuroSys European Conference on Computer Systems 2022-4-5~8 法国 12页正文 https://2022.eurosys.org
SIGMETRICS International Conference on Measurement and Modeling Of Computer Systems(计算机性能建模、分析与优化领域的顶级会议) 2022-6-6~10 india 12页正文 https://www.sigmetrics.org/index.shtml
ISCA International Symposium on Computer Architecture 21-6-14~19 22-6-11~15 - https://www.iscaconf.org/isca2021/program/
DAC Design Automation Conference 22-7-10~14 USA - https://www.dac.com
USENIX ATC USENIX Annul Technical Conference 2022-7-11~13 USA 长文11页,短文5页 https://www.usenix.org/conference/atc22
MICRO IEEE/ACM International Symposium on Microarchitecture 2021-10-18~22 online 2022-10 USA - https://www.microarch.org/micro55/
SC International Conference for High Performance Computing, Networking, Storage, and Analysis 2022-11-12~13 USA - https://sc22.supercomputing.org
综合或者交叉学科类A类会议
RECOMB International Conference on Research in Computational Molecular Biology 2019-11-01 - - -
ISMB International conference on Intelligent Systems for Molecular Biology 2020-01-30 - - -
WWW International World Wide Web Conferences 2019-10-14 2020-1-10 长文12页,短文6页 https://www2020.thewebconf.org/
EC ACM Conference on Economics and Computation - - - -

ASPLOS - 计算机系统领域顶级会议

Architectural Support for Programming Languages and Operating Systems (ASPLOS)

ASPLOS(编程语言和操作系统的体系结构支持会议)是ACM开办的一个以体系结构为核心内容的多学科会议,其研究领域跨越硬件、体系结构、编译器、编程语言、操作系统、网络和应用,尤其关注这些学科间的交叉性研究课题。

ASPLOS的开会年份非常奇怪,82、87、89、91、92、94、96、98、00、02、04、06、08、09,既不是双年会,又不是但年会,还说不准奇数年或偶数年开会,真是个“不走寻常路”的会议。但ASPLOS绝对是一个精品会议,一年仅录用20多篇论文,几乎每篇都会受到计算机领域的大量引用。

ASPLOS从创办至今推动了RISC、RAID和大规模多处理器等多项技术的发展,影响力较大。

SC

一年一度的世界超算大会(International Conference for High Performance Computing, Networking, Storage and Analysis, 简称SC) 会发布Top500

IISWC

IEEE International Symposium on Workload Characterization (IISWC)

这个会主要就是研究怎么更科学的设计、分析和评估workload,很多著名的benchmark都会在这个会上发布。

PMBS

IEEE/ACM Performance Modeling, Benchmarking and Simulation of High Performance Computer Systems (PMBS)

需要进一步的研究学习

  1. https://researchain.net/ is what?

OSDI: USENIX Operating Systems Design and Implementation (26/2=13)

SOSP: ACM SIGOPS Symp on OS Principles (25/2=13)

ASPLOS: Architectural Support for Prog Lang and OS (31)

FAST: USENIX Conference on File and Storage Technologies (23)

Usenix: Annual Usenix Technical Conference (34)

OSDI,这是一个收录范围相当广的会议。提到OSDI,就得提到排名第11的另一 个会议: SOSP。这两个是OS最好的会议,每两年开一次,轮流开,比如今年是OSDI,那么 明年就是SOSP。由于这两个会议方向很广,因此影响很大。

在Architecture领域,最好的会议是ISCA,HPCA和MICRO。

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

查询期刊 https://www.letpub.com.cn/index.php?page=journalapp

http://blog.sina.com.cn/s/blog_556a37e10100mdnc.html

https://www.zhihu.com/question/26583423

https://blog.csdn.net/chen_shiqiang/article/details/76167981

AMD CPU

AMD history

超微半导体公司(英語:Advanced Micro Devices, Inc.;縮寫:AMD、超微,或譯「超威」),創立於1969年,是一家專注於微处理器及相關技術設計的跨国公司,总部位于美國加州舊金山灣區矽谷內的森尼韦尔市。

AMD EPYC 7452 32-Core Processor

由 AMD 于 2019 年年中设计和推出。 是基于 Zen 2 微架构的多芯片处理器

> 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:               
(Intel) fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht 

(AMD)   syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 

        constant_tsc art rep_good nopl nonstop_tsc extd_apicid aperfmperf eagerfpu 

(intel) pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand 

(AMD)   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 

(intel) fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni 

        xsaveopt xsavec xgetbv1 

(intel) cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local 

(AMD)   clzero irperf xsaveerptr 

        arat 

(AMD)   npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif 

(intel) umip 

(AMD)   overflow_recov succor smca

CPU\Thread\Socket

  1. CPU(s):64 = the number of logical cores = “Thread(s) per core” × “Core(s) per socket” × “Socket(s)” = 1 * 32 * 2
  2. One socket is one physical CPU package (which occupies one socket on the motherboard);
  3. each socket hosts a number of physical cores, and each core can run one or more threads.
  4. In this case, you have two sockets, each containing a 32-core AMD EPYC 7452 CPU, and since that not supports hyper-threading, each core just run a thread.

CPU flags

Intel-defined CPU features, CPUID level 0x00000001 (edx)

fpu:板载 FPU(浮点支持)
vme:虚拟 8086 模式增强功能
de: 调试扩展 (CR4.DE)
pse:页表大小扩展(4MB 内存页表)
tsc:时间戳计数器(RDTSC)
msr:特定模型的寄存器(RDMSR、WRMSR)
pae:物理地址扩展(支持超过 4GB 的 RAM)
mce:机器检查异常
cx8:CMPXCHG8 指令(64 位比较和交换)
apic:板载 APIC(Advanced Programmable Interrupt Controller)
sep:SYS ENTER/SYS EXIT
mtrr:内存类型范围寄存器
pge:页表全局启用(PDE 和 PTE 中的全局位)
mca:机器检查架构
cmov:CMOV 指令(条件移动)(也称为 FCMOV)
pat:页表属性表
pse36:36 位 PSE(大页表)
pn:处理器序列号
clflush:缓存行刷新指令
mmx:多媒体扩展
fxsr: FXSAVE/FXRSTOR, CR4.OSFXSR #  enables Streaming SIMD Extensions (SSE) instructions and fast FPU save & restore.
sse:英特尔 SSE 矢量指令
sse2:sse2
ht:超线程和/或多核
没有使用到的
ss:CPU自监听
tm:自动时钟控制(Thermal Monitor)
ia64:英特尔安腾架构 64 位(不要与英特尔的 64 位 x86 架构混淆,标志为 x86-64 或由标志 lm 指示的“AMD64”位)
pbe:Pending Break Enable(PBE# 引脚)唤醒支持

AMD-defined CPU features, CPUID level 0x80000001

syscall: SYSCALL (Fast System Call) and SYSRET (Return From Fast System Call)
nx:执行禁用 # NX 位(不执行)是 CPU 中使用的一项技术,用于分隔内存区域,以供处理器指令(代码)存储或数据存储使用
mmxext: AMD MMX extensions
fxsr_opt: FXSAVE/FXRSTOR optimizations
pdpe1gb: One GB pages (allows hugepagesz=1G)
rdtscp: Read Time-Stamp Counter and Processor ID
lm: Long Mode (x86-64: amd64, also known as Intel 64, i.e. 64-bit capable)
没有使用到的
mp: Multiprocessing Capable.
3dnowext: AMD 3DNow! extensions
3dnow: 3DNow! (AMD vector instructions, competing with Intel's SSE1)

Other features, Linux-defined mapping(映射?)

constant_tsc:TSC(Time Stamp Counter) 以恒定速率滴答
art: Always-Running Timer
rep_good:rep 微码运行良好
nopl: The NOPL (0F 1F) instructions # NOPL is long-sized bytes "do nothing" operation
nonstop_tsc: TSC does not stop in C states
extd_apicid: has extended APICID (8 bits) (Advanced Programmable Interrupt Controller)
aperfmperf: APERFMPERF # On x86 hardware, APERF and MPERF are MSR registers that can provide feedback on current CPU frequency.
eagerfpu: Non lazy FPU restore

Intel-defined CPU features, CPUID level 0x00000001 (ecx)

pni: SSE-3 (“2004年,新内核Prescott New Instructions”)
pclmulqdq: 执行四字指令的无进位乘法 - GCM 的加速器)
monitor: Monitor/Mwait support (Intel SSE3 supplements)
ssse3:补充 SSE-3
fma:融合乘加
cx16: CMPXCHG16B # double-width compare-and-swap (DWCAS) implemented by instructions such as x86 CMPXCHG16B
sse4_1:SSE-4.1
sse4_2:SSE-4.2
x2apic: x2APIC
movbe:交换字节指令后移动数据
popcnt:返回设置为1指令的位数的计数(汉明权,即位计数)
aes/aes-ni:高级加密标准(新指令)
xsave:保存处理器扩展状态:还提供 XGETBY、XRSTOR、XSETBY
avx:高级矢量扩展
f16c:16 位 fp 转换 (CVT16)
rdrand:从硬件随机数生成器指令中读取随机数

More extended AMD flags: CPUID level 0x80000001, ecx

lahf_lm:在长模式下从标志 (LAHF) 加载 AH 并将 AH 存储到标志 (SAHF)
cmp_legacy:如果是,超线程无效
svm:“安全虚拟机”:AMD-V
extapic:扩展的 APIC 空间
cr8_legacy:32 位模式下的 CR8
abm:高级位操作
sse4a:SSE-4A
misalignsse:指示当一些旧的 SSE 指令对未对齐的数据进行操作时是否产生一般保护异常 (#GP)。还取决于 CR0 和对齐检查位
3dnowprefetch:3DNow预取指令
osvw:表示 OS Visible Workaround,它允许 OS 绕过处理器勘误表。
ibs:基于指令的采样
xop:扩展的 AVX 指令
skinit:SKINIT/STGI 指令 # x86虚拟化的系列指令
wdt:看门狗定时器
tce:翻译缓存扩展
topoext:拓扑扩展 CPUID 叶
perfctr_core:核心性能计数器扩展
perfctr_nb:NB 性能计数器扩展
bpext:数据断点扩展
perfctr_l2:L2 性能计数器扩展

辅助标志:Linux 定义 - 用于分散在各种 CPUID 级别的功能

cpb:AMD 核心性能提升
cat_l3:缓存分配技术L3
cdp_l3:代码和数据优先级 L3
hw_pstate:AMD HW-PSstate Hardware P-state
sme:AMD 安全内存加密
retpoline_amd:AMD Retpoline 缓解 # 防止被攻击的安全策略

Virtualization flags: Linux defined

vmmcall:比 VMCALL 更喜欢 VMMCALL

Intel-defined CPU features, CPUID level 0x00000007:0 (ebx)

fsgsbase:{RD/WR}{FS/GS}BASE 指令
bmi1:第一 组位操作扩展
avx2: AVX2 instructions
smep:主管模式执行保护
bmi2:第二 组位操作扩展
cqm:缓存 QoS 监控(Quality of Service )
rdt_a:资源总监技术分配
rdseed:RDSEED 指令,RDRAND 用于仅需要高质量随机数的应用程序
adx:ADCX 和 ADOX 指令
smap:超级用户模式访问保护
clflushopt:CLFLUSHOPT 指令, Optimized CLFLUSH,优化的缓存行刷回, 能够把指定缓存行(Cache Line)从所有级缓存中淘汰,若该缓存行中的数据被修改过,则将该数据写入主存;支持现状:目前主流处理器均支持该指令。
clwb: CLWB instruction (Cache Line Write Back,缓存行写回)作用与 CLFLUSHOPT 相似,但在将缓存行中的数据写回之后,该缓存行仍将呈现为未被修改过的状态;支持现状
sha_ni: SHA1/SHA256 Instruction Extensions

扩展状态功能,CPUID 级别 0x0000000d:1 (eax)

xsaveopt: Optimized XSAVE
xsavec: XSAVEC 使用压缩保存处理器扩展状态
xgetbv1: XGETBV with ECX = 1

Intel-defined CPU QoS sub-leaf, CPUID level 0x0000000F:0 (edx)

cqm_llc: LLC QoS # last level cache (LLC)
cqm_occup_llc: LLC occupancy monitoring #  Memory Bandwidth Monitoring (MBM)
cqm_mbm_total: LLC total MBM monitoring
cqm_mbm_local: LLC local MBM monitoring

AMD-defined CPU features, CPUID level 0x80000008 (ebx)

clzero:CLZERO 指令,随 Zen 微体系结构引入的 AMD 供应商特定 x86 指令。CLZERO 通过向行中的每个字节写入零来清除由 RAX 寄存器中的逻辑地址指定的缓存行。
irperf:指令退休性能计数器
xsaveerptr:始终保存/恢复 FP 错误指针

Thermal and Power Management leaf, CPUID level 0x00000006 (eax)

arat: Always Running APIC Timer

AMD SVM 特征识别,CPUID 级别 0x8000000a (edx)

npt:AMD 嵌套页表支持
lbrv:AMD LBR 虚拟化支持
svm_lock:AMD SVM 锁定 MSR
nrip_save:AMD SVM next_rip 保存
tsc_scale:AMD TSC 缩放支持
vmcb_clean:AMD VMCB 清洁位支持
flushbyasid:AMD 逐个 ASID 支持
解码辅助:AMD 解码辅助支持
pausefilter: AMD 过滤暂停拦截
pfthreshold:AMD 暂停过滤器阈值
avic:虚拟中断控制器
vmsave_vmload:虚拟 VMSAVE VMLOAD
vgif:虚拟 GIF

Intel-defined CPU features, CPUID level 0x00000007:0 (ecx)

umip:用户模式指令保护

AMD-defined CPU features, CPUID level 0x80000007 (ebx)

overflow_recov:MCA 溢出恢复支持 # Machine Check Architecture (MCA)
succor:不可纠正的错误控制和恢复
smca:可扩展的 MCA

不知道的flags

ssbd ibrs ibpb stibp

Processor P-states and C-states

英特尔处理器支持多种技术来优化功耗。 在本文中,我们概述了 p 状态(运行期间电压和 CPU 频率的优化)和 c 状态(如果内核不必执行任何指令,则优化功耗)。

ADCX 和 ADOX

ADCX 将两个无符号整数加上进位,从进位标志中读取进位,并在必要时将其设置在那里。 不影响进位以外的其他标志。 ADOX 将两个无符号整数加上进位,从溢出标志中读取进位,并在必要时将其设置在那里。 不影响溢出以外的其他标志。

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

https://unix.stackexchange.com/questions/43539/what-do-the-flags-in-proc-cpuinfo-mean

Bash Scripting

Bash scripting cheatsheet

https://devhints.io/bash

Environment

SCRIPT_DIR="$(dirname $0)"
export HOSTNAME="$(hostname)"

check Environment

if [[ -z "${ITHEMAL_HOME}" ]]; then
    echo "ITHEMAL_HOME environment variable must be set!"
    exit 1
fi

yes/no input

function container_id() {
    sudo docker ps -q --filter 'name=ithemal$'
}

CONTAINER="$(container_id)"

if [[ -z "${CONTAINER}" ]]; then
    read -p "Container is not currently running. Would you like to start it? (y/n) " -r

    if [[ !($REPLY =~ ^[Yy]) ]]; then
    echo "Not starting."
    exit 1
    fi

    # others
fi

functions

get_sudo

function get_sudo() {
    if ! sudo -S true < /dev/null 2> /dev/null; then
        echo "sudo access required for docker:"
        sudo true
    fi
}
/dev/null是一个几乎不管向它写入什么,都只返回成功,但是什么都没真的写入的文件。换句话说就是个“无底洞”,扔进去的东西肯定算扔进去了,但是扔进去就看不见了。

tmux attach

#!/usr/bin/env bash

SESSION=$(tmux ls -F '#S #{session_attached}' | grep ' 0$' | head -n 1 | awk '{$NF=""; print $0}' | awk '{$1=$1;print}')

if [ ! -z "${SESSION}" ]; then
    tmux attach -t "${SESSION}"
else
    tmux new "bash -l"
fi

argument

$? is a special variable in shell that reads the exit status of the last command executed.

$@ refers to all of a shell script's command-line arguments. $1 , $2 , etc., refer to the first command-line argument, the second command-line argument

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

Pip

发布自己的pip包

一、注册自己的 PyPi 帐号

也可以是自己搭的 PyPi私服仓库的账号

二、依据自己的项目目录,创建setup.py

如下图所示,agent_cli是我整体的项目,我想要将pip-test目录下的代码打包上传到Pypi仓库中;

在pip-test的同级目录,创建setup.py文件

三、 编写自己的setup.py文件

from setuptools import setup, find_packages

setup(
    name='tsjPython',  # 打包后的包文件名
    version='0.1',  # 版本号
    keywords=("tsj"),    # 关键字
    description='personal code for tsj',  # 说明
    long_description="none",  # 详细说明
    license="MIT Licence",  # 许可
    url='http://home.ustc.edu.cn/~shaojiemike',
    author='Shaojie Tan',
    author_email='[email protected]',
    # packages=find_packages(),     #这个参数是导入目录下的所有__init__.py包
    include_package_data=True,
    platforms="any",
    install_requires=['termcolor',
                      'plotille'],    # 引用到的第三方库
    # py_modules=['pip-test.DoRequest', 'pip-test.GetParams', 'pip-test.ServiceRequest',
    #             'pip-test.ts.constants', 'pip-test.ac.Agent2C',
    #             'pip-test.ts.ttypes', 'pip-test.ac.constants',
    #             'pip-test.__init__'],  # 你要打包的文件,这里用下面这个参数代替
    packages=['tsjPython']  # 这个参数是导入目录下的所有__init__.py包
)

四、打包自己的项目

执行下述两条命令

python setup.py build    #执行此命令后,会生成上面图片中build的目录,目录层级是  build/lib/pip-test,  pip-test目录下就是你打包文件解压后的结果,可以在此查看打包的代码是否完整

python setup.py sdist    # 执行此命令后,就会在dist目录下生成压缩包文件 .tar.gz

五、上传到PyPi服务器

在上传前,要建一个文件,$HOME/.pypirc$HOME目录在linux或者mac系统下就是~/目录。在这里建一个 .pypirc文件。里边的内容如下:

[distutils]
index-servers = pypi

[pypi]
username:你的PyPi用户名
password:你的PyPi密码

或者使用token.

注册好之后,生成一个 token:https://pypi.org/manage/account/#api-tokens。由于我们是要上传新项目,所以不要限制 scope 到特定的项目。

[pypi]
username = __token__
password = <换成你刚刚复制下来的 token, 包括 `pypi-` 前缀>

提前安装 py -m pip install --upgrade twine

执行此命令: twine upload dist/XXXXX-0.1.0.tar.gz 上传你刚刚打包好的压缩包

六、安装使用

使用 pip install XXX 就可以轻松使用

问题

requests.exceptions.ProxyError: HTTPSConnectionPool(host='upload.pypi.org', port=443): Max retries exceeded with url: /legacy/ (Caused by ProxyError('Cannot connect to proxy.', OSError(0, 'Error')))

不要挂代理

开发测试包

如果为了测试而上传代码,会占用版号。

可以通过先安装在本地来实现

pip install packageName
pip uninstall packageName
使用 setup.py 安装的包会被复制到当前环境的 site-packages 目录下,这意味着,一旦我们修改了包的源代码,就需要重新安装它。

这常常是集中开发过程中的一个问题,因为很容易忘记需要再次执行安装,这就是为什么 setuptools 提供了一个额外的 develop 命令的重要原因。

develop 命令的完整格式为Python setup.py develop,该命令允许我们在开发模式下安装包,它会在部署目录(site-packages)时创建一个指向项目源代码的特殊链接,而不是将整个包复制过去,从而实现在编辑包的源代码之后无需再重新安装,并且它在 sys.path 中可用,就像正常安装一样。

pip 也支持用这种模式来安装包,这个安装选项叫作可编辑模式,可以使用 install 命令的 -e 参数来启用,代码格式如下: pip install -e 包路径

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://www.cnblogs.com/weisunblog/p/13307174.html

Rust

简介

Rust 速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

Rust 丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。

安装

异常简单,默认安装在自己.local/bin下,会自动修改bashrc/zshrc On Linux and macOS systems, this is done as follows:

curl https://sh.rustup.rs -sSf | sh

基础语法

printf

impl ClassName {
    pub fn printFunc() {
        let a = 12;
        println!("a is {0}, a again is {0}", a); 
        //println 不是一个函数,而是一个宏规则。所以有感叹号
    }
}

变量

Rust 是强类型语言,但具有自动判断变量类型的能力。

//可以指定类型
let a: u64 = 123;
//不可变变量
let a = 123;
let a = 456; //不是复制是,重新绑定
let s2 = s1.clone(); //这才是真复制
//变量
let mut a = 123;
a = 456;
//常量
const a: i32 = 123;

函数

函数返回值

Rust 函数声明返回值类型的方式:在参数声明之后用 -> 来声明函数返回值的类型(不是 : )。

不写return是将最后一个当作返回值?(貌似是

Rust是如何实现内存安全的呢?

内存安全

  1. buffer overflow
  2. null pointer dereference
  3. use after free
  4. use of uninitialized memory
  5. illegal free (of an already-freed pointer, or a non-malloced pointer)

所有权

所有权对大多数开发者而言是一个新颖的概念,它是 Rust 语言为高效使用内存而设计的语法机制。所有权概念是为了让 Rust 在编译阶段更有效地分析内存资源的有用性以实现内存管理而诞生的概念。

所有权三规则
  1. Rust 中的每个值都有一个变量,称为其所有者。
  2. 一次只能有一个所有者。
  3. 当所有者不在程序运行范围时,该值将被删除。
原理

如果我们定义了一个变量并给它赋予一个值,这个变量的值存在于内存中。这种情况很普遍。但如果我们需要储存的数据长度不确定(比如用户输入的一串字符串),我们就无法在定义时明确数据长度,也就无法在编译阶段令程序分配固定长度的内存空间供数据储存使用。(有人说分配尽可能大的空间可以解决问题,但这个方法很不文明)。这就需要提供一种在程序运行时程序自己申请使用内存的机制——堆。本章所讲的所有"内存资源"都指的是堆所占用的内存空间。

有分配就有释放,程序不能一直占用某个内存资源。因此决定资源是否浪费的关键因素就是资源有没有及时的释放。

我们把字符串样例程序用 C 语言等价编写:

{
    char *s = (char *)malloc(sizeof(char)*10);
    s = "nhooo"; //伪代码了
    free(s); // 释放 s 资源
}

很显然,Rust 中没有调用 free 函数来释放字符串 s 的资源(假设 "nhooo" 在堆中,这里)。Rust 之所以没有明示释放的步骤是因为在变量范围结束的时候,Rust 编译器自动添加了调用释放资源函数的步骤

这种机制看似很简单了:它不过是帮助程序员在适当的地方添加了一个释放资源的函数调用而已。但这种简单的机制可以有效地解决一个史上最令程序员头疼的编程问题。

https://hashrust.com/blog/memory-safey-in-rust-part-1/

https://deathking.github.io/2020/08/03/blue-team-rust-what-is-memory-safety-really/

https://segmentfault.com/a/1190000041151698

https://bbs.huaweicloud.com/blogs/193974

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

MLOptimizer

  • 优化算法(Optimizer)目标是优化(最小化或最大化)一个损失函数,以调整模型参数,使模型在训练数据上表现得更好。
  • 在深度学习中,优化算法是训练神经网络时至关重要的组成部分,它们决定了模型参数如何更新以最小化损失。
  • 所以梯度下降、动量法、随机梯度下降、RMSprop、Adam、AdamW、LAMB等算法都是优化算法。