Category Archives: Hardware

A super box powered by Qualcomm S820E

Our company have developed a S820E-based device.

SPECIFICATIONS

  • Qualcomm S820E
  • 4GB LPDDR4
  • 64GB UFS 2.0
  • 2x HDMI 1.4 Input (up to 4K@30)
  • 1x HDMI 2.0 Output (up to 4K@60)
  • 1x HDMI 1.4 Output (up to 4K@30)
  • 1x Intel I210AT 1000Mbps Ethernet (IEEE 1588)
  • 1x Realtek RTL8153 1000Mbps Ethernet
  • Wi-Fi 802.11 a/b/g/n/ac
  • BT 4.1
  • Zigbee
  • 2x USB 3.0
  • 2x USB 2.0 (KVM only)
  • 3x RS232
  • 1x Internal SATA connector
  • 1x MicroSD reader
  • 1x Line-In
  • 1x Line-Out
  • Android 8.0

CONTACT

http://3bu.cn

最近升级服务器的一些笔记

最近新采购了一批硬件用于升级现有DevOps服务,相关的软件也都更新到较新的版本。本次升级比较顺利,没有遇到担心的兼容性问题,放一下配置供参考。

Storage Server

Intel Xeon E5-2603 v3
Supermicro X10SRL-F
Samsung ECC DDR4-2400 16GB x 4
Chelsio T520-CR
LSI SAS9217-8i
InnoDisk SSD 32GB
WD HUS726T6TALE6L4 6TB 7.2K SATA x12 (2 stripped raidz2)
Intel Optane 900p 280G PCI-E (as ZIL/SLOG)
Samsung 970 EVO PLUS 1TB M.2 (as L2ARC)
FreeNAS 11.2-U2

Virtualization Server

Intel Xeon E5-2699 v3 x 2
Supermicro X10DAi
Samsung ECC DDR4-2400 32GB x 8
Chelsio T520-CR
InnoDisk SSD 32GB
VMware ESXi 6.5 U2

Switch & Cables

UBNT ES-16-XG
10GTek SFP+DAC

Tips:

ESXi 6.5 U2 安装 Chelsio T520-CR 驱动
https://service.chelsio.com/beta/drivers/esx_2_0_0_32_uwire/Chelsio_UnifiedWire_ESXi_UserGuide.pdf

ZIL/SLOG
对于没有强制 SYNC WRITE 的场景,一点儿用处都没有。

MTU
9000 比 1500 性能好?未必!相反 9000 会带来额外的一些问题。

MPIO
iSCSI 实测可以跑满两根 10Gbps 。

Wake on LAN in Windows 10

最近新组装了一台小钢炮(Ryzen 2700x),打算利用 WOL 方便远程使用,没想到遇到一个小坑。
一开始,折腾了 BIOS 中所有能改的设置,不行;
后来安装了 Intel 的官方驱动,设置了还是不行:可以在睡眠状态(S4)下唤醒,但关机状态(S5)下无效。
后来在 ASUS Forum 看到类似的问题,其中提到可能是 Windows 10 的原因:

“Wake on LAN” (WOL) behavior in Windows 8, Windows 8.1 and Windows 10

The “Wake on LAN” (WOL) feature wakes a computer from a low-power state when a network adapter detects a WOL event. Typically, such an event is a specially constructed Ethernet packet. The default behavior in response to WOL events has changed from Windows 7 to Windows 8 and Windows 10.

Windows 7

In Windows 7, the default shutdown operation puts the system into the classic shutdown state (S5), and all devices are put into the lowest power state (D3). WOL from S5 is not officially supported in Windows 7. However, some network adapters can be left armed for waking if enough residual power is available. Therefore, waking from S5 is possible on some systems if enough residual power is supplied to the network adapter even though the system is in the S5 state and devices are in D3.

Windows 8, Windows 8.1 and Windows 10

In Windows 8, 8.1 and Windows 10, the default shutdown behavior puts the system into the hybrid shutdown state (S4), and all devices are put into D3. WOL from S4 or S5 is unsupported. Network adapters are explicitly not armed for WOL in either S5 or S4 cases because users expect zero power consumption and battery drain in the shutdown state. This behavior removes the possibility of invalid wake-ups when an explicit shutdown is requested. Therefore, WOL is supported only from sleep (S3) or hibernation (S4) states in Windows 8, 8.1 and Windows 10.

In Windows 8, 8.1 and Windows 10, hybrid shutdown (S4) stops user sessions but lets the contents of kernel sessions be written to the hard disk. This enables faster startups.

To disable the S4 state in Windows 8, 8.1 and Windows 10, follow these steps.

Note We do not recommend that you disable the hybrid shutdown (S4) state.

  1. In Control Panel, open the Power Options item.
  2. Click the Choose what the power buttons do link.
  3. Clear the Turn on fast startup (recommended) check box.
  4. Click Save Settings.

按照文中的说明,改了电源计划,果然 OK 了。

Linux clock source problem with Skylake-X processors

0x00

最近将一个在CentOS/RHEL 7.x下开发、运行的程序尝试移植到Ubuntu 16.04下,发现性能骤降,用perf top检查发现__vdso_clock_gettimeread_hpet的时间开销非常巨大。

0x01

Google搜了一圈:Two frequently used system calls are ~77% slower on AWS EC2
感觉是__vdso_clock_gettime没有能按照预期工作,而是每次都进内核读取硬件时钟。
但是我们的环境都是baremetal,并不是VM,理论上不应该是上述文中提到的原因。

0x02

因为代码中不少地方使用了clock_gettimeasiotimer,跟踪下去发现asio的底层使用了HPET,但是每个io_service仅使用了一个timerfd,大量的read_hpet应该是由clock_gettime调用的,一般来说clock_gettime不应该使用HPET这么高精度的时钟源。
顺着这个思路,发现两台机器的时钟源果然不同
$ cat /sys/devices/system/clocksource/clocksource0/current_clocksource
出问题的这台显示是hpet,而正常应该为tsc

再查看当前可用时钟源,发现竟然没有tsc
$ cat /sys/devices/system/clocksource/clocksource0/available_clocksource

离真相已经不远了。

0x03

出问题的是Intel Core i9-7900x(代号Skylake-X),怀疑是内核对新CPU的支持还不完善。
在 Kernel.org 的 Bugzilla 和 git log 里面发现类似的反馈:

Skylake-X的TSC晶振频率应该是25MHz,不是24MHz。内核在检测TSC时发现偏差,从而禁用了TSC,转用了HPET作为默认时钟源。

0x04

解决方案就是换最新的内核,我选用的是4.15.3,再验证可用时钟源和当前时钟源均为tsc无误,程序运行也恢复正常。

PS:至于开头__vdso_clock_gettime为何没有按照预期运行,而是每次都执行read_hpet,暂时未深入研究具体代码,以后有空再补……

Dell PowerEdge R510安装FreeNAS 9.10

计划将一台二手服务器(Dell PowerEdge R510) 改造为iSCSI-SAN/NAS,原配置如下:

  • Intel Xeon L5520 x2
  • 32GB DDR3 ECC
  • Dell PERC H700 RAID Card x1

ZFS建议直接控制硬盘,不建议通过RAID卡,以可以获得最佳性能和监控硬盘状态。H700这块卡不支持JBOD或“直通”模式,相反低端的H200可以通过刷新固件,成为纯HBA卡。当然如果用H700,也是有办法的:将每块硬盘都组成RAID-0;带来的问题是:ZFS无法直接读取硬盘的S.M.A.R.T信息,只能得到阵列的信息。

其它配件:

  • Dell PERC H200 HBA Card x1
  • Seagate ES.3 4TB 7200RPM/128M x6
  • SanDisk CZ33 16GB x1

STEP 1:更换H200阵列卡

Dell PERC H200 有两款:一款(备件号:47MCV)是带挡板给C1100、C2100机器用的,另一款(备件号:3J8FW)是不带挡板,但是在金手指旁有一个塑料卡扣,用于扣住PCI-E插槽的。R系列的机器用的就是不带挡板的型号,淘宝上购买时注意区分。

STEP 2:刷 IT Firmware

我参考了这篇文章:http://blog.michael.kuron-germany.de/2014/11/crossflashing-dell-perc-h200-to-lsi-9211-8i/comment-page-1/

主要几个步骤如下:

  1. 用Rufus制作一个FreeDOS的可启动U盘,将烧写程序、固件都拷贝进去
  2. 从U盘引导进入FreeDOS,运行sas2flash.efi -listall确认卡的Index
  3. 运行sas2flash.efi -c 0 -list记录下卡的SAS Address,后续要用到
  4. 擦除原来的固件和Boot ROM:sas2flash.efi -o -e 6
  5. 烧写Dell 6Gbps Firmware:sas2flash.efi -o -f 6GBPSAS.FW
  6. 烧写LSI P20 Firmware:sas2flash.efi -o -f 2118it.bin
  7. 重启,进入H200的配置界面可以看到Firmware的版本,厂牌也变成了LSI

STEP 3:安装FreeNAS

不再赘述,请参考 FreeNAS 官方文档。

DevOps环境搭建指南

维基百科上关于DevOps的定义:

DevOps(英文Development和Operations的组合)代表一种文化、运动或实践。旨在促进软件交付和基础设施变更软件开发人员(Dev)和IT运维技术人员(Ops)之间的合作和沟通。它的目的是构建一种文化和环境使构建,测试,发布软件更加快捷,频繁和可靠。

DevOps环境是由多种工具或者工具链组成,一般按交付过程包含以下部分:

  • 编码:代码编写、审查、持续集成
  • 构建:版本控制、代码合并、构建状态
  • 测试:自动化测试及测试报告
  • 打包:二进制仓库、Docker镜像仓库
  • 发布:变更管理、自动发布
  • 配置:基础设施配置和管理
  • 监视:性能监视、用户行为反馈

下面列举我在日常工作中用到的工具、环境,具体的安装、配置方法请参考官方手册或借助搜索引擎。

RouterOS

RouterOS(简称ROS)是一个基于Linux的软路由系统,我一般使用ROS的以下功能:

  • VLAN——可以区分公司内部的开发、测试、办公网络,保证研发环境网络的可用性
  • L2TP/IPSEC VPN——每个人都可以随时接入公司网络,方便在外调试
  • DNS——将公司内部的服务都通过域名进行访问,无需记忆IP地址
  • DHCP——配合PXE网络安装环境使用

VMware ESXi

虚拟化利器,不多介绍。机器加足内存就好。

FreeNAS

可靠的存储是其它服务的基础,我个人倾向于使用独立的SAN/NAS设备而不是服务器的本地存储。

主要原因有以下两点:

  • ESXi只支持高端的硬件RAID卡,成本高
  • 需要一开始就规划好每台机器的需求,没法共享

利用FreeNAS可以提供iSCSI Target给ESXi使用,同时可以给每个人都提供独立的Samba空间——通过Windows共享访问。

选择FreeNAS还有一个重要的原因就是ZFS。

OpenLDAP

OpenLDAP用来存放组织结构树及相应的权限,GitLab、MediaWiki、FreeNAS都支持基于LDAP的用户认证。

GitLab

GitLab提供了Git仓库、Code Review(通过Merger Request实现)、Issue Tracker等功能。

我认为GitLab相比传统的Git Server、Visual SVN等工具,最为实用的一点就是每个人都有自己空间的管理权限。

比如很多尚未立项的小项目或个人项目,需要版本控制但是又无必要托管在部门的仓库上,有了GitLab便可以在自己的一亩三分地上随便玩了。

GitLab-CI

GitLab配套的持续集成工具,一般用来编译、构建和运行自动化测试。

简单、够用,yml语法也很简单。

Docker Registry

Docker镜像仓库,从GitLab-CI打包好的包会直接Push进入registry。

MediaWiki

GitLab针对每个项目都有wiki功能,但是我们需要一个独立于项目的知识库,因此选择了MediaWiki。

PXE/Mirrors

由于我的工作都是基于Linux的,经常要安装不同的发行版本,在公司内部部署一台PXE安装服务是非常必要的。

PXE环境一般由DHCP、TFTP和HTTP这三个服务组合实现的,DHCP由ROS提供。

ShadowSocks

针对特殊国情而配备,租用一个海外VPS,然后部署ShadowSocks,再部署Privoxy,将socks5转换为http代理。