跳转至

笔记

Jellyfin

导言

作为一个影视剧爱好者,通过开源软件jellyfin如何管理BT或者PT下载的视频资料是本文的主要内容。

Wake On Lan(Wol)

简介

Wake-on-LAN 也叫 WoL,指通过网络消息打开或唤醒计算机。

WoL 需要由另一台「同局域网」设备发送网络信号,任意有能力发送 WoL 信号 的设备都可以充当此角色;在远程办公场景中,则最好由「带有线网卡的低功耗设备」来执行,这类设备包括但不限于以下选项:

  1. 带网络唤醒 WoL 功能的路由器产品
  2. OpenWrt Linux 设备「TP-Link 703n」
  3. 树莓派「推荐 2 代」

网络扫描

获取局域网下设备MAC地址, 或者OpenWRT直接显示 |平台 |工具 | | ---| ---| Windows | Softperfect Network Scanner Linux | arp-scan Android / iOS | Fing / PingTools

发出唤醒信息的软件

可以使用的幻数据包唤醒工具有:

平台 工具 特点
Windows wolcmd.exe 命令行,跨网段
Linux/MacOS etherwake, wakeonlan 命令行,同网段
Android / iOS Fing / PingTools 可扫描

请注意,WoL 属于无状态协议,仅发送、不确认。

问题:抓包发现 WolCmd和wakeonlan的目的地址不同

WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 255.255.255.255 9 (目的地址 192.168.233.242)
WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 255.255.255.0 9 (测试过本地能成功,br-lan路由器能抓, 本地wireshark目的地址 192.168.233.255)


WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 0.0.0.0 9 (目的地址 192.168.233.109.53362 > 255.255.255.255.9 注意:109是macboook)

shaojiemike@shaojieikedeAir ~/github/hugoMinos (main*) [11:46:22]
> wakeonlan 90:09:D0:15:70:B8 (目的地址 192.168.233.109.53362 > 255.255.255.255.9 注意:109是macboook)
Sending magic packet to 255.255.255.255:9 with payload 90:09:D0:15:70:B8
Hardware addresses: <total=1, valid=1, invalid=0>
Magic packets: <sent=1>

路由遇到目的MAC是广播地址怎么办?

IP的广播有三种: 1. 255.255.255.255叫本地广播,也叫直播,direct broadcast,不跨路由器。 2. 172.16.33.255叫子网广播,广播给172.16.33.0这个子网,可以跨路由器 3. 172.16.255.255叫全子网广播,广播给172.16.0.0这个主网,可以跨路由器。

路由器是三层设备,可以隔离广播,但并不是所有广播都隔离。事实上只有本地广播路由器才不转发,对于子网广播和全子网广播,路由器是转发的。

为什么呢?我们来看255.255.255.255的广播,在MAC的封装中,对应的目的MAC是广播,而子网广播和全子网广播,对应的目的MAC是单播,所以路由器会转发。所以路由器隔离的广播是目的MAC为全1的广播,对于目的MAC是单播的上层广播,路由器是不能隔离的。

广播规则

> netstat -r -anv
Routing tables

Internet:
Destination        Gateway            Flags           Netif Expire
default            192.168.233.1      UGScg             en0
127.0.0.1          127.0.0.1          UH                lo0
192.168.233        link#11            UCS               en0      !
192.168.233.1/32   link#11            UCS               en0      !
192.168.233.1      5c:2:14:b3:2:a     UHLWIir           en0   1172
192.168.233.109/32 link#11            UCS               en0      !
192.168.233.242    90:9:d0:15:70:b8   UHLWI             en0    151
192.168.233.255    ff:ff:ff:ff:ff:ff  UHLWbI            en0      !
255.255.255.255/32 link#11            UCS               en0      !
255.255.255.255    ff:ff:ff:ff:ff:ff  UHLWbI            en0      !
路由器
[root@ax6s ~]$ ip route get to 192.168.233.242 from 192.168.233.142 iif lan2
192.168.233.242 from 192.168.233.142 dev br-lan
    cache iif lan2
[root@ax6s ~]$ ip route get to 192.168.233.255 from 192.168.233.142 iif lan2
broadcast 192.168.233.255 from 192.168.233.142 dev lo table local
    cache <local,brd> iif lan2
[root@ax6s ~]$ ip route get to 255.255.255.255 from 192.168.233.142 iif lan2
broadcast 255.255.255.255 from 192.168.233.142 dev lo
    cache <local,brd> iif lan2

电脑需要远程被远程唤醒

电脑设置

  1. 「网络连接」
  2. 以太网(有线网)属性
  3. 【网络】(Realtek PCIe 2.5GbE Family Controller)下配置
  4. 【电源管理】勾选「允许此设备唤醒计算机」以及「只允许幻数据包唤醒计算机」
  5. BIOS打开相关选项
    Automatic Power On
    Wake on LAN/WLAN
    Power Management
    Power On by Onboard LAN
    Power On by PCI-E Devices
    

需要进一步的研究学习

暂无

遇到的问题

暂无

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

Nas 太吵,需要自动关机

参考文献

https://sspai.com/post/67003

https://www.depicus.com/wake-on-lan/wake-on-lan-cmd

Ed2k

基本原理

区别于BT,核心概念在于文件共享。

  1. 设置共享目录,该目录中的所有文件,都会实时共享到eDonkey和KAD网络中。
  2. 目录中共享了的文件都会生成eD2k链接,所有人通过相应的eD2k链接,都能够拿到你共享的文件,
  3. 一旦有人下载相应文件,那么你的eMule客户端就会上传数据。
  4. 平时使用eD2k链接下载,资源也是来自他人eMule所共享的文件的。
  5. 当然,共享目录中也可以啥都不放,但很多eMule客户端都拥有队列优先级机制,上传得少,下载速度也会被限制。

与BT的区别

  1. 资源持久性
  2. 对于BT来说,用户被视为下载者。当用户上传到指定比率作为一个下载者的义务就完成了,一般就停止上传了,这使得BT在下热门资源的时候速度快,但是对冷门资源来说即使这个文件没有被删除也不会有上传者了。
  3. 而对于eMule来说,用户被视为分享者。只要用户文件没被删除作为资源分享者就一直上传,这样可以长期保源。
  4. 资源搜索能力
  5. BT协议中没搜索功能
  6. eMule搜索的时候每个资源大小来源数甚至拥有者对其的评价都是一目了然的,这样使得资源广泛分布,也有利于资源优胜劣汰,从而达到长期保源的目的。

基本概念

eD2k:

eDonkey网络所使用的协议,eDonkey网络所共享的文件会生成eD2k开头的链接。

电驴

eDonkey2000:(又称:eDonkey;缩写:eD2k;非官方中文译名:电驴)最先开发使用eDonkey网络的文件共享客户端软件。2000年起开发,2005年停止维护,之后eDonkey网络被其他软件沿用。

电骡

eMule:(官方中文名:电骡)eMule及其Mods是现在最流行的一款eDonkey网络文件共享客户端软件。2002年起开发。

需要进一步的研究学习

暂无

遇到的问题

暂无

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

参考文献

作者:qysnn 链接:https://www.zhihu.com/question/19922200/answer/29022933 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Clash on LAN/linux/Dockers

导言

在国内的linux服务器上,往往需要clash来代理访问github等外网资源。

有几种解决方案:

  1. 透明代理
  2. ssh 转发实现代理,类似ssh -fNgR 7333:127.0.0.1:7890 [email protected]
  3. Clash 的 Allow LAN功能
  4. Clash in Docker
  5. Clash in Linux

Clash的模式

  • 系统代理模式:只代理127.0.0.1:7890上的数据
  • TUN代理模式:虚拟网卡,并接管所有的网络层的数据
    • 无法封装网络层数据包,无法代理ping, fake-ip还会返回假ip
    • TUN与TAP是操作系统内核中的虚拟网络设备:
      • TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。
      • TUN模拟了网络层设备,操作第三层数据包比如IP数据包。
  • 舍弃的redir-host模式由于必须返回一个真实ip,因此必需发起dns请求,存在dns泄露
  • 默认的fake-ip会对域名的DNS请求返回fake-ip,从而避免DNS泄露。然后根据域名分流将信包发送到对应的上游代理机器,把域名DNS解析工作留给上游机器。
    • fake-ip模式,将fake-ip-filter设置为+.*便等价于redir-host模式

Clash的配置文件

# RESTful web API listening address
external-controller: 127.0.0.1:9090


# DNS server settings
# This section is optional. When not present, the DNS server will be disabled.
dns:
  enable: false
  listen: 0.0.0.0:53
  ipv6: false # when the false, response to AAAA questions will be empty

  # These nameservers are used to resolve the DNS nameserver hostnames below.
  # 默认只支持ip
  default-nameserver:
    - 8.8.8.8

  # 对于下面的域名,fake-ip模式会返回真实ip
  fake-ip-filter:
    - '*.lan'
    - localhost.ptlogin2.qq.com

  # 支持 UDP, TCP, DoT, DoH. 和指定端口
  # 所有DNS请求都会不经过代理被转发到这些服务器,Clash会选择一个最快的返回结果
  nameserver:
    - https://223.5.5.5/dns-query # 阿里云
    - https://doh.pub/dns-query #腾讯云
    - tls://dns.rubyfish.cn:853 # DNS over TLS
    - https://1.1.1.1/dns-query # DNS over HTTPS
    - dhcp://en0 # dns from dhcp

  # 对于所有DNS请求,fallback和nameserver内的服务器都会同时查找
  # 如果DNS结果为非国内IP(GEOIP country is not `CN`),会使用fallback内的服务器的结果
  # 因为nameserver内为国内服务器,对国外域名可能有DNS污染。fallback内是国外服务器,能防止国外域名被DNS污染
  fallback:
    - https://162.159.36.1/dns-query 
    - https://dns.google/dns-query
    - tls://8.8.8.8:853

  # DNS污染攻击的对策
  fallback-filter:
    geoip: false # If geoip is true, when geoip matches geoip-code, clash will use nameserver results. Otherwise, Clash will only use fallback results.
    # geoip-code: CN    
    ipcidr: # IPs in these subnets will be considered polluted, when nameserver results match these ip, clash will use fallback results.
      - 0.0.0.0/8
      - 10.0.0.0/8
      - 100.64.0.0/10
      - 127.0.0.0/8
      - 169.254.0.0/16
      - 172.16.0.0/12
      - 192.0.0.0/24
      - 192.0.2.0/24
      - 192.88.99.0/24
      - 192.168.0.0/16
      - 198.18.0.0/15
      - 198.51.100.0/24
      - 203.0.113.0/24
      - 224.0.0.0/4
      - 240.0.0.0/4
      - 255.255.255.255/32
    domain: #Domains in these list will be considered polluted, when lookup these domains, clash will use fallback results.
      - +.google.com
      - +.facebook.com
      - +.youtube.com
      - +.githubusercontent.com

Clash use Allow LAN

假如服务器和笔记本在LAN下,笔记本的clash软件只需要打开LAN就可以给服务器代理了,是最简单方便的方式。

Clash in Docker

由于UGREEN NAS一直开机,作为代理节点很适合。

首先注意修改代理机场的文件config.yaml0.0.0.0:9090,以便haishanh/yacd使用。

mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '0.0.0.0:9090'
  • 使用dreamacro/clash1
  • UI使用haishanh/yacd

Clash in Linux

下载

下载可执行文件

wget https://github.com/Dreamacro/clash/releases/download/v1.11.8/clash-linux-amd64-v1.11.8.gz
scp
gunzip clash-linux-amd64-v1.11.8.gz
chmod u+x clash-linux-amd64-v1.11.8
  • Clash 运行时需要 Country.mmdb 文件,Country.mmdb 文件利用 GeoIP2 服务能识别互联网用户的地点位置,以供规则分流时使用。
  • 当第一次启动 Clash 时(使用 ./clash 命令) 会自动下载(会下载至 /home/XXX/.config/clash 文件夹下)。自动下载可能会因网络原因较慢,可以访问该链接手动下载。

配置

根据订阅链接配置文件

cd ~/.config/clash
curl -o config.yaml 'longURL'

验证

成功结果

# shaojiemike @ node6 in ~/Download [10:22:54] C:130       
$set_proxy                                            

# shaojiemike @ node6 in ~/Download [10:22:57]       
$ curl -v www.google.com 

# shaojiemike @ node6 in ~/Download [10:21:46]
$ ./clash-linux-amd64-v1.11.8
INFO[0000] Start initial compatible provider 🍃 Proxies
INFO[0000] Start initial compatible provider ☁️ Others
INFO[0000] Start initial compatible provider 🍂 Domestic
INFO[0000] Start initial compatible provider ⭐️ Auto
INFO[0000] Mixed(http+socks) proxy listening at: [::]:7890
INFO[0000] RESTful API listening at: [::]:9090
INFO[0000] DNS server listening at: [::]:5323
INFO[0070] [TCP] 127.0.0.1:52664 --> www.google.com:80 match DomainKeyword(google) using 🍃 Proxies[专线 日本 03]

图形化界面管理

http://clash.razord.top/#/proxies

输入

Host: node6.swangeese.fun
Port: 9090
Secret: 配置文件配置的 secret

查看config.yaml,发现是空

mixed-port: 7890                                      
allow-lan: true                                           
mode: rule                                                    
log-level: info                                                     
external-controller: '0.0.0.0:9090'                               
secret: ''

常见问题

address already in use
# shaojiemike @ node6 in ~/Download [10:14:25]
$ ./clash-linux-amd64-v1.11.8
INFO[0000] Start initial compatible provider ⭐️ Auto
INFO[0000] Start initial compatible provider 🍃 Proxies
INFO[0000] Start initial compatible provider ☁️ Others
INFO[0000] Start initial compatible provider 🍂 Domestic
INFO[0000] RESTful API listening at: [::]:9090
INFO[0000] Mixed(http+socks) proxy listening at: [::]:7890
ERRO[0000] Start DNS server error: listen udp 0.0.0.0:5353: bind: address already in use

修改配置文件里的端口即可

参考文献

https://blog.iswiftai.com/posts/clash-linux/

https://einverne.github.io/post/2021/03/linux-use-clash.html

AI Image

AI tag

https://www.bilibili.com/video/BV1L84y1z7bH/?spm_id_from=333.999.0.0&vd_source=5bbdecb1838c6f684e0b823d0d4f6db3

https://aitag.top/

novelAI

官网要钱,有泄漏的50G的模型,B站有up抽取了其中的一个做了整合包

不知道,会不会有版权问题下架了。

https://pan.baidu.com/s/1AAHoNYYano6q7XBl3luCcg
upqn

常见问题(环境RTX3070 8G)

  1. 6G、8G显存生成太慢的问题已经修复
  2. 百度盘里已经上传了修复包,请下载并且替换hydra_node里所有文件
  3. 然后6G显存请使用6g的bat文件 等于8G或者以上的直接使用start.bat
  4. 网址是 127.0.0.1:6969
  5. CTRL+C 好像才能启动?
  6. RTX3070 大概20s一张

可以把start.bat改成sh脚本在实验室A100上跑

参考文献

作者:秋葉aaaki https://www.bilibili.com/read/cv19038600?spm_id_from=333.788.b_636f6d6d656e74.7 出处:bilibili

PIM Simulator

PIM 模拟器的基本分类

技术路线 代表
全系统模拟 gem5
基于平台无关的PIM的trace代码的模拟 Sinuca (HPCC'15)
Host端为真实机器,只模拟PIM端 \(Sim^2PIM\) (DATE'21)
PIMSim( IEEE Computer Architecture Letters'19)
## memory operations采集
  1. Intel's Pin Software 采集 user-mode memory operations
  2. Bochs full system emulator / ZSim / gem5

各种PIM论文里的模拟器环境

文献 环境 特点
CoNDA(ISCA ’19) gem5(X86 full-system) + DRAMSim2 魔改了gem5的内存模型
Accelerating Neural Network Inference with Processing-in-DRAM: From the Edge to the Cloud(IEEE Micro) 讨论了三种PIM架构1. UPMEM(真实系统) 2. Mensa(Google’s Edge TPU in-house simulator) 3. SIMDRAM(gem5)
Ambit: In-Memory Accelerator for Bulk Bitwise Operations Using Commodity DRAM Technology(Micro 17) gem5
GraphPIM: Enabling Instruction-Level PIM Offloading in Graph Computing Frameworks Structural Simulation Toolkit (SST) [28] with MacSim [29], a cycle-level architecture simulator. HMC is simulated by VaultSim, a 3D-stacked memory simulator. We extend VaultSim with extra timing models based on DRAMSim2
ProPRAM: Exploiting the Transparent Logic Resources in Non-Volatile Memory for Near Data Computing Multi2Sim + DRAMSim2 + NVSim
Operand Size Reconfiguration for Big Data Processing in Memory(RVU 架构 DATE 17 B会) SiNUCA(类似gem5)

越来越多的工作在real PIM system上开展,基于专门的PIM模拟器的貌似很少???为什么无法满足定制的要求吗?

PIM 编译器

A compiler for automatic selection of suitable processing-in-memory instructions,

PIM cache coherence实现

Providing plug n’ play for processing-in-memory accelerators,

LazyPIM: An Efficient Cache Coherence Mechanism for Processing-in-Memory,

各种的PIM模拟器

比较,优点和局限性

模拟器名称 文献 代码 特点
ZSim + Ramulator Processing-in-memory: A workload-driven perspective https://github.com/CMU-SAFARI/ramulator-pim/ ZSim(类似gem5)+Ramulator(HMC logic layer add PIM core) 了解实现原理后,其memory端的拓展性值得期待
Sim2PIM 暂无 可以将任意PIM架构和任意host端结合,多线程very fast as perf(通过利用Host系统OS的pthread和硬件计数器来实现)缺点:Host端的cache策略等不能任意定制
gem5 SiNUCA文章指出gem5的DRAM模拟误差可以达到36%
Sinuca(HPCC 15) Sinuca: A validated micro-architecture simulator use real trace-based simulator(但是不能采OS和多线程的)
PinTools Pin: Building customized program analysis tools with dynamic instrumentation, 类似上面的,JIT执行
MultiPIM Multipim: A detailed and configurable multistack processing-in-memory simulator
Pimsim Pimsim: A flexible and detailed processing-in-memory simulator 太慢
Hmc-sim-2.0: A simulation platform for exploring custom memory cube operations 特定架构
Cycle Accurate Parallel PIM Simulator (CLAPPS) A generic processing in memory cycle accurate simulator under hybrid memory cube architecture 依赖system模拟器(SystemC HMC simulation)
Mnsim: Simulation platform for memristor-based neuromorphic computing system 不是全系统的模拟(忆阻器PIM 模拟器)
Cim-sim Non-Volatile Memory(忆阻器PIM 模拟器)

ZSim + Ramulator 功能

host CPU cores and general-purpose PIM cores.

The PIM cores are placed in the logic layer of a 3D-stacked memory (Ramulator's HMC model).

The simulation framework does not currently support concurrent execution on host and PIM cores.

主机CPU核和通用PIM核的计算系统。PIM核心被放置在一个3d堆叠存储器(Ramulator的HMC模型)的逻辑层中。通过这个模拟框架,我们可以模拟主机CPU核和通用PIM核,目的是比较两者对于一个应用程序或其部分的性能。该仿真框架目前不支持主机和PIM核心上的并发执行。

use ZSim to generate memory traces that are fed to Ramulator.

Zim跟踪内存的使用,还可以模拟主机的缓存层次结构(包括coherence协议)。ZSim还可以模拟硬件预取器。

Ramulator simulates the memory accesses of the host cores and the PIM cores

Ramulator contains simple models of out-of-order and in-order cores that can be used for simulation of host and PIM.

需要进一步的研究学习

暂无

遇到的问题

暂无

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

参考文献

PersonalWebsiteDomain

Ubuntu 下Apache 域名绑定设置

在 HuaWei Cloud 购买域名

  1. 购买 shaojiemike.top
  2. 自动在华为DNS服务器上进行DNS解析(ip与域名对应)
  3. 实名认证
  4. 网站报备
  5. 网站解析 当您想在Internet上通过域名访问您的网站时,可以通过华为云的云解析服务为域名添加解析记录。

    例如,搭建一个网站服务器,采用IPv4格式的弹性IP地址。如果想要实现通过域名“example.com”及其子域名“www.example.com”访问该网站,需要配置如下解析记录:

    A:添加域名“example.com”到弹性IP地址的解析记录。
    A:添加子域名“www.example.com”到弹性IP地址的解析记录。
    
    1. 修改DNS服务器为华为 不要修改成域名解析的

DNS域名解析查看

# shaojiemike @ node6 in ~ [21:24:21]
$ dig +trace shaojiemike.us.to

; <<>> DiG 9.16.1-Ubuntu <<>> +trace shaojiemike.us.to
;; global options: +cmd
.                       184     IN      NS      f.root-servers.net.
.                       184     IN      NS      h.root-servers.net.
.                       184     IN      NS      c.root-servers.net.
.                       184     IN      NS      m.root-servers.net.
.                       184     IN      NS      g.root-servers.net.
.                       184     IN      NS      j.root-servers.net.
.                       184     IN      NS      a.root-servers.net.
.                       184     IN      NS      i.root-servers.net.
.                       184     IN      NS      l.root-servers.net.
.                       184     IN      NS      k.root-servers.net.
.                       184     IN      NS      d.root-servers.net.
.                       184     IN      NS      e.root-servers.net.
.                       184     IN      NS      b.root-servers.net.
;; Received 262 bytes from 127.0.0.53#53(127.0.0.53) in 0 ms

to.                     172800  IN      NS      frankfurt.tonic.to.
to.                     172800  IN      NS      singapore.tonic.to.
to.                     172800  IN      NS      tonic.to.
to.                     172800  IN      NS      newyork.tonic.to.
to.                     172800  IN      NS      colo.tonic.to.
to.                     172800  IN      NS      sydney.tonic.to.
to.                     172800  IN      NS      helsinki.tonic.to.
to.                     86400   IN      NSEC    today. NS RRSIG NSEC
to.                     86400   IN      RRSIG   NSEC 8 1 86400 20221118050000 20221105040000 18733 . zYyPgXiUoIoPzZsXi8WD0aT0Ps7ajmQYA/blzyfNG6Pl1NdONShc/3T1 3p2rAfr2a7NI6SI+yeEyiRYeeI86RuNv1u4aAJD2QXZapKlogP+hveb/ SYztzsr70Ha6/7RQAqQqY+ctHOZXIzUMhpNxFneTXcJ2CVhQmGIYG0sa 0BmaDKH0kxFHtbJZvENMpo4WrE0KTNzFsYlHZQGZV0OQeU/MpcSkPt5I DefxNVBMqMS8lF0Wzg8ESwEDddE7WvMlCNlnBLE7LHk0ZdQGU5Qg/8Ot CpNKEjCoROXA7sA/CkrGEdhW3CZnJYOdQ6UcH2pDwYYVIOsE7L8QJV/r RC9/tA==
;; Received 653 bytes from 199.7.83.42#53(l.root-servers.net) in 60 ms

us.to.                  86400   IN      NS      NS4.AFRAID.ORG.
us.to.                  86400   IN      NS      NS3.AFRAID.ORG.
us.to.                  86400   IN      NS      NS1.AFRAID.ORG.
us.to.                  86400   IN      NS      NS2.AFRAID.ORG.
;; Received 156 bytes from 95.216.159.42#53(helsinki.tonic.to) in 272 ms

us.to.                  3600    IN      SOA     ns1.afraid.org. dnsadmin.afraid.org. 2211050595 86400 7200 2419200 3600
;; Received 133 bytes from 2001:1850:1:5:800::6b#53(NS2.AFRAID.ORG) in 260 ms

可以看到13个根DNS服务器到to子服务器再到us.to的解析过程。

在 HuaWei Cloud 配置域名解析

为域名添加A记录集

在“公网域名”页面的域名列表的“域名”列,单击域名的名称“example.com”。 进入“解析记录”页面。

在页面右上角,单击“添加记录集”。 在“添加记录集”页面,根据界面提示为域名“example.com”设置A记录集参数。

解析

为子域名添加A记录集

主机记录:设置为“www”,表示解析的域名为子域名“www.example.com”。

测试域名解析是否生效

D:\OneDrive - mail.ustc.edu.cn\homepage> nslookup shaojiemike.top ns1.huaweicloud-dns.org
Server:  ecs-159-138-77-159.compute.hwclouds-dns.com
Address:  159.138.77.159

Name:    shaojiemike.top
Address:  202.38.73.26

解析2

ECS

云服务器Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务。它能帮助您快速的构建更稳定、安全的应用,提高运维效率,降低IT成本

如何判断自己IP是内网IP还是外网IP

局域网,内网IP
  1. tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下:
    10.0.0.0/8:10.0.0.0~10.255.255.255
    172.16.0.0/12:172.16.0.0~172.31.255.255
    192.168.0.0/16:192.168.0.0~192.168.255.255
    
  2. 一些宽带运营商尽管也使用了非私有地址分配给用户使用,但是由于路由设置的原因,Internet上的其他用户并不能访问到这些ip。

有这么一种情况:拉的联通的带宽,分配的IP只能在联通内部访问,移动网络不能访问。这个IP最多只能算是“联通内的公网IP”,不是真的公网IP。

上面几部分IP都可称为内网IP

动态公网IP

貌似node5 与 node6 挂了网络通,是动态公网IP(chivier说的)

node5 ip: 202.38.73.26

IPv4封了许多端口(至少ssh的22端口是不行的)

IPv6是直接可以ssh访问的

公网IP是IPv4/IPv6

ipv4是32位地址,分成4段,每段之间都有"."分开,而每段之间有8位,从0-255 最普遍看到的就是ipv4

ipv6是128位地址,每个数目等于4位(0-f)16位进制,4个一组,每段之间由“:”隔开,共有8段,其中如果有连续性的"0" 如fe80:0000:0000:0000:0000:0000:0000:de4f

修改机器的DNS服务器

IPv4DNS服务器能根据IP修改,但是我不知道华为DNS服务器的IP。

ns1.huaweicloud-dns.com:中国大陆各区域DNS地址 ns1.huaweicloud-dns.cn:中国大陆各区域DNS地址 ns1.huaweicloud-dns.net:除中国大陆之外国家或地区DNS地址 ns1.huaweicloud-dns.org:除中国大陆之外国家或地区DNS地址

Further Study

动态公网IP,可以使用nat123动态域名解析解决公网IP不固定的问题

node6配置没用80端口,不能直接IP访问

遇到的问题

还是不能直接访问shaojiemike.top(TTL为300,需要时间?) 第二天可以了。

chivier 建议

https://ngx.hk/2019/01/27/%E4%BD%BF%E7%94%A8acme-sh%E4%B8%8E%E9%98%BF%E9%87%8C%E4%BA%91dns%E7%AD%BE%E5%8F%91lets-encrypt%E7%9A%84%E5%85%8D%E8%B4%B9%E6%95%B0%E5%AD%97%E8%AF%81%E4%B9%A6.html

我用阿里的域名,用这个教程,把我的IP挂到阿里DNS上面去了

参考文献

https://support.huaweicloud.com/qs-dns/dns_qs_0002.html

https://blog.csdn.net/meitesiluyuan/article/details/58588216

https://blog.csdn.net/bennny/article/details/86319768?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs

https://blog.csdn.net/bennny/article/details/82988260

域名价格对比

SSHForward

导言

服务器没网,姜师兄说可以ssh转发网络请求到本地windows

四类ssh转发

SSH 端口转发自然需要 SSH 连接,而SSH 连接是有方向的,从 SSH Client 到 SSH Server 。

而我们所要访问的应用也是有方向的,应用连接的方向也是从应用的 Client 端连接到应用的 Server 端。比如需要我们要访问Internet上的Web站点时,Http应用的方向就是从我们自己这台主机(Client)到远处的Web Server。

本地转发Local Forward

如果SSH连接和应用的连接这两个连接的方向一致,那我们就说它是本地转发。

ssh -L [bind_address:]port:host:hostport <SSH hostname>
ssh -L 3333:127.0.0.1:2333 -vN -f -l shaojiemike 222.195.72.218
debug1: Local connections to LOCALHOST:3333 forwarded to remote address(222.195.72.218) 127.0.0.1:2333

本地转发在本地这台机器上监听一个端口,然后所有访问这个端口的数据都会通过ssh 隧道传输到远端的对应端口上。命令中的 host 和 <SSH hostname> 可以是不同的主机。

远程转发Remote Forward

如果SSH连接和应用的连接这两个连接的方向不同,那我们就说它是远程转发。

ssh -R [bind_address:]port:host:hostport <SSH hostname>

远程转发与本地转发正好相反,打开ssh隧道以后,在远端服务器监听一个端口,所有访问远端服务器指定端口都会通过隧道传输到本地的对应端口上,下面是例子。

动态转发

  • TODO

X转发

  • TODO

实用参数

-C:压缩数据传输。
-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-N :不执行脚本或命令,通常与-f连用。
-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。
-f      Requests ssh to go to background just before command execution.  This is useful if ssh is going to ask for passwords or
             passphrases, but the user wants it in the background.  This implies -n.  The recommended way to start X11 programs at a remote
             site is with something like ssh -f host xterm.

             If the ExitOnForwardFailure configuration option is set to "yes", then a client started with -f will wait for all remote port
             forwards to be successfully established before placing itself in the background.

常见例子

将发往本机的80端口访问转发到174.139.9.66的8080端口

ssh -C -f -N -g -L 80:174.139.9.66:8080 [email protected]

将发往174.139.9.66的8080访问转发到本机的80端口

ssh -C -f -N -g -R 80:174.139.9.66:8080 [email protected]

使用远程管理服务器上的MySQL

ssh -C -f -N -g -L 80:174.139.9.66:8080 [email protected]

一次同时映射多个端口

ssh -L 8888:www.host.com:80 -L 110:mail.host.com:110 -L    25:mail.host.com:25 user@host -N  

反向隧道技术:节假日需要回公司加班。但是公司是内网,使用NAT,所以没办法连回去。

  1. 先在公司机器(LAN_ip)上执行
    ssh -NfR 2222:localhost:22 home_ip
    
    -R : 建立反向连接 将 home_ip port转发
  2. 然后到home_ip上面 ssh localhost -p 2222

端口转发:本机不允许访问www.xxx.com这个网站,但是远程主机(remote_ip)可以。

ssh -f -N -L 31609:www.xxx.com:80 user@remote_ip

现在我们就可以在本地打开 http://localhost:31609 访问www.xxx.com了。

SOCKS代理:本机不允许访问某些网站,但是远程主机(remote_ip)可以,并且公司没有组织你连接remote_ip。

ssh -NfD 8888 user@remote_ip

现在在浏览器socks 5 proxy设置为localhost:8888,所有之前无法访问的网站现在都可以访问了。

假设本地主机A提供了HTTP服务,主机B无网络

ssh -fNgR 80:localhost:80 root@host-B

通过访问 http://host-B 来访问主机A上的HTTP服务了。

如果没有主机B的root账号,则只能远程转发到1024以后的端口号

ssh -fNgR 8080:localhost:80 lige@host-B

通过访问http://host-B:8080 来访问主机A上的HTTP服务

假设本地主机A无网络,主机B提供了HTTP服务

但是由于怕防火墙屏蔽,而不想直接访问

ssh -fNgL 80:localhost:80 root@host-B

ssh_config设置技巧

客户端

.ssh/config修改

Host *
    ControlPersist yes
    ControlMaster auto
    ControlPath /tmp/sshcontrol-%C
    ControlPersist 1d
    # 以上四条配合使用,实现多条ssh连接共享,而且保持1天内ssh存在。再次执行ssh命令几乎秒连
    TCPKeepAlive=yes
    # 发送空TCP包来保持连接,但是可能被防火墙过滤
    ServerAliveInterval 30
    # 表示每隔多少秒(30秒),从客户端向服务器发送一次心跳(alive检测)
    # 心跳具体格式: debug1: client_input_global_request: rtype [email protected] want_reply 1
    ServerAliveCountMax 240 
    # 表示服务端多少次(240次)心跳无响应后, 客户端才会认为与服务器到SSH链接已经断开,然后断开连接。

    Port 443

Host *
   ForwardAgent yes
   # 可以讓本地的 SSH Key 在遠端 Server 上進行轉送,也就是经过跳板机Server1,使用本地key访问Server2,不用把key传到Server1上导致泄露
   # 虽然Server1不会获得key,但是可以使用key。所以该选项不宜用于Host *,应该只添加您信任的服务器以及打算用于代理转发的服务器。
   # 注意跳板机需要设置允许代理转发, /etc/ssh/sshd_config 将AllowAgentForwarding的值设置为yes, 并重启服务
   AddKeysToAgent yes
   ForwardX11 yes
   ForwardX11Trusted yes
   Compression yes
   # 压缩,加快数据传输速度

服务器端

更改ssh服务器的配置文件/etc/ssh/sshd_config

ClientAliveInterval 60
# 默认是0,不发送
ClientAliveCountMax 3

原理同上 重启ssh服务以使配置生效

systemctl restart sshd

服务器端如何将端口绑定到外部地址上

我们可以把这个映射的端口绑定在0.0.0.0的接口上,方法是加上参数-b 0.0.0.0。

同时修改SSH服务器端 /etc/sshd_configGatewayPorts noGatewayPorts yes来打开它。

自动重连/保持长时间连接

Host *
  ServerAliveInterval 60

检查隧道状态

  1. netstat
  2. ps
  3. autossh

实践

服务器网站端口转发到本地

ssh -L 6006:127.0.0.1:6006 -N -f -l acsacom snode6.swangeese.fun

给服务器提供网络代理

本地网络代理到服务器

ssh -fNgR 7333:127.0.0.1:7890 [email protected]
ssh -fNgR 7333:127.0.0.1:80 [email protected]
  • 7333数字不要太小,以免冲突。
  • 7890是本地clash端口,80也可以。
.bashrc
#YJH proxy
export proxy_addr=localhost
export proxy_http_port=7890
export proxy_socks_port=7890
function set_proxy() {
      export http_proxy=http://$proxy_addr:$proxy_http_port #如果使用git 不行,这两个http和https改成socks5就行
      export https_proxy=http://$proxy_addr:$proxy_http_port
      git config --global https.proxy http://$proxy_addr:$proxy_http_port
      git config --global https.proxy https://$proxy_addr:$proxy_http_port
      export all_proxy=socks5://$proxy_addr:$proxy_socks_port
      export no_proxy=127.0.0.1,.huawei.com,localhost,local,.local
}
function unset_proxy() {
      git config --global --unset http.proxy
      git config --global --unset https.proxy
      unset http_proxy
      unset https_proxy
      unset all_proxy
}
function test_proxy() {
      curl -v -x http://$proxy_addr:$proxy_http_port https://www.google.com | egrep 'HTTP/(2|1.1) 200'
      # socks5h://$proxy_addr:$proxy_socks_port
}
# set_proxy # 如果要登陆时默认启用代理则取消注释这句
服务器git下载设置代理端口
export http_proxy=http://127.0.0.1:7333
# wget 正常使用
export all_proxy=socks5://127.0.0.1:7333
# git 正常使用
unset http_proxy
unset all_proxy

特定软件也需要设置代理

git config --global https.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

git config --global --unset http.proxy
git config --global --unset https.proxy
mac上转发失败

首先看看Windows上的输出

Mac的错误

在完成windows所有输出后,

  1. 首先调用了shell
  2. 错误
debug1: Remote: Forwarding listen address "localhost" overridden by server GatewayPorts
debug1: remote forward failure for: listen 7890, connect 127.0.0.1:7890
Warning: remote port forwarding failed for listen port 7890

猜测应该是已经端口占用了

netstat -nat |grep -i '7233'

解决办法一:换端口

首先,可以选择换端口,换成 7233

sudo lsof -i TCP:7233
1. 进程验证 2. wget验证 3. curl验证(原本会走WLT)

redirecting to http://wlt.ustc.edu.cn

解决办法二:Kill掉相关进程
sudo lsof -i TCP:7890
sudo kill -9 process_id_1 process_id_2 process_id_3
sudo ps -ef | grep 'nc -X' | grep -v grep | awk '{print $2}' | sudo xargs -r kill -9
sudo lsof -i TCP:7233 |grep shaojiemike| awk '{print $2}'|sudo xargs -r kill -9

  • FD: File Descriptor number of
  • 不敢kill师兄的,然后发现并没有用,寄。kill掉师兄的之后就行了,嘻嘻~~ 师兄不要怪我

参考文献

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

https://blog.csdn.net/xyyangkun/article/details/7025854?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

RAM

RAM

RAM (random access memory), 中文名叫随机存储器, 随机是什么意思呢? 意思是, 给定一个地址, 可以立即访问到数据(访问时间和位置无关)

而不像咱们熟悉的磁带, 知道最后一首歌在最后的位置, 却没法直接一下子跳到磁带的最后部门, 所以磁带不是随机存储器, 而是顺序存储器。

SRAM vs DRAM

SRAM (Static Random Access Memory) and DRAM (Dynamic Random Access Memory)

BASIS FOR COMPARISON SRAM DRAM
Speed Faster Slower
Size Small Large
Cost Expensive Cheap
Used in Cache memory Main memory
Density Less dense Highly dense
Construction Complex and uses transistors and latches. Simple and uses capacitors and very few transistors.
Single block of memory requires 6 transistors Only one transistor.
Charge leakage property Not present Present hence require power refresh circuitry
Power consumption Low High

基本电路实现

左边的是静态的,右边的是dynamic的。

SRAM,保存一个bit需要6个晶体管。

DRAM 存储一个bit的DRAM只需要一个电容和一个晶体管。 DRAM的数据实际上是存在于电容里面的, 电容会有电的泄露, 损失状态, 故需要对电容状态进行保持和刷新处理, 以维持持久状态, 而这是需要时间的, 所以就慢了。而且很耗电。

DRAM内存实现的存储是通过晶体管实现的一个电路 门控D锁存器,其更简化的形式是 SR锁存器,电路结构如下图:

但是bank矩阵的一个点(基本存储单元, 寻址能力, 内存颗粒(Chip)的位宽)一般是8bit.

8个 门控D锁存器 组成内存的基本(最小)存储单元,他们共用一个行/列 地址线。在一次寻址中每个内存颗粒返回 8 bit的数据 8个内存可以同时寻址 最终得到的是 8 * 8(8个chip) = 64 bit 的连续数据 也就是说 内存一次寻址可以读取 8 Byte 的数据,这里也能说明在C语言中的内存不齐的原因(减少寻址次数)。

SDRAM

现在的DRAM一般都是SDRAM,即Synchronous Dynamic Random Access Memory,同步且能自由指定地址进行数据读写。其结构一般由许多个bank组成并利用以达到自由寻址。

chip的多 Bank 的设计允许向每个Bank 发出不同的命令。同一时刻,不同的bank可以处理不同的行地址。当然,不可能同时读取或者写入多个 Bank,因为读写通道只有 1 个,当时可以在 1 个 Bank 读写时,向另一个 Bank 发出 Precharge 或者 Active 命令。

DRAM基本术语

名词 解释
dual inline memory modules (DIMMs). 每个channel可以连接多个DIMM,每个DIMM与多个DRAM chip相联
Cell: 颗粒中的一个数据存储单元叫做一个Cell,由一个电容和一个N沟道MOSFET组成。
chip: 一个颗粒叫做一个chip。一根内存的内存带宽是64bit,如果是单面就是8个8bit颗粒,如果是双面,那就是16个4bit的颗粒分别在两面,不算ECC颗粒(Error Checking and Correcting错误校验芯片)。
Bank 每个chip有4~8个bank,每个bank可以看作一个行列矩阵,每个点存储4~16bit的信息。
Rank: 内存PCB的一面所有颗粒叫做一个rank,目前在Unbuffered台式机内存上,通常一面是8个颗粒,所以单面内存就是1个rank,8个chip
寻址空间 是指内存总共可以存储多少个地址,比如一个2G DDR3内存 ,每个Rank是2/1=1G ,每个内存颗粒是1/8=128M 每个Bank是 128/8=16M 16M = 2^4 * 2^10 = 2^14 也就是地址线需要14根 正对应地址线的 A0-A13

Overview

CRC Error Detection

DDR4 chip 内bank & bank group设计

每個DRAM裏有4個bank選取位元可用來選取多達16個bank單元:兩個bank位址位元(BA0、BA1),和兩個bank群組位元(BG0、BG1)。當在同一個bank群組中存取不同的bank單元時會有另外的時間限制;在不同的bank群組中,存取一個bank比以往的更快。

另外,3個晶片層選取信號(C0、C1、C2),允許最多8個堆疊式晶片層封裝於一塊DRAM封裝上。這可以更有效地充當3個以上的bank單元選取位元,使選取總數達到7(可以定位128個bank單元)。

内存控制器(Memory Controller)

我们知道cache的存在导致访存是按照cache line(32或者64字节)来进行的,但是内存一般只会处理连续64bits数据,导致需要控制器和总线分多周期(memory burst概念)来实现cache的更新。

SNB CPU的内存控制器可以实现和处理:

  • 对读写操作命令进行有效地重新分配,以使得行地址激活命中率最大化(如果重复激活一个已经处于激活状态的行地址,那就是RAS激活命令未命中)
  • 比如说open page policy情况下,row hit就不用发activate命令,直接发column就可以了,
  • 比如说两个地址连续mem_read命令,中间插有其他命令的时候是不是要乱序执行

reduction in DRAM row buffer conflicts

[^1]

CPU集成内存控制器技术

AMD公司提高CPU与内存性能的一项技术,将北桥的内存控制器集成到CPU,使得原来CPU-北桥-内存三方传输数据的过程简化成CPU与内存之间的单向传输技术,降低了延迟。

DRAM 寻址模式

  • 列数一般是1024,主要是因为功耗的原因

以2GB DDR3为例子,编码如上,

  1. 确定好rank面后
  2. 对该rank面的所有内存颗粒(chip),使用相同的Bank层 、行地址 、列地址 这些选址信息后,各自产生8bits数据,总共64bits
  3. 单个 Bank 只有一个 Sense Amps,只能缓存单个行的内容。因此在激活某行后,访问同一 Bank 不同行之前,需要使用 PRECHARGE 命令关闭(de-activate)当前激活行。PRECHARGE 命令好比关上当前打开的文件柜抽屉,命令发出后当前 Sense Amps 中缓存的行会被写回原地址。

Burst

DDR中的Burst(突发长度)指的是,当收到了一个读请求和地址后,会连续取出这个地址周围几个连续地址上的数据,具体取几个就叫BL(Burst Length),是可以随地址信号配置的。(原因是:次次等待Address和Enable信号再读写有些浪费时间)

Burst的实现是通过Prefetch完成的,Prefetch就是一次从Array上取出多bit的过程,而Burst则是根据规则发送这些预取的数据的过程。

Burst Length(BL)是可以配置的,比如8Bit预取可以支持BL8的Burst或者BC4(Burst Length Chopped)的Burst。

Prefetch (Request Pipelining)

Prefetch数量也是前几代DDR的主要区别。

红框标出的DRAM的核心频率基本不变,传输速度的提高是通过增加prefetch的位数(黄框)来做到的。

DDR 有两项主要的技术 2n-prefetch (2 倍预取),和 DLL (延迟锁相环)。这在之后历代 DDR 协议中都是一脉相承的。所谓 2 倍预取,即在一个时钟的上升边沿读取当前地址单元的数据,并同时读取下一个地址单元的数据。

例如同样是100MHz的核心频率
  1. SDRAM一周期取一次,它和内存控制器的速度是100MT/s(这里的T是传输的意思);
  2. DDR上升沿下降沿各取一次,相当于2次prefetch,Bus速度变成200;
  3. DDR2变成4n prefetch,Bus speed变成400;
  4. DDR3,照此办理,8n带来了800。DDR3/4 采用的是 8 倍预取,8n-prefetch,同时也设计有 DLL。

DDR3

DDRx的核心频率一直维持在100Mhz到266MHz的水平上,每代速度的提升都是靠倍增Prefetch的个数来达到的。

DDR4

DDR4和DDR3一样,只有8n的prefetch,但为了提升前端Front End的总线速度,不得不在核心频率上动起了手脚:

核心频率不在徘徊在100~266HMz,直接200起跳,到400Mhz。因为核心频率提高,8bit的prefetch不变,总线速度才得以提升。

除此之外,引入了Bank Group。DDR4 新增了4 個Bank Group 資料組的設計,各個Bank Group具備獨立啟動操作讀、寫等動作特性,Bank Group 資料組可套用多工的觀念來想像,亦可解釋為DDR4 在同一時脈工作周期內,至多可以處理4 筆資料,效率明顯好過於DDR3。

为什么DDR4不能进一步提高prefetch到16n的问题

我们都知道memory控制器实际上很大程度受cache操纵。X86 cache line 64B,而每次操作是64bit。所以一个cache line刷新是通过联系8个读操作实现的,这8个操作不是分别完成,而是一次burst操作,所以BL(burst line)是8。BL8的64B cache line只需要64个Bytes,如果prefetch是16,DIMM那边所有chip会准备

64 X 16 = 128 Byte

的数据。多出来的数据就变成了垃圾数据,空耗能而对速度帮助不大,所以DDR4到16 prefetch。

DDR5 为啥变成16n prefetch呢?

是不是CPU的cache line变长了呢?并不是,CPU的cache line还是64B,变化的是DIMM端增加了个新东西:Sub Channel。

Sub Channel,顾名思义,就是子通道,它是把DDR5 DIMM的72bit位宽(包括64bit数据+8bit ECC码)拆分成两个40bit的sub Channel。包括32bit的数据,+8bit的ECC:

这两个sub channel是相互独立的,既可以独立使用,也可以如前面合并使用。所以prefetch就可以提高到16n,当然也支持8n。

聪明的设计让DDR5在同样3200MT/s的传输率上,可以提高带宽1.36倍。再加上可以支持更高的频率,才能保证DDR5的传输速度。

DDR5的prefetch是16,那么怎么解决我们前面提到的cache line大小的问题呢?DDR5采取的方式是减少DIMM data lane的数量,从64个data lane降低到32个data lane,从而继续保持64 Byte的cache line大小。

访存时序知识

CL-tRCD-tRP-tRAS-CR

名词 解释
CL(CAS Latency) 列信号延迟: 在读取命令发出后到数据读出到IO接口的间隔时间(时钟周期数)
tCAS(tCL?) 实际延迟时间tCAS(ns)=(CAS*2000)/内存等效频率
tRAS(Row Active Time) 行地址激活的时间。从一个行地址预充电之后,从激活到寻址再到读取完成所经过的整个时间 tRCD+tCL
tRCD(Read-to-Column Delay) 行地址激活(Active)命令发出之后,内存对行地址的操作所需要的时间。内存中某一行地址被激活时,我们称它为“open page”
tRCDR(Read-to-Column Command Delay) 行地址激活(Active)命令发出之后,内存对行地址的读操作所需要的时间。
tRCDW(Write-to-Column Command Delay) 行地址激活(Active)命令发出之后,内存对行地址的写操作所需要的时间。
nWR (Write Recovery Time) time delay between successive write commands to the same row.
tRP(RAS Precharge Time) 前一个行地址操作完成并在行地址关闭(page close)命令发出之后,准备对同一个bank中下一个行地址进行Active操作需要的时间(在对同一个bank的多个不同的行地址进行操作时影响才大)
CR(Command Rate) 首命令延迟。是指从选定bank之后到可以发出行地址激活命令所经过的时间。(如果CPU所需要的数据都在内存的一个行地址上,就不需要进行重复多次的bank选择,CR的影响就很小)
Tccd is the minimum amount of time between column operations
tRPRE The minimum pulse width of READ preamble
tRPST The minimum pulse width of READ postamble

XMP时序都没有介绍

不同的DRAM。随着频率提升,CL周期也同步提升,但是最后算出来的CL延迟时间却差不多(5~15ns)。其实当下memory的频率宽度过剩,integrated memory controller (IMC)才是瓶颈

在列信号之前还有行信号

如何连续两次访问同一行的不同列,则之间不需要额外的切换行信号。

参考文献

https://zhuanlan.zhihu.com/p/52272990

https://fantiq.github.io/2019/03/14/%E5%86%85%E5%AD%98-%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86/

https://people.inf.ethz.ch/omutlu/pub/stfm_micro07.pdf

https://www.micron.com/-/media/client/global/documents/products/data-sheet/dram/ddr4/4gb_ddr4_dram_2e0d.pdf

https://zhuanlan.zhihu.com/p/420994258