メインコンテンツへスキップ

技術

System x3100 M5のリチウム電池交換

社内サーバルームにて突如爆音を轟かせたSystem x3100 M5。なにごとかとマシンを確認するとSystemエラーLEDが点灯しているではないか。

Free5GC v3.3.0での複数経路設定

Free5GCで上記の構成をsmfcfg.yamlのlinksに記述する場合、通常は以下のように共通入り口にgNB1,gNB2を記述する必要があるかと思います。

OSM (Open Source MANO) v16 インストール

OSM (Open Source MANO)の 公式サイト では、コマンド $ wget https://osm-download.etsi.org/ftp/osm-16.0-sixteen/install_osm.sh $ chmod +x install_osm.sh $ ./install_osm.sh を打つだけでインストールできると書いてありますが、インストールスクリプトに書かれているバージョンが古く使用可能でないパッケージ等がある理由で途中で失敗してしまいます。2026年1月にOSM v16のインストールに成功した際の設定について書きます。 環境 # インストールした環境 OSM公式の推奨環境 OS Ubuntu 22.04 LTS (Jammy Jellyfish) Ubuntu 22.04 LTS (Jammy Jellyfish) RAM 16GB 16GB CPU数 4 4 ディスク 128GB 80GB NIC ネット接続ありx1 ネット接続なしx1 ネット接続ありx1 インストール # インストールスクリプトを実行する前に設定を書き換えます。

Common Alert Message Format

きょうは Common Alert Message Format (CAMF) について所感を書きます。準天頂衛星みちびきの災害・危機管理通報サービス(DCR)というのがありまして、その拡張(DCX)のメッセージフォーマットがCAMFです。

How to Use Momonga

Momonga はBルートサービスを利用してスマートメーターと通信するPythonモジュールです。今日はその使い方を説明します。

CPU Isolation

きょうは Linux カーネルがユーザーランドプロセスにスケジューリングしないCPUを確保しておく方法についてです。これによってコンテナやVMに割り当てるためのCPUが、ホストOSのユーザランドプロセスに使われてしまうことを回避できます。

WOL Configuration on Linux

Wake On LANの設定のメモ。netplanが入っているUbuntu前提だけど、ほかのディストリビューションでも参考になるかもしれない。

ZIPコマンドでWordファイルが開けなくなった

zipコマンドでWordファイルとかExcelファイルとかと、他のいくつかのファイルを圧縮しようと思ったら、なぜかWordファイルがぶっ壊れて開けなくなって変な汗出てるみなさん、ようこそいらっしゃいました。まずは深呼吸して落ち着きましょう。

緊急警報放送を復調する

緊急警報放送 は災害時にラジオなどの受信装置を自動起動するための信号です。このブログに辿り着いている時点で、そんなことは知ってるわいって感じですかね。でも一応書いておかないことには記事として成立しないので書きます。 EWSは災害時にラジオやテレビ放送で聞くことがある、あの不穏なピロピロ音です。全く一般には普及していませんが、あれにはデジタル信号が含まれていて、それを検知すると自動起動する機能があるラジオなどがあります。どうやっているかというと、デジタル信号の0と1をそれぞれ640Hzと1024Hzの音に置き換えて表現します。これを変調といい、とくに0と1のデジタル信号を2つの周波数の変化に置き換える方式をBFSK(Binary Frequency Shift Keying, 二値周波数偏移変調)といいます。この切替を1秒間に64回行うので変調レートは64Bd(ボー)で、1回の変調で1ビットを送りますから転送レートは64bpsです。 さて、アルゴリズムについてですが、音声周波数の変化をどうやってを0と1に戻すのかというと、たとえば640Hzの波は言い換えれば1/640秒に1周期の波なので、振幅軸上の特定のポイントを通過する時間間隔を測定して1/640秒と一致すれば640Hzの波だと判断できるわけです。ちなみに64Bdなので1変調の1/64秒あたりの640Hzなら10周期、1024Hzなら16周期です(取りこぼしもあるので、何回この周期を検知したら信号とみなすかは調整が必要です)。さいごに640Hzを検出したら0、1024Hzを検出したら1に置き換えればデジタル信号になります。 ソースはこちら。 nbtk/EWSDemodulator 緊急警報放送復調器

アップストリーム版のMPTCPを試してみた

従来、LinuxでMPTCPを利用する場合「 Linux Kernel MultiPath TCP project」が公開しているLinuxカーネルを使う必要がありましたが、アップストリームのLinuxカーネル 5.6以降でMPTCPが利用可能になりました。 今回は、Ubuntuでアップストリーム版を使った複数サブフローでのMPTCP通信を試してみました。

Tracerouteについて知っておくべきこと

Tracerouteの仕組みについて解説してるページは数あれど、障害箇所特定のノウハウはあまり見かけないので、今回は「Tracerouteは有用だけど、これを知らないと結果が読めないぞ」という話を。

Python でシングルトンパターンを実装する

生成されるクラスインスタンスを常に一つにするシングルトンパターンを Python で実装します。 Python は Java みたいに “private static” みたいな修飾ができないし、どこで初期化すればいいのかもちょっと考える必要があります。

Pythonの辞書に dot notation でアクセスする

Javascript のハッシュマップはドット・ノーテーション ( dot notation )でアイテムにアクセスできますよね。でも Python の辞書ではそれができません。できたら便利だなーと考えていたらひらめいたので、 dict クラスを継承した dict2 クラスを作りました。

ns-3を使ったLTE通信のシミュレーション

ns-3 とはオープンソースの離散事象ネットワークシミュレータです。ns-3を使ってLTE通信のシミュレーションを行っていた時、TCPを使うとスループットが出ない現象がありました。その原因と解決方法について書いていきます。

スレッド間でカウンタを共有する(再び)

これまでも話してきたとおり、スレッド間でオブジェクトを共有することはハイコストなので、可能な限りオブジェクトを共有しない設計にすることが性能においても品質においても重要です。しかし、どうしてもオブジェクトを共有したい場合は、昨今の処理系にはそれを保証する機能が用意されているのでそれを使って安全を担保します。

誤った並列化による性能劣化(その2)

前回の記事に引き続いて、マルチスレッドプログラムの性能についてです。前回は「コンテキストスイッチングや排他制御のオーバヘッドに見合う処理でなければ並列化は逆効果」ということがわかりました。今回はmutexのロック獲得と開放について簡単な実験します。

誤った並列化による性能劣化(その1)

前回の記事で「複数のスレッドが共有する変数をインクリメントするときには排他制御が必要」という話をしました。その結果、正しい値を得ることには成功したものの、性能が著しく落ちるという知見を得ました。今回は性能が出ないマルチスレッドプログラムに対して割り当てるCPU数をあえて制限してみます。