菜菜博士

博士在网络的家

准备上 3950x

听闻秒天秒低秒 i9 的 3950x 要在9月份发售了, 陪伴我多年的 i7-4790 终于可以退役了. 本来是打算9月进行退役的, 但是亲戚家有孩子今年开学需要用电脑了, 于是我就把电脑送给她了. 这样, 在9 月份到来前, 我就需要准备好一台备用电脑, 一台能随时升级到 3950x 的电脑. 主板呢, 肯定是选 X570 芯片组的, 这样日后只需要换 cpu 即可. 选主板花了不少精力...

NAS 换 Gentoo

freenas 使用了一阵子,发现了几个严重的问题 软件严重缺乏 插件需要使用 jails 而 jails 的网络居然不能使用宿主网络必须桥接 桥接导致 mlx 驱动禁用网卡 tcp offload engine 不支持 RDMA,atom cpu 性能弱,无法跑满万兆带宽。 实际上很少使用 web 管理界面,多数情况下还是 ssh 上去直接敲命令 性能差 要...

无盘PC

自从上了万兆,把PC上的硬盘拆到nas上,让PC变成无盘的计划就开始执行了。真正的无盘需要 PXE,然而,同时也意味着现有的 NVMe SSD 成了摆设,因为上文提到的,我的 nas 因为主板关系, pcie 通道不足,无法插 M.2 了。所以现有的 ssd 还是继续在主板上服役。M2 只是一个非常小的接口, ssd 插上主板后和主板融为一体了,所以,姑且就算是主板自带的存储好了,如果只有 ...

NAS 的 pcie 短缺问题

万兆网卡到货后,迫不及待的插上主板开机。 当时就注意到了一个问题,怎么有一个 SATA 控制器变成了 2port controller 了。也就是说只有6个 sata 口了。 然后和 pc 开始 iperf 测速。发现速度居然只有刚刚超过 2Gbps!!! 什么鬼? 然后把 pc 上的那个卡换了个插槽,换到 pcie x16 的显卡插槽上了。原来是我这个卡放到了最后一个 pcie 2....

10Gbps 家庭云存储

在万兆内网达成后, 终于到了最重要的环节了,就是搭建一台支持万兆网络访问的 NAS。 首先问自己一个最重要的问题:我家里有矿吗? 显然,没有,所以,一切都要以够用为目标,而不追求高大上。 所以,显然这次万兆够用为主,量力而行。 第一个选择就是主板。主板我花了超过一周的时间去寻找,对比各种方案。 当时的方案有3个: 方案1:集成 Atom C3558 的主板。有ASRock和超微两...

多WAN平衡

曾经我也搞了两条宽带,见 使用邻居的CMCC网络 。 然后利用路由器的loadbalance就可以使用多条线路了。 但是,问题恰恰在这里。效果并不好。因为2条宽带并不是一样容量的,对同一目标的访问速度也不尽相同。所以退而求次,选择了只把某些 cmcc 访问速度更快的目标通过 邻居网络出去。 虽然我换了一个城市,然后选择了CMCC,也没有破解邻居的电信宽带wifi密码。但是多年前的失败经历还...

内网万兆达成

千兆用几年了? 从我拥有的第一台电脑起,主板自带以太网口就是千兆的。十几年过去了,主板自带网口依旧千兆。 千兆网和 1366x768 一样,都是业界毒瘤,停滞在一个“够用” 的幻想里止步不前。 为了打破这个幻想,我最终决定,将家里的内网升级为 10G 光以太网。 为啥用光纤呢? 主要是我的 PC 所在的位置,距离 86网络端口面板有数米的距离,中间如果使用网线会非常的碍事。 所以我买...

入DN42坑

近来把 家和公司三处地方的网络(2个家,乡下老家嘛)通过 tunnel 手段连接到了一起, 三个地方的 LAN 分配不同的私网网段,因此配置好路由表后,三处内网的机器就可以互相访问了。 最初我使用的是添加静态路由,但是因为 vpn 是使用的点对点互联,而不是首先集中连到一个转发服务器上,所以需要配置路由表的路由器数量达到了4台,比较麻烦,关键是期间我还修改过私网使用的网段,结果每台路由器都...

拿到了移动宽带的公网IP

闻觉 CMCC 手握 HKIX 宝剑, 想必连 HK 节点的 VPN 访问世界一定更快。世界的一部分一般在 HK 本地也有 CDN 节点,因此多数时候并不需要再从 HK 去世界绕一圈。于是买新房后,就办理了免费的CMCC宽带。不再向恶势力CT低头了。 美中不足的是 CMCC 手头 ip 资源紧张,早早部署了 CGNAT,再经过猫一层 NAT,路由器又一层 NAT,访问个局域网都要3层NAT...

折腾 NAT64 实现 ipv6 only 内网

一直以来,虽然启用了 ipv6, 但是都是以 Dual Stack 模式运行。 你不知道,是服务器端不支持 ipv6 呢,还是客户端不支持,亦或二者皆有之。 而且Dual Stack虽然解决了互联问题,但是看起来非常的丑陋,多个协议一起跑什么的,才不要呢! 于是就有了搞 IPv6 Only 的想法。为了解决互联问题,还需要一台翻译的设备执行 NAT64。 所谓 NAT64 就是让一台网...

IPv6 这几天的体验

如果只是家里折腾上了 ipv6 那不算 ipv6。网络这种东西一定要互联互通才算。最近把公司的猫也折腾了一下下,上了 ipv6。 于是发现,在公司可以无缝访问家里的设备了。全部都在公网,无需端口映射之类的东西了。当然,家里也没有公网ipv4地址,映射了也白搭。 有了 ipv6 后,发现所有的机器都突然没有了 NAT 墙。那一道无形中把整个世界割裂的墙消失了,只要知道 ip 地址,所有的设...

中国移动原生IPv6配置

上峰拍了桌子, 要求 2018 年底之前商用 ipv6. 移动响应非常积极,已经可以用了. ipv6 带来的第一个好处就是削除了NAT, 对万恶的私网ip地址说再见! 在继续之前,首先讲下,ipv6 同 ipv4 在配置上的不同。 对于家庭宽带,ipv4 是 pppoe 拨号的时候自动配置的。isp 给且仅给一个 ipv4 地址。 如果有多台设备需要上网,就需要使用一种叫 NAT 的技术...

高并发服务器的静态内存分配策略

asio 的 async_accept 函数在高并发的时候,会发生遗漏 accept 的情况。根本原因在于,async_accept 回调的时候,已经 监听的socket已经没有执行 accept 操作了。 解决的办法就是投递多个 async_accept. asio 的 async_* 系列 函数通常只能投递一次,多次投递会发生未定义行为。async_accept 是为数不多的例外。 通...

挖矿与创新

所谓挖矿,就是寻找一个随机数,是的区块头部和随机数结合后的 sha256 数值小于一个特定的目标数字。 对于哪一个随机数能找到答案,没有人知道,也没有捷径,唯一的做法,就是一个一个的去试。 比特币诞生也有9年了,9 年来,不断的有人尝试寻找捷径,但最终都没有找到,只能依靠暴力穷举随机数。 只要尝试的次数足够多,参与尝试的矿工足够多,大约每十分钟总会有一个幸运儿找到这样的随机数。 当他找到...

换用wireguard

之前把家里网络 重新折腾 了一下, 用的是 走socks5 代理的 tcp 协议 openvpn. socks5 代理由 shadowsocks 提供. 不过, 最近偶然在 LWN 发现了 wireguard 这个新型 VPN, 于是盘算着用起来看看效果. 结果一不小心, 发现了vyatta-wireguard, 这个可以让我的路由器也能用 wireguard! 于是按照它的文档配置到了...

UPS和直流供电的思考

为了在网络断电后还能使用, 我曾经给路由器配置 12v 直流 UPS. 但是, 随着我的网络扩展, 出现了更多的设备, 而且这些设备不再是12v电压供电的了, 而是出现了 24v 和 54v 供电的设备. 同时, 12v 供电的设备也增加了, 原来的 UPS 容量就显得捉襟见肘了. 我继续要对 UPS 进行一次升级. 一劳永逸的解决方式, 其实是直接购买普通的 220v 逆变输出的 UPS...

网络重新配置

一直以来, 我用的都是基于 ss-redir 和 ipset + iptables 透明代理方式的科学上网. 但是 iptables 方式的上网, 其实还是不如 ChinaRoute 配合 VPN 来的爽. 因为只有 TCP 连接能被透明代理出去, UDP 和 ICMP 协议统统不能. 但是 openvpn 这种协议实在是太过招摇, 所以早就被方校长盯上了. 不可不可. 后来, 我想到了...

Immutable, RCU and Transnational Container

在编写并发程序的时候,经常要面对共享数据结构的保护问题。 虽然 C++ 提供的 RAII 实现的各种 guard lock 模式,早就让“忘记解锁” 导致的死锁成为历史。但是,锁带来的性能损耗依然是我们不得不面对的问题。 为了避免锁带来的开销,使用“无锁” 的数据结构似乎是个好主意。 然而事情的发展总是出乎所有人的意料。现代的多核CPU随着核数的越来越高,核与核之间的通信开销也变得越来越大...

C++ 是最好的编程语言

好的语言是怎么来的? 有人说, 是设计出来的, 有人说, 是抄出来的. newbie 说, 是实践来的. 什么是实践呢? 实践, 就是摸石头过河, 吸收合适的, 抛弃不合适的. 这不就是进化吗? 正如好的物种是进化来的一样, 好的语言也是进化来的. 物种的进化, 首先是要适应已有的环境, 然后才是展望未来, 设法适应未来的环境. 即使某些功能器官已经不再需要, 仍然保留着进化的痕迹. ...

不停机迁移

设计一套系统的时候, 最初的数据库结构总是不能适应未来业务的发展变化。经常需要调整数据库的表结构以适应新的业务需求或调整逻辑结构。 为此,需要让系统能支持不停机迁移。不停机迁移,用户0感知的,完成数据库升级。要做到这点,首先要做到程序本身的热更新。 如果是 php 之类的脚本语言编写的服务器端程序,热更新实现起来倒也轻松容易。但是既然是我这个c++佬出来写文章, 一定是关注的c++编写的...