Photo credit: my mother, 2014

Hi,欢迎来到 卡瓦邦噶!我是 laixintao,现在生活在新加坡。我的工作是 SRE,喜欢在终端完成大部分工作。我从 2013 年开始写这个博客,写的内容很广泛,运维的方法论,编程的思考,工作的感悟,除了技术内容之外,还会分享一些读书感想,旅行游记,电影和音乐等。欢迎留下你的评论。

声明:本博客内容仅代表本人观点,和我的雇主无关。本博客承诺不含有 AI 生成的内容,所有内容未加说明均为博主原创,一经发布自动进入公有领域,本人放弃所有权利。转载无需本人同意。但是依然建议在转载的时候留下本博客的链接,因为这里的很多内容在发布之后会还会不断地继续更新和追加内容。 Not By AI

去伊豆

在高楼林立的东京呆够了,我们去了南边的伊豆半岛。

一如东京城市的交通一样,去伊豆的路线也有很多,也很复杂。为了省点脑筋,我们在一个 JR 车站,在一个热心的工作人员帮助下,买了舞女号列车的票(也叫踊子号,日语:踊り子/おどりこ Odoriko),这个列车的名字可能也是从川端康成的小说,《伊豆的舞娘》里面取来的吧。价钱不便宜,折合 230 多人民币一个人,好处是换乘少,速度快一些。

在列车上时而能看到一些海景。大约 2 个小时就到了伊豆高原。我们这一天的终点是下田市。所以在等待下一班列车的时间,打算去填饱肚子。

伊豆的特产是金目鲷鱼,我们在附近找了一家饭店,走路过去。

一路上非常安静,出了偶尔路过的汽车,一点声音都没有。天很蓝,植物绿油油的。

伊豆高原的路

一会就到了我们找的饭店。店家看起来很忙,门口已经排了很多人。等到一个服务员,我说我们想在这里吃饭,他拿出来记录排队的板子问我们,几个人?我说 2 个。他又问,几条狗?我惊讶,我说我没有狗。他说,哦不好意思,我们这家是和狗一起吃的饭店,如果没有狗请去隔壁那一家。这时候我才发现在外面排队的食客都带着狗。

有狗才能来吃的饭店

不过也好,隔壁这家没有人在排队。

欣点了鲷鱼的套餐,我点了一份带刺身的套餐。鲷鱼有一些甜,挺好吃。

鲷鱼定食

回到车站的路上,碰到了另一辆舞女号。

我们接下来乘坐的电车是伊豆急行线,这条线路的电车有两辆是特殊装饰的列车。一辆叫做金目绸鱼号,另一辆叫黑船电车。代表了伊豆的特色。鲷鱼是伊豆的特产,比较好理解。黑船电车呢?查了一下,发现特别有意思。我甚至不能理解。

简单来说,江户时代的日本和清朝一样,也是闭关锁国的政策。美国为了发展亚洲捕鲸事业,想要日本开放国门,德川幕府不同意。后来,美国人又来了,开着四艘涂成黑色船舰,载 63 门大炮,要求德川幕府打开国门,一直闭关锁国的日本国明都吓傻了,无计可施,只能签下屈辱的、不平等的《神奈川条约》。但是这个黑船事件,给日本埋下了希望改变的种子,最终促使了明治维新。今天,下田市将这个黑船事件看作是值得纪念的,自豪的事情。所以在下田可以看到非常多黑船事件的影子,黑船电车就是其一。

所以说,就是被迫打开国门,但是下田市将其看作是自豪的事情,大办黑船电车,黑船游览,黑船祭,必须要让世界知道这段历史!?

黑船电车是观海列车,座位不是朝向列车行进的方向,而是朝向窗户。景致非常特别。

观海列车
站台的一位老人

来到下田市,一出站台就看到满大街的日本国旗和美国国旗并肩挂在路边。非常奇特。

街上的美国国旗和日本国旗

在街上逛了一会,我们打算租自行车骑一骑。找到了一家店,里面是一位年纪很大的老爷爷。一点英文都不懂。我拿出 Google 翻译,他拿着放大镜,我一句他一句的,沟通起来,障碍竟然不是很大。

我说,我想租自行车。

他笑着说,你想去哪里?

海边吧。

我的自行车没有电,海边的路上上下下,不好骑。(说的也是,伊豆半岛是个高原,起起伏伏。)

我说,那去下田公园吧。

他笑着说,那里没什么可看的。

那去哪里呢?

就在城市转转吧。

于是老爷爷帮我们两个人挑好了自行车,还扶住车让我们上去试试高度,没问题了之后,我付给他钱,他说,回来再给钱。

骑上车之后,我们随便在地图上找了一个看起来是海港的地方,超那里骑过去。歪打正着,一路上风景非常美,而且很安静,除了鸟叫什么声音都听不到。

在路上看到了黑船。黑船游览在下田市已经成了一项观光活动
骑行的路上看到的海边

骑到尽头,发现这个位置是一个海洋馆。于是开始折返。

回到自行车的店,店里只有一个日本老奶奶了,这次不需要用 Google 翻译,她就明白我们是还车的。出门的时候,我用仅回的几句日语说谢谢,老奶奶回谢谢并且鞠躬,我说谢谢,她又鞠躬说谢谢。(出来之后,欣说你说谢谢她就鞠躬,直到你不说了。我这时才发现,早知道就不说那么多了)

归还自行车之后,我们打算去坐公交车去海滩。伊豆的公交车很少,一个小时一趟,有的甚至要两个小时。

不过等待是值得的,到了海边之后,发现这里的海滩好美。

白浜神社
去冲浪的人
另一个一千多年历史的神社

晚上住的民宿比较偏僻,所以打算在附近吃了晚饭再回去。找餐厅费了一番劲,好像很多餐厅都没有什么人,有一些甚至门都没开,像是倒闭了,很冷清。最后找到一个像是家庭餐厅的地方吃了拉面,味道不错,很温馨的馆子。

吃饱之后,坐火车去民宿。从车站出来,发现周围居然黑的伸手不见五指!连一个路灯都没有,非常吓人。开着手电筒一路小跑到了民宿。

这晚住的民宿是日本传统的房间,跟多啦A梦里面的一样。

住的民宿

睡了一个好觉,第二天的天气不是很好,我们趁着雨还没下下来,先去了大室山。

大室山是传说中新海诚《你的名字》里面那个山的取景地,很漂亮,和富士山一样是一个近乎完美的圆锥形。

大室山上

然后去了山脚下的仙人掌动物园。

这个动物园很赞,之前去过的动物园,动物们都在睡觉,要么就是懒洋洋的。这个动物园很多动物就在路上走,甚至可以伸手摸。

细尾獴
水豚

水豚可太可爱了,在路上走着走着就自己定住了,心事重重的样子。

可爱的水豚吓得小孩哇哇哭

动物园地图有一条路上画着孔雀,这孔雀可太有意思了,它就在地图画的这条路上来回走。见人多的时候,就从容地走到人群中间开屏,还会转几圈让所有人都看到,真像一个专业的艺术家!

孔雀

逛到一半开始下大雨了,雨比天气预报的还要大。我们算准了下一班公交车,坐车回到了伊豆高原,然后搭舞女号回到了东京。

 

去东京

一直想去日本旅行, 这一次终于成行了。日本的第一站是首都东京。

东京!(其实是在介绍皇居历史啦,但是放在这里可以搞笑)

签证办的非常顺利,在网上预约好时间,然后携带指定的资料去大使馆就可以了,不用事先在网上填写表格。比澳大利亚简单太多。费用是 60 新币一人,五年有效,相比于澳大利亚 220 新币一年,简直便宜太多。

去东京还发生了一件有趣的事。我们下了飞机第一站去筑地市场吃早饭,结果在那里居然遇到了飞机上坐在我旁边小哥。我跟他打招呼,他也认出来我,然后他旁边的朋友惊掉了下巴——what?(你在东京居然有熟人?)

东京给我们的第一印象是干净。大街上一尘不染,几乎看不到垃圾。(在游客聚集的地方,比如筑地市场,还是有一些垃圾的。)而且很神奇的是,我在整个城市都没见过垃圾桶,只有在某些商业场所,商家自己安置的垃圾桶,所有人都自己拿着垃圾。没有垃圾桶,城市不是应该更脏吗?不知道为何东京反而这么干净。有天早上买了一杯咖啡,结果一直没见到垃圾桶,拿着喝完的纸杯拿了一整天。

我发现我的博客宽度太小,导致我自豪的很多照片贴在这里显得小气。读者如果碰到喜欢的照片可以点击打开大图慢慢欣赏。(也许改换一个博客主题了?)

东京地铁

东京的市民总是行色匆匆,在地铁站总是能看到人们在着急赶着什么。在工作日,地铁里面的上班族打扮都非常精致,男士都穿着西装,女士都妆容精致。

我们第一站去了新宿,新宿站有超过200个出口,可能是世界上最大的地铁站。

东京的地铁可太值得一说了。这是下飞机之后带给我们的第一个冲击。东京的地铁非常复杂:

出口多而且不连通。像上海和新加坡这种城市,地铁网也很发达,很多换乘站有好几条线。在换乘站,你只要从任何一个入口进入地铁站,就可以根据指示去任何一条线路。我们以为东京也是这样,结果在秋叶原站从一个入口进去,找日比谷线,转了好半天,才意识到不同线路之间的地铁站是不连通的!即使它们都叫做秋叶原站。有时候甚至同站换乘都要刷卡出去,然后再从另一个入口进。所以,后面还是乖乖按照 Google 地图来走吧,如果 Google 让你去一个入口,即使在途中遇到了更近的入口,也不要选择这个近的入口。究其原因,是因为东京的铁路是由不同公司运营的,同一家公司的线路可能共享入口。

地铁站设计复杂。很多列车的两个反方向站台是只有一条路过去的,很容易坐反方向。不过我摸索出一个窍门,东京的地铁每一个线路都有编号,比如 G,JR,JT,等等,每一个站都有标号,比如 G9,G10,G11. 如果你要去一个地方,先查看目的地的编号,比如 G8,然后看当前位置,比如是 G4,那么找到站台之后,确认方向是数字变大的方向,就对了。

计价方式复杂。东京铁路有各种 Pass,即周游券,通票。但是简单算了一下,就放弃了。因为 Pass 的种类繁多,有的不包括这家公司,有的不包括那家公司。而且正常坐地铁,买 Pass 的话很难回本,如果能回本,很可能旅行计划做的有问题,哈哈。我们是全程刷西瓜卡。

铁路系统和地铁系统。如果去周边城市,就要用到铁路系统,这个又很复杂了,分成 Local train,急行线,特急线,票价区分度很高,可能快 20min 就贵出来好多。票可能要买两种,一种乘车券和一种指定席券。我们去机场的时候只刷了西瓜卡,结果上车发现全是指定席,只好在车上补票。还有一个有趣的事情,是我们去东京站坐火车,火车站和地铁站都是东京站。我们从地铁到了之后,按照指示找到了我们要找的站台(非常难找,问了工作人员才找到),等火车的时候,欣突然意识到,我们根本没用到购买的火车票,一定是哪里不对。于是又找了一个工作人员问了一下,才明白,我们需要找一个出口,刷西瓜卡出去,然后再刷火车票进入。晕!

电梯很少。这一点也很不好,虽然可能是有电梯的,但是我们 90% 的时间都在走楼梯,因为指示牌都是指向楼梯路线的,找直梯无疑是给自己增加难度。上海,新加坡的地铁就很少需要人走楼梯,扶梯和直梯都在显眼的位置。说起来,在东京没有见过轮椅,可能东京的无障碍设施也不是很好。

东京市区

日本的相机行业非常发达,目前单反微单头部三家,佳能,尼康,索尼都是日本企业(网上看到有人说日本二战点错了技能树,研究瞄具去了,不知真假,但是挺有趣)。日本人对相机使用又比较爱惜(无从考证,个人认为所有的摄影师都对相机比较爱惜)。所以在日本能看到很多中古(二手)相机店。折合汇率,日本可能是购买相机最好的地方,而且很多热门款式,在中国可能都买不到了,日本还有货。

北村写真就是一整栋大楼,一层是二手镜头,一层是机身设备。还有一层很有趣,都是过时的 CCD 和胶片机,花 5 新币就能买到一台还能工作的相机。很多镜头由于缺陷,也买几十新币的。

北村写真店
街头的咖啡店,但是没什么人光顾,我觉得如果能提供一个垃圾桶,顾客肯定会很多!
筑地市场的一个店,不知道为什么要放两只蛙蛙
筑地市场的一家寿司店
东京的街道,琳琅满目的广告牌是东京的签名
东京塔上的夜景

哈哈,不要小看了这张照片,这是我在东京塔上没有三脚架的情况下,手持 4s,才得到的这张图片。其实是发现了一个绝妙的方法,只要把镜头按在玻璃上,即能克服反光,又能保持稳定。

皇居

皇居的导览很赞,有中文,需要提前一个月预约,当天去排队也可以,我去的时候发现大部分人好像是当天排队进来的。导览团队非常专业,介绍的内容也很有趣。

我们的导览,很有趣,讲很多笑话,中文说的很好
皇居
皇居

新宿

歌舞伎町一番街,白天路过了一下
新宿御苑,蒲公英
新宿御苑
新宿御苑
新宿御苑

涩谷 – 原宿

涩谷这天可太有趣了。先是早上,在明治神宫,遇到了有人结婚,于是观摩了日本的传统婚礼。然后在原宿的大街上,见到了很多警察,整条街都是警察,阵势很大的样子,往前走,看到了貌似是某种日本右翼势力在抗议(真是可恶)。

涩谷 sky 上面的景色
涩谷 sky
Google 气派的办公室

涩谷 sky 也挺有趣,就是一个很高的办公楼顶楼的景观,上面很漂亮。有意思的是它的售票,官网提前一个月开卖,在涩谷 sky 看日落很美,但是一定要提前一个月抢票,这个时段的票基本上放出来就没了。日落时段的票,官方推荐的购票渠道,比如 Klook,booking等,都没有了,但是——淘宝居然可以买得到?是的,淘宝无良商家在官方一开卖就全买下来了,然后用 2-3 倍的价格再卖给我们。简直太可恶了!

其实官方的角度讲,票卖光了是好事,对吧?但是他们居然没有坐视不管。他们会检查票是不是官方发送的邮件,是不是二次转发或者截图,一个账号购买的5张票如果分开入场会被拒绝,等等,以此来打击黄牛。

其实购票实名认证不就好了?

明治神宫
明治神宫的大树
明治神宫的婚礼
严阵以待的警察

上野

上野公园,「环游世界第一站」,不知道现在到哪里了?
鸭子船,本来没计划做,偶尔看到了,居然才 7 新币,就当上去休息一下了。 (结果因为要炫耀一下速度蹬的腿都酸了)
某种会飞又会游泳可能也会走路的三栖鸟儿
上野区域有很多鞋店
晴空塔
虽然垃圾桶没有,但是这种自动售卖机倒是随处可见。口渴了,只要随便找一个看起来会有售卖机的胡同,就能发现售卖机。
仲见世商店街
浅草寺
浅草寺

富士山

这一天在飞猪上买了一个一天的包车团,从东京出发,去了很多网红景点,一路比较赶,我很痛苦。团上的姑娘都是下车拍照,上车修图,乐此不疲。事实证明我报错团(选错路线)了。

其中,日川时计店就是一个卖表的店,店门口的街道能看到富士山而已。lawson 就是一个便利店,店后面是富士山。我不理解为什么要来打卡,可能是被小红书忽悠过来的?来的大部分是中国人。看富士山的话,去一个公园(我觉得大石公园比较好)就够了,真没必要去这些“网红”景点打卡奔波。

东京站
下吉田,富士山下的小村子
下吉田的火车道
新仓山浅间公园在山上,要爬上去。这是爬到半山腰拍的。
Arakurayama Sengen Park 新仓山浅间公园,网红景点
富士山
lawson 便利店,著名打卡景点。但是这个 lawson 据说要拆了,因为游客在马路上拍照,挺危险的。lawson估计也没有怨言,因为大家都是在这里拍照,不进去消费,关了就关了。
日川时计店旁边的一条小溪

日川时计店的照片就不放了,很多游客在马路上拍照,特别安置了一个工作人员维持秩序,场面很混乱。

忍野八海

忍野是富士山下的一个小村子,八海就是八个池子。类似于中国的古镇景点。

但是其中这个池子真值得说一说,拍照又拍不出来当时的效果。照片的水看起来很浅,其实有 8 米深,但是水非常清澈,比游泳池还清。除了波纹,几乎看不到水的存在,只有鱼和鱼的影子,鱼就像在这里飞翔一样。有一种恐怖的幽静。非常震撼。我觉得现在的数码设备记录不下来这种感觉,得亲身看了才知道。

忍野村
大石公园

我们这一天运气不错,能看到富士山。富士山很多时候是被云遮挡住的,如果不是晴天,那么云都见不到,都是雾。这个网站可以查看富士山能见度的预报:什么时候去看富士山?

镰仓

镰仓高校前,又是一个我不理解的景点,普普通通的电车,普普通通的学校。可能是因为我不看灌篮高手吧。
镰仓的海
海边钓鱼的父子
还是大海
在镰仓拍到的 1969 年 GTO
狗(很显然)
街道
在去江之岛的桥上拍到的,天气好的时候应该能看到富士山

热海花火大会

这次的旅行以花火大会结尾,非常完美。举办方做的很好,活动的信息非常周全,甚至烟花放 5000 发都标记清楚。新闻上说现场人很多,但是我感觉不至于能到上新闻的程度。我们的司机很专业,让我们去人流少的地方上车,全程安排很好。

花火大会的场面很震撼,居然有笑脸烟花,地球仪烟花这种东西,不知道怎么做到的。最后的节目空中尼加拉瓜大瀑布,非常震撼。只可惜我第一次使用相机的 B 门,很不熟练,以及没有三脚架,只能拍出下面的样子了。

购物

现在的东京是购物天堂。一个是日元汇率大跌,相当于是全国物价对于外国人来说都便宜了。另一个是退税方便,一般的城市是机场退税,但是东京大部分商店可以直接用退税价格购物,甚至超市都可以退税,相当于全国都是免税店,只要拿出护照就可以了。但是消耗品用退税价格购买的话,不能在日本消费。退税购买之后,电源会用一个专用的透明袋子封起来,不能拆开使用。东京的商业很发达,商场林立,像优衣库,MUJI,这种商场都是整栋楼整栋楼开,很好逛。

优衣库

东京的食堂

可能是因为寸土寸金,我们去过的食堂都非常小。很多食堂的设计,都是开放式厨房,食客围着厨房而坐,可以边吃边看厨师的制作过程。有种温馨的感觉。

不过也是因为都比较小吧,大部分的食堂都需要排队的,甚至有很多,如果不是提前预约,都吃不上。幸运的是,我们是在五一之前去的,所以在工作日的非午餐饭餐高峰时间去,不排队也能吃到很多不错的。很多餐厅午餐和晚餐是不一样的价格,相同的餐厅相同的食物,晚餐的价格可能是午餐的两倍。

一些有趣的餐厅和图片。

这家是在涩谷玩的时候在附近随便找的一家牛肉饭。菜单基本上只有牛肉一种,只是你要选择多少肉而已,类似于食其家。厨师的主要工作就是烤肉和切肉。

ステーキライスの店 センタービーフ渋谷宮益坂店

地址:Japan, 〒150-0002 Tokyo, Shibuya City, Shibuya, 1 Chome−12−24, 707 Shibuya, 1階

围着厨房而坐
我点的 mega size 正在制作中
开吃。很自不量力的点了最大份 Mega size,结果吃撑了。

下面这家是在神田的一番街随便找的一家,因为住在附近,回去的时间玩了,就在这里吃了。这是一家烧鸟店,也是厨师在中间烤,食客围坐,但是很干净,餐厅有合理的排烟系统,食客和厨师之间也有一层玻璃,所以完全没有烧烤的烟。厨师会时不时看你吃的进度,等你快吃完的时候马上烤下一串,让你吃到的都是新鲜的刚烤好的。

烤的很嫩,一点烤黑的地方都没有,像是水浴烹调的牛排一样,非常鲜美。新加坡也有烧鸟,但是新加坡的是事先烤好的,完全比不上现烤的。我们点的套餐,有鸡肉,鸡肝等等,非常下酒。

店名:Tori no Kakehashi

地址:Japan, 〒101-0044 Tokyo, Chiyoda City, Kajicho, 2 Chome−11−19 神田日新ビル1B

随便拍了一张前菜

后来又在附近找了一家居酒屋。这家更有意思,自己加装了楼梯,将一个小餐厅隔成两层。我们就坐着二楼很小的一个地方边喝边吃。这家的烧鸟不贵,店名就叫做 50,所以每一串只有 50yen,折合人民币 2.3元。

居酒屋的二楼小桌子

但是居酒屋有一套 system,(我发现之前去过的也都是一样的套路):

  • 每个人至少点一杯饮料;
  • 是有餐位费的,但是也会有免费小菜,叫做 Otoshi;
  • 23点之后加收 10%;
  • 小费加收 10%;

可能是因为店小,要通过这种系统来提高翻桌率吧。不然遇到点一杯酒喝一晚上的酒鬼怎么办。

下面这一家是烤肉。叫做俺の肉。

地址是:神田(東京都) JR 神田站 西口 步行1分鐘,3-15-10, Uchikanda, Chiyoda-ku, Tokyo, 101-0047

空间依然非常局促,像是飞机的经济舱座位。但是肉非常好吃。非常鲜嫩,像果冻一样。老板是一个五大三粗的汉子,但是总是笑眯眯的。

治愈的烤肉
买的一个套餐,非常好吃。尤其是最上面两块。

下面一家是鳗鱼饭。叫做:鰻の成瀬。也很好吃,服务员会给一个牌子,上面写的鳗鱼的不同吃法。

心心念念的鳗鱼饭

最后一个随便找的一家家庭料理。都是 1300yen 的定食,便宜又好吃。

家庭料理的定食

这次旅行我们还去了伊豆,伊豆游记请见这里

 

去悉尼

上个月看到飞澳大利亚机票很便宜,于是就想去澳洲旅行一下。 算得上是一场说走就走的旅行了。(虽然最后算了一下,机票在这次的旅行中反而是最小的花费,酒店住宿才是贵的地方,哈哈。)

我们这次先后去了悉尼和墨尔本,这篇博客分享一些旅行中的七七八八的事情和照片。先写悉尼篇,后面有空再来写墨尔本篇。

签证申请

出发之前的签证申请,直接让我审视了一遍自己的人生,需要的材料非常多,稀奇的材料包括:

  1. 当前持有的签证;
  2. 家庭中有没有人不申请签证,不申请的话也要填资料并说明原因;
  3. 户口本(??);
  4. 过去5年去过哪些国家(??)

一共 21 页呀。整个流程 Kuact 写的这个版本 依然有效,可以参考。费用也比较高,一共 220 新币一个人,不过出签了才意识到这是一个一年多次入境的签证,那还不错,下一次可以去西澳旅行一下。如果只去一次的话,这个签证就显得有些太贵了。总体的流程如下:

  1. 注册 immi 账号,签证类型选择 Visitor (subclass 600)
  2. 登陆之后开始为每一个人创建一份申请,填表
  3. 提交申请,付费
  4. 会收到邮件,然后去 VFSGLOBAL 预约生物信息采集。VFSGLOBAL 是一个签证外包的机构,在新加坡负责很多国家的签证
  5. 注册一个 VFSGLOBAL 账号,登陆之后为每一个人预约生物信息采集(是每一个人,如果只给自己预约了,那么家人是没有预约的,到了现场才发现的话只能交昂贵的现场预约费用了)
  6. 现场生物采集,只收新币现金
  7. 采集完成之后我没有做 immi 上 submit 的操作,然后就出签了

签证下来的速度倒是异常的快,提交申请 3 天就出签了。

入境

机场对水果的控制格外严格,过关之前自觉地丢了很多东西。通关意外地非常顺利,直接刷护照过了,连句话都没人跟我说,下飞机到过关几乎花了10min左右。(最近发现中国新建的机场也支持自助刷护照入关了,非常便捷)。

悉尼衣食住行感受

到了悉尼,一出机场就感受到了一阵凉爽的风——好舒服呀。好像也好久没有经历过这样的风了,不知道在新加坡连续度过了多少个夏天。

出发之前还问刚回来的一个新加坡朋友,那边冷吗?朋友说冷,我打趣问道冷是 for Singaporan or for everyone?

到了发现果然不是很冷,白天T恤晚上加一件卫衣或者外套够了。最好是能防风的,温度不是特别低,但是风很大。

说吃的。没想到来了澳大利亚的几顿饭——汉堡,汉堡,还是……汉堡。一连吃了四顿汉堡,机场的麦当劳,餐厅的汉堡,酒吧的汉堡。有时候不想吃汉堡,点了一个叫做 PBB 的东西,上来一看,还是汉堡。

澳大利亚对澳大利亚的产品非常自豪,超市买的零食,蔬菜,显眼的地方都印着“澳大利亚生产”,有一些不是,也碰瓷似的写着“90%的原料来自澳大利亚”。麦当劳和 Burger King 的汉堡盒子上也特殊地写澳大利亚牛肉。哦对了,冷知识:澳大利亚的 Burger King 不叫 Burger King,叫 Hungry Jack’s。因为 Burger King 进驻澳洲市场的时候,已经有一家公司叫 Burger King 了。

住。相当的贵。定的酒店都在 1000 人民币一晚以上。到这里才意识到这趟旅行最贵的是酒店,机票反而是小 Case 了。但是听说房价相比于其他一线城市也不算贵,况且居民一般也不会选择住在市区,郊区就更便宜了。我们出 City(不是装逼,那里管市区就叫 City)看到过很多独栋的 House,看起来很漂亮,居住应该也很舒适。

行。习惯了在新加坡方便的公交系统,去到了广袤的澳大利亚,发现这里的公交系统乘坐起来很不方便。首先是线路少,乘坐巴士经常要走上个七八百米;其次是车次少,有的地方要等上半小时甚至一小时;最后是价格昂贵,我以为新加坡相比中国的公交已经很贵了,没想到澳大利亚更贵。

公交系统的数据上,整个新南威尔士州(悉尼所在的州),2023年10月有巴士 837 辆,而新加坡在 2020年就有大约 5800 辆巴士

看来,在澳大利亚生活,至少得有辆车。

说起坐车,遇到一件文化冲击的事。一天时间比较晚了,我们坐公交车回酒店。车上有一些看起来刚参加完 party 的青少年,他们比我们早下车,下车的时候,每一个人都说 “Thank you”。我之前从没见有人跟公交车司机说谢谢的,司机上班就是开车,开车载乘客不是天经地义吗?回到酒店之后躺在床上看了一下网友的说法,说在澳洲孩子就被教育说谢谢,虽然大部分的工作是领薪水提供服务的,但是这些工作人员依然帮助了你——超市收银员帮你把东西收了起来,司机安全地把你送到了目的地,服务员帮你点餐,等等。这些服务值得让我们表达谢意。

有趣的是,像新加坡这种人口极度密集的社会,反而没有这么多客套话,人们以效率为优先目标,只问必要的问题,然后马上服务下一个顾客。反而是在地广人稀的地方,人与人之间的关系更加密切一些。另一个表现是,在悉尼进到餐厅或者检票的时候,人们也会客套很多,都会问一下你今天怎么样?有一次买咖啡,服务员问我今天要去哪里,我说要去动物园,他的同事们就开始跟我说起他们喜欢的动物。

在悉尼我们参观了澳大利亚博物馆,教堂,监狱,皇家植物园,在城市里徒步(现在好想叫做 City Walk 了?),去了悉尼歌剧院,去邦迪海滩徒步,去了蓝山徒步,参观了悉尼大学,新南威尔士美术馆,等等。最有意思的是,还歪打正着去了议会,由于已经下班了,工作人员只给我们做了简单的介绍。晚上躺在酒店里还看了发生在议院里面的电视辩论。后来去墨尔本的时候,我们专门预约了议会导览参观,非常赞。

悉尼的旅行结束之后,我们坐一家本地的航空公司 JetStar 的飞机去往墨尔本。又遇见一件文化冲击的事情。JetStar 算是一家廉航,廉航的酒水是收费的(非廉航的酒精类饮料一般也是收费的)。我之前的飞行经历中,在飞机上买酒水的是少数人,大部分都不会在飞机上购买饮料,尤其是这种两个小时的短途飞行。可在悉尼飞墨尔本这架飞机上,推着餐车的空姐异常忙碌,我前面的人每一个人,小桌上都摆上了酒,要么是啤酒,要么是红酒,要不是看到他们刷卡,我都以为澳大利亚的飞机喝酒免费。如此真真切切体会到本地人的潇洒。

接下来是一些旅行片段。

先放地标建筑
在歌剧院附近,意外地碰到了邮轮起航。就是我们之前去坐过的那家
从酒店望出去的风景,虽然算是在 City 区域了,但是楼房普遍都不高。
在博物馆里看到奇奇怪怪的动物。袋鼠的蛋蛋是不是很可爱?袋鼠蛋蛋在澳大利亚是可以买到的纪念品。(好残忍)
免费参观一个悉尼的监狱。居然是这么先进的一个 ipod 和森海塞尔的耳机。导游程序做的非常赞。随着你走到一个地方,它会自动给你介绍周围的东西,模拟之前监狱的情景等等。
参观监狱。
监狱内部的样子
皇家植物园
参观新南威尔士州的议院
CBD 风景线
邦迪海滩徒步,太阳暴晒,风景很美。
去蓝山徒步,蓝山很美,视野辽阔,跟新加坡很不一样。
蓝山的景点,三姐妹峰
在一个港湾的桥上随手拍的一个小亭子

同事刚从悉尼回来,推荐我们这个蛋糕,于是按照 Google 去买。到了之后发现店面位置很小,排队的人也不多,尴尬的是,买了之后没地方吃。于是在旁边的一家咖啡店问店员,能否买两杯咖啡,在店里用我们外带的食物,店员爽朗的说完全没问题。并且称赞我们买的蛋糕很好看。

喝咖啡的时候,店员小姐站在店门口的街上,用比较前卫的方式在买咖啡,她拿着一个杯子,对路过人的大声说,不来杯咖啡吗?

漂亮的小蛋糕
在美术馆里面参与的一种很新颖的艺术——搓泥巴。

就写到这里吧,有空了再来写墨尔本篇,请期待!

 

iowait 的含义

iowait 是 CPU 的一种状态,表示此时 CPU 正处于 idle 状态,并且至少有一个进程正在等待 IO。

CPU 一共有四种状态。在任一时刻,CPU 的状态都是四种中的一种。这四种状态是:user, sys, idle iowait. 一般的程序,比如 sar top,会用百分比表示 CPU 分别处于这四种状态的时间,这四种状态相加的结果是 100%。

其实准确来说,CPU 只有两种状态:busy 和 idle。Busy 又分成了两种,user 和 system,可以表示 CPU 目前正在执行用户空间的代码,还是正在执行 kernel 空间的代码,方便开发者定位问题。Idle 又分成了两种:idle 和 iowait。笼统来说,idle 就是目前系统中没有 Runnable 的进程了(参考之前的博文:Linux 进程的生命周期),iowait 就是目前系统中没有 Runnable 进程(所以说 iowait 是 idle 的一种),并且,有进程卡在 IO 上。

(注意,本文说的“进程”是从资源调度的角度讲的,本文的语境中,进程包括线程)

统计的方式

Kernel 会定期更新 counter(AIX,CPU state counter 每个 clock interrrupt 更新,每 10ms 一个 interrupt)。

对于每次更新,检查 CPU 是否是 busy,如果是 busy,检查 CPU 在执行用户态还是内核态的代码,增加相应的计数器。如果不是 busy,那就是 idle,检查此 CPU 之前有没有发出 IO 操作,如果有,那么就增加 iowait,如果没有,那么就增加 idle 的计数器。(所以可以认为这个数值是抽样统计的方法?)

像 sar,top 这种展示工具,就去读 counter,计算时间段内的比例,展示结果。

举例说明含义

综上,假设 CPU state 出现了比较高的 iowait,那么就意味着:这个 CPU (在大部分时间)找不到可以执行的进程了,至少有一个进程在等待 IO。

iowait 只包括文件系统的 IO,不包括:sockets, pipes, ttys, select(), poll(), sleep(), pause()。

举例1: 一个机器有 4 个 CPU,1个CPU iowait 比较高,3 个 CPU user+sys 很高,iowait 很低。

意思是当前有 3 个 Runnable 的进程,有至少1个进程阻塞在 IO,其他的进程要么阻塞在 IO,要么阻塞在其他状态,但是不是 Runnable 状态,Runnable 状态的进程有且只有 3 个。因为如果再多来一个 Runnable,那么它就会被 iowait 高的那个 CPU 去执行,此 CPU 的 iowait 也不会很高了,user+sys 会变高。

举例2: 这个例子是参考资料 What exactly is “iowait”? 中的,非常典型。

假设有 6 个 CPU,而且只有 6 个进程:

  • 2个进程不涉及磁盘 IO 操作,只有 CPU 计算;
  • 4个进程要花 70% 的时间做 IO 操作,30% 的时间在 CPU 上计算,这 30% 中,5% 是在 kernel mode,25% 是在 user mode。

那么 CPU 利用率将会如下,最后一行是综合所有的 CPU 的数据:

现在,还是6个进程完全不变,但是 CPU 从6个减少到了4个,数据将会是如下:

可以看到,2个 100% 利用率的 CPU 保持不变,但是总的 CPU 的利用率是 80% 了。解释如下。

4个进程,每一个进程只要花 30% 的时间来计算,其他的时间是 iowait,iowait 是 idle 中的一种,iowait 的时候,如果能有别的事情可以做,CPU 就会去做别的事情。所以 2 个 CPU 每一个会花 60% 的时间做计算工作(一个进程是 25% + 5%,做完之后做下一个进程的 25% + 5%)。做完 60% 就无事可做了,剩下 40% 的 iowait(就是 idle)。

总结

iowait 是一种 idle,如果比例过高,它可以告诉我们几件事情:

  • 系统正在做的工作,大部分时间都是在等待 io 了,io 系统的性能不够高(也有可能是硬盘坏了);
  • CPU 没有更多的工作可以做了,我们可以给系统分配更多的计算工作;
  • 它不是 CPU 的一种“阻塞”状态,它不能说明:CPU 现在在等待 IO,无法运行其他进程。而是:没有可以运行的进程能给 CPU 做;

iowiat 是 CPU 角度的一个状态,它不是进程角度的状态。iowait 很低,不能代表进程没有卡在 IO 上。假设有一个进程需要花 70% 的时间做 io操作,把它放到一个空闲的,单 CPU 的系统中,显示的 iowait 是 70%,但是我在这个系统中增加一个不依赖 io 的计算任务,iowait 就变成 0 了。但是我们之前的那个进程,依然需要花 70% 的时间等待 io。所以,它不代表进程的状态。

参考内容:

  1. What exactly is “iowait”?
 

探测 TCP 乱序问题

TCP 协议是基于 IP 协议的。IP 协议不保证顺序,只能说尽力保证包的顺序。如果发生乱序,TCP 的性能就会下降很多。最近就遇到一个 TCP 下载速度很慢的问题,抓包分析发现有很多乱序的包。

网络发生了乱序,那就把锅甩给网络组的同事,但那不是我的风格。虽然我没有二层和三层设备的权限,无法排查哪里出了问题。但是我感觉我可以只从 TCP 的两端,探测出来乱序发生在哪一个节点上。

traceroute 的原理

traceroute 是一个很好的网络工具。之前在 mtr 的教程中也介绍过。

traceroute 的原理很精妙。它利用了 IP 协议本身的特性:每一个 IP 包都有一个 TTL 字段,表示这个包还能在网络中被转发多少次,每次路由器转发一个 IP 包就将其 -1,如果一个路由器发现 IP 包 -1 之后是 0 了,就直接丢弃,并且给 IP 包的 Source IP 发送一个 ICMP 包(包含此 hop 自己的 IP),说这个包气数已尽,无法送达目的地。

traceroute 原理

traceroute 想要知道去往另一个 IP,中间都会经过哪些 IP 节点。它发送一个 TTL=1 的 ping 包出去,包会挂在第一个 hop 上,第一个 hop 发回去 ICMP,traceroute 就知道了第一个 hop 的 IP 地址;它再发送一个 TTL=2 的 ping 包,就知道了第二个 hop 的 IP 地址…… 直到收到正确的 ping 响应,就算到头了。

mtr 类似于一个 traceroute + ping 的工具,还能告诉我们中间每一个 hop 的延迟。原理其实和 traceroute 是一样的,以下用 mtr 举例。

路由 path 的一致性问题

回到乱序的问题,最常见的问题是,中间某一跳到下一跳有多个节点可以选择。这时候,正确的情况下,对于 (src ip, src port, dst ip, dst port) 这样的四元组,应该固定走一条线路。就像 ECMP 的 hash 一样

ICMP Ping 没有端口的概念,但是对于 (src ip, dst ip),路线应该是一致的。即,我们在对某一个 IP mtr 的结果中,每一跳都应该只有一个唯一 IP。

mtr with ICMP, 每一跳都只有一个 IP

mtr 有 tcp traceroute 的功能,我用 tcpdump 看了下,原理和 traceroute 相同,只不过 IP 包的内容不是 ICMP 了,而是 TCP。路由器丢了 IP 包,不管里面是 TCP 还是 ICMP,都会发回来 ICMP 消息。于是 tcp traceroute,我们就可以用 tcp 包探测出来中间的转发节点。mtr 使用的 tcp 包是 syn 包,remote port 可以指定,但是 local port 每一个包都是随机选择的。这就导致,每一次发起探测,都是一个不同的四元组:(src ip, src port, dst ip, dst port) ,因为 src port 每次都在变,所以路径每次都是不一样的。这样的话相当于可以将路径中所有的路由设备 IP 都探测出来。

mtr with TCP, 每一跳可能有多个 IP

如图可以看出,一跳可能有多个 IP。

TCP multipath 探测

但是正确网络中的 TCP,如果 local port 也不变,那么相同的四元组,应该走同一条路,来尽量保持到达顺序和发送顺序一致。

利用这个原理,假设我们使用的 local port 一直保持不变,那么 TCP traceroute 的结果应该是,每一跳都只有一个 IP

mtr 没有提供固定 local ip 来 trace 的功能,我用 scapy 写了一个。

代码非常简单,就是发送 ttl 不同的包,然后检查收到的 ICMP 包。限制最多 20 次,如果 20 次还没到达终点就放弃。如果 reply 里面有 TCP 包,说明收到了正常的回复(即使是 RST 也算)。

另外,因为我们每次都用同一个 local port,所以不能用多线程,每次只能有一个探测存在。

实际测试发现,收到的 ICMP 响应并不是很稳定,有的时候 hop 4 丢了,有的时候 hop 5 丢了。可以使用一个 bash 循环多测试几次。

跑一段时间之后,我们可以查看这个日志文件,过滤掉错误的包 (??),然后排序之后,去重。理论上,每一跳都应该只有一个 IP 才对,如果有某一个 hop 出现了两个 IP,那说明就是出现了 multiple,会知道乱序。

如上输出,在 hop 5 出现了两个 IP,说明是 hop 4 到 hop 5 的时候出现了 multipath。

在得到了这个结果之后,去和网络组的同事做了确认。结果发现这个不是导致问题的根因。不过觉得挺有意思的,稍作记录一下。

小技巧:traceroute 只能测一个方向,有些情况下去的方向和回来的方向可能不是同一个路线。所以无论是 traceroute 还是 tcp traceroute,不妨从两端都试试。说不行会发现新的线索。