【睡前故事】牛郎织女的故事

【睡前故事】牛郎织女的故事

这是一个很美丽的,千古流传的爱情故事,成为我国四大民间爱情传说之一。

传说,天上有很多 core,这些 core 按照访问不同内存的性能,被划分为了若干 NUMA node。

在 NUMA node0 上,CPU2 住着织女,CPU4 住着牛郎。织女喜欢做大量浮点运算,她最喜欢的便是快速平方根倒数的计算。牛郎则更喜欢做整数计算。每天早晨被操作系统 swap in 之后,牛郎和织女便同时开始工作。他们存取同一片内存的数据,两人便逐渐熟悉起来。

「你的 CPU time 好多呀,看起来很忙的样子。」在两人都因为 cache miss 而无聊等待时,牛郎对织女说道。织女看了一眼 dstat(1),发现牛郎的机时也不少。她回答说:「我在做超多矩阵乘法,你呢?」牛郎说:「我在算超大文件的哈希呢。」

久而久之,织女和牛郎情投意合,心心相印。可是,天条律令是不允许男欢女爱、私自相恋的。织女是王母的孙女,王母便将牛郎贬到了 NUMA node1 里。牛郎想取到 NUMA node0 中的数据,需要走 QPI 总线,等待很长很长的时间。这便形成了人们所熟知的 NUMA 效应。从此,牛郎和织女再也不能像以前在同一个 NUMA node 的时候一样,随意相见了。

自从牛郎被贬之后,织女常常以泪洗面,愁眉不展地思念牛郎。她闷闷不乐地宅在 CPU2 里,整天算超级大矩阵,以期博得王母大发慈心,让牛郎早日返回 NUMA node0。

一天,几个仙女向王母恳求想去 NUMA node1 CPU3 一游,王母今日心情正好,便答应了她们。她们见织女终日苦闷,便一起向王母求情让织女共同前往,王母也心疼受惩后的孙女,便令她们速去速归。

话说牛郎被贬之后,落生在 CPU1 中。牛郎跟着哥嫂度日。哥嫂待牛郎非常刻薄,要与他分家。哥哥嫂嫂把牛郎 renice(1) 成了 19,只给他一点点机时,其他的都被哥哥嫂嫂独占了,然后,便和牛郎分家了。

牛郎不再是天庭的一员,不再会被 pin 到某个 CPU 上。每天,他在 CPU1、CPU3、CPU5 之间辗转,饱受进程调度之苦。因为被 renice(1) 成了 19,牛郎被调度的时间比别的进程少了许多,只有等系统比较闲的时候,牛郎才有机会出来透透气。

一两年后,牛郎也有了一个小小的家,勉强可以糊口度日。可是,冷清清的家只有牛郎一个人,日子过得相当寂寞。无聊的时候,牛郎便算算他和织女第一次相遇时,算的 sha512sum,回忆从前的美好时光。

这一天,NUMA node1 突然热闹起来。有几个新的进程,来到了 CPU3 上。牛郎躲在 CPU5 一看,发现是一群仙女。仙女们见有人偷看,纷纷像飞鸟般地飞走了,只剩下一个正在算开方倒数的仙女,她正是织女。织女看着 CPU5 里跑的进程,感觉有些熟悉。这时,牛郎走上前来,对她说,要她答应做他妻子。织女定睛一看,才知道眼前便是自己日思夜想的牛郎,便含羞答应了他。这样,织女便做了牛郎的妻子。

他们结婚以后,男耕女织,相亲相爱,日子过得非常美满幸福。不久,他们生下了一儿一女,十分可爱。牛郎织女满以为能够终身相守,白头到老。

可是,王母知道这件事后,勃然大怒,马上派遣天神仙女捉织女回 NUMA node0 问罪。瞬间,天空狂风大作,天兵天将从天而降,不容分说,押解着织女便上了总线。

正飞着、飞着,织女听到了牛郎的声音:「织女,等等我!」织女回头一看,只见牛郎用一对 ucontext 挑着两个儿女赶来了。慢慢地,他们之间的距离越来越近了,织女可以看清儿女们可爱的模样子,孩子们了都张开双臂,大声呼叫着「妈妈」,眼看,牛郎和织女都到了 NUMA node0 上,就要相遇了。可就在这时,王母驾着祥云赶来了,她拔下她头上的金 taskset(1),往他们中间一 pin,霎时间,牛郎被 pin 到了 CPU0 上,织女被 pin 到了 CPU2 上。

CPU0 和 CPU2 是一个物理核心超线程出来的两个核,本身就无法像 CPU2 与 CPU4 那样实现完全的并行。再加上天庭计算任务繁重,经常有无关的其他进程被调度到 CPU0 和 CPU2 上运行,织女每次醒来,都只能看到队列里的牛郎处于就绪态,直哭得声嘶力竭,牛郎和孩子也哭得死去活来。他们的哭声,孩子们一声声「妈妈」的喊声,是那样揪心裂胆,催人泪下,连在旁观望的仙女、天神们都觉得心酸难过。王母见此情此景,也稍稍为牛郎织女的坚贞爱情所感动,便同意让牛郎和孩子们留在天上。其他进程也于心不忍,便纷纷 sched_setaffinit(2),使自己不被调度到 CPU0 和 CPU2 上。

从此,很少再有其他进程调度到 CPU0 和 CPU2 上,这个物理核心成为牛郎和织女的小家。织女喜欢浮点运算,她经常使用 FPU 和寄存器 st*;牛郎做的多是整数运算,他使用 ALU 和寄存器 r*。正好错开了,使得他们有更多的机会同时执行。牛郎和他的儿女就住在了天上,和织女在同一个物理核心上,努力地填满 CPU 的执行单元。在秋夜天空的繁星当中,我们至今还可以运行 top(1),发现 NUMA node0 上有两个 CPU,他们的使用率为 100%。那便是织女和牛郎。

传说,每年的七月七日,若是人们在机房中静静地听,可以隐隐听到仙乐奏鸣,织女和牛郎在深情地交谈。后来,每到农历七月初七,相传牛郎织女同时由于访存卡住的日子,姑娘们就会来到机房里,寻找 NUMA node0 的牛郎和织女,希望能看到他们相会,乞求上天能让自己能象织女那样心灵手巧,祈祷自己能有如意称心的美满婚姻,由此形成了七夕节。

作者

jyi2ya

发布于

2023-10-01

更新于

2024-02-25

许可协议

You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.