Category Archives: 杂记

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

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,暂时未深入研究具体代码,以后有空再补……

宽带升级到100M之后……

前两天电信客服来电说可以把家里的宽带免费升级到100M,在外面想用家里的设备测一下实际的上下行速度。家里 7×24 小时开机的设备有一台 Mikrotik RB751G-2HnD 和一台 Buffalo LS-WXL (重刷了 Debian Wheezy 7.9),那就看看SpeedTest有没有 Linux Console 版本的吧。

果然在GitHub 上找到一个:https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
# wget https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
# chmod +x speedtest_cli.py
# ./speedtest_cli.py

执行下,结果还不错
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from China Telecom (121.231.9.15)...
Selecting best server based on latency...
Hosted by CHINA UNICOM JIANGSU COMPANY (Nanjing) [117.84 km]: 7.761 ms
Testing download speed........................................
Download: 93.06 Mbit/s
Testing upload speed..................................................
Upload: 4.23 Mbit/s

Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from China Telecom (49.89.188.61)...
Selecting best server based on latency...
Hosted by China Telecom JiangSu Branch (Nanjing) [198.70 km]: 11.072 ms
Testing download speed........................................
Download: 102.80 Mbit/s
Testing upload speed..................................................
Upload: 3.79 Mbit/s

再测一下 BT 下载速度,NAS 上用 transmission 下Fedora-24-Server 的镜像,速度完全只能达到3~4MB/s,dstat 一看,CPU 竟然满载……

再看一下 ROS 的 CPU Usage 竟然也达到 60~70%

看来是时候考虑新一波的设备升级计划了~~~

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 官方文档。