My W520 workstation have been at rest for quite a while and I decide to re-install an Archbang.

Installation

A very nice and clear instruction, also here and here.

Making an installation stick

1
$ dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx && sync

Fcitx

  • Append this to .config/openbox/autostart to auto start fcitx at launch:
1
(sleep 2 && fcitx) &
  • fcitx in KDE programms
    According to Wiki, I need to append the following to .xinitrc since my VM is Slim launched
1
2
3
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

However it does not work until I append it to .xprofile.

  • To input Chinese in Emacs
1
env LC_CTYPE="zh_CN.UTF-8" emacs

EMACS

Dependencies for auto-complete:

1
yaourt -S clang

Dropbox

I have to change tint2 Alpha from 100 to 99, in order to get the System Tray icon.

Fonts

Although I have not tried, but it looks promising.

1
yaourt -S cairo-ubuntu fontconfig-ubuntu freetype2-ubuntu ttf-ubuntu-font-family

ROS

fix /etc/hosts

by appending 127.0.0.1 localhost

essential packages

1
yaourt -S ros-indigo-xacro ros-indigo-joint-state-publisher ros-indigo-robot-state-publisher ros-indigo-diagnostic-updater

wstool

1
yaourt -S python2-dateutil

解压镜像

1
xz -d ****.img.xz

烧写镜像

1
sudo dd if=ubuntu-14.04.1lts-robotics-odroid-xu3-20141228.img of=/dev/sdc bs=4M && sync

修改源

1
2
3
4
echo "deb http://ports.ubuntu.com/ trusty main restricted universe multiverse" > /etc/apt/sources.list
echo "deb http://ports.ubuntu.com/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list

必要程序

1
2
3
apt-get -y install software-properties-common u-boot-tools isc-dhcp-client ubuntu-minimal ssh
apt-get -y install screen wireless-tools iw curl libncurses5-dev cpufrequtils rcs aptitude make bc lzop man-db ntp usbutils pciutils lsof most sysfsutils linux-firmware linux-firmware-nonfree
apt-get -y install python-software-properties

必要 ROS 包:

1
sudo apt-fast install ros-indigo-tf ros-indigo-diagnostic-updater ros-indigo-image-transport ros-indigo-cv-bridge

配置无线

nanomsg

nanomsg 是一个 c 语言的 socket 库,实现了好几种通信模式,包括:

  • PAIR - simple one-to-one communication
  • BUS - simple many-to-many communication
  • REQREP - allows to build clusters of stateless services to process user requests
  • PUBSUB - distributes messages to large sets of interested subscribers
  • PIPELINE - aggregates messages from multiple sources and load balances them among many destinations
  • SURVEY - allows to query state of multiple applications in a single go

其中, BUS, REQREP, PUBSUB 是 ROS 常见的形式。

这里 有相应的例程,不过感觉不是很对,比如说里面 REQREP 的例子,可以考虑直接看 API 文档,也包含简单的例子。

zeromq

查看中断分配

1
cat /proc/interrupts

典型输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
           CPU0       CPU1       CPU2       CPU3
29: 18801666 16647304 15917474 14185149 GIC arch_timer
30: 0 0 0 0 GIC arch_timer
32: 0 0 0 0 GIC timer0
51: 0 0 0 0 GIC mmc1
52: 0 0 0 0 GIC tegra-otg, tegra-udc
53: 0 0 0 0 GIC pmc_usb_phy_wake_isr
55: 0 0 0 0 GIC tegra-sata
63: 68639 0 0 0 GIC mmc0
69: 142835 265551 0 0 GIC serial-tegra.1

71: 3748708 0 0 0 GIC tegra-xhci:usb1

97: 9260863 0 0 0 GIC host_syncpt

122: 602 0 0 0 GIC serial

131: 483307 0 0 0 GIC PCIe-MSI

642: 477100 0 0 0 PCIe-MSI eth3
643: 6232 0 0 0 PCIe-MSI iwlwifi

其中 serial-tegra.1 对应 TK1 上 /dev/ttyTHS1 的中断。第一列代表的是中断号,每个 CPU 下面的数字代表接收到的中断数。

默认情况下,系统用 CPU0 去收所有的中断。处理中断是非常耗时的任务,而系统又认为所有 CPU 的计算能力是一致的。当 CPU0 用了 30% 的资源去处理中断时,那别的 CPU 也只能发挥 70% 的计算性能,所以需要合理分配中断。

SMP/Processor affinity

Affinity 指的是任务与处理器的亲和度。如果我们一直用处理器 X 运行任务 Y,两者 affineAffine 的情况下,处理器的 cache 里会存有任务部分的 memory,所以效率是比较高的。

和一般进程相反,对中断来说,affine 到某个处理器则会导致低效。因为中断程序往往非常小,将中断程序存在 CPU 里不能改善 cache hits,而多个中断会长期占用 CPU。调度器会认为所有核都和这个中断处理核一样忙,导致其它 CPU 实际上很空闲,但是缺用不上。

APIC (Advanced Programmable Interrupt Controller)

APIC 负责分配中断,默认将所有中断交给 CPU0 处理。APIC 具有好几种传输 (delivery) 及 (destination) 模式,包括:

  • physical
  • logical
  • fixed
  • low priority

能够将中断绑到任意核上 (其实只能绑到前八个核),还能做负载均衡。

使用

  • 对某些系统来说,可能需要先停掉 irqbalance 服务
1
# /etc/init.d/irqbalance stop

对每一个中断号, /proc/irq/ 下面都有一个对应的目录,下面有一个 smp_affinity 文件,通过修改这个文件,能够改变该中断绑定的核。

文件里存的是一个 16 进制的 bitmask。哪一位为 1,就用哪个核。

比如说我们要让 CPU1 处理 TK1 的串口中断,可以这样:

1
sudo bash -c 'echo 2 > /proc/irq/69/smp_affinity'

理论上,f 能够使四个核平均处理中断。但是,实际结果还要看 APIC 是否处于 physical destination mode 及 low priority delivery mode,如果是的话才可以,可惜 TK1 不是。

  • 在内核里关掉 CONFIG_HOTPLUG_CPU 可以使 APIC 正常工作

ubuntu 可以安装一个叫 irqbalance 的东西,说不定可以解决