Raspi_lustre

ラズパイでLustre、分散ファイルシステムを構築して、I/Oのバンド幅を爆上げしたいって話 まずはいきなり参考文献ですね。 GlusterFS んで、早速壁にぶち当たるわけですね。Lustreはbinaryが配布されているらしいんですが、x86用らしいんですよね。ということで、raspiで動かすためにはソースコードをビルドしないといけないんですね。 まあ、これだけ書いて終わりっていうの残念なので、分散ファイルシステムについて知っていることを書いていきたいと思います。 まず、ファイルシステムっていうのは、OSの機能で、ブロックデバイスの操作をするためのデバイスドライバをラッピングしてくれているOSの機能。デバイスドライバへのAPIを提供してくれているOSの機能。で、ファイルシステムがあるから、我々はOSにお願いするだけでいい感じにファイルを作れるし、どこにどのファイルがあるか、とかそういう管理もしなくていいのよね。ただね、ファイルシステムもただのプログラムに過ぎないんですわ。何が言いたいかというと、内部ではカチカチとデバイスドライバーを動かしているわけで。いや、何が言いたいかっていうと、1ファイルにつき1プロセスしか操作を許されないってことね。つまり、複数のプロセスが一気に一つのファイルに書き込むとか、そういうのは無理なわけよ。これまず大事なポイントね。だからね、書き込みたいデータがたくさんあってもsingule writingをするしかないんだよね。 はい、GPT先生に聞いてみた。 Is it impossible for multiple processes to write data to a same file simultaniously? In traditional file systems, it is generally not possible for multiple processes to write data simultaneously to the same file without coordination or synchronization mechanisms. Concurrent writes to the same file can lead to data corruption, inconsistencies, or conflicts. When multiple processes attempt to write to the same file simultaneously, several issues can arise: Data Corruption: Simultaneous writes from multiple processes can result in data corruption, where the written data becomes mixed or garbled. This can happen if the file system interleaves or merges the write operations from different processes in an uncontrolled manner. Inconsistent Data: If processes are writing to different parts of the same file simultaneously, it can lead to inconsistent data. For example, if two processes write different values to the same location within the file at the same time, the final content of that location becomes unpredictable. File Locking and Concurrency Control: File systems often employ locking mechanisms to control access to files and ensure data integrity. These locks allow processes to acquire exclusive or shared access to a file, preventing simultaneous writes by multiple processes. Without proper coordination, conflicts may arise, and processes may contend for file locks, leading to delays and reduced performance. To enable multiple processes to write data to the same file simultaneously, coordination mechanisms such as file locking, semaphores, or other synchronization techniques need to be employed. These mechanisms ensure that processes take turns or serialize their write operations to maintain data integrity and consistency. However, it's worth noting that some distributed file systems or specialized I/O middleware, like ADIOS, may provide mechanisms to support parallel or concurrent writes to a file. These systems typically implement internal coordination and synchronization mechanisms to manage concurrent access safely. In such cases, the middleware handles the coordination and ensures data integrity, allowing multiple processes to write to the same file efficiently. しかし一つのファイルに同時書き込みを許可しているふぃあるシステムもある。XFSは一つのファイルに同時書き込みを許可しているらしいのだが。そんなことできるのか??? ...

May 9, 2023 · 8 min · 1583 words · Me

Openvpn_multiple_client

一つの証明書を複数のクライアントで使い、同時接続を可能にする方法 基本的にクライアント証明書は一つのクライアントにつき一つ作るのがいいとされている。しかし、新しく作るのがめんどいときもある。iphoneとsurfaceに同じクライアント証明書が入っているのだが、この二つを同時接続しようとすると、先に接続されていた方が追い出される形になる。 openvpnのログを見てみるとこんな感じである。 Thu Apr 27 12:37:15 2023 MULTI: new connection by client 'hogehoge' will cause previous active sessions by this client to be dropped. Remember to use the --duplicate-cn option if you want multiple clients using the same certificate or username to concurrently connect. chatGPTさんに解決方法を聞きました。 Yes, you can add the '--duplicate-cn' option to your OpenVPN server configuration file. To do this, follow these steps: Open your OpenVPN server configuration file (usually named 'server.conf') using a text editor. Add the line 'duplicate-cn' to the file, without the quotes. Save the file and restart the OpenVPN server for the changes to take effect. Here's an example of what the relevant section of the configuration file might look like: # Allow multiple sessions per client username or certificate duplicate-cn 解決です。chatGPT先生すごすぎ!!ググレカス!!はいずれ死語になるのでしょうか??? ...

April 27, 2023 · 1 min · 128 words · Me

Haruten

タイトルホルダーが来ない理由を言語化してみた。 今週末は春の天皇賞です。今年もいい馬がそろいましたが、確実に過剰人気になる馬が一頭いる。タイトルホルダーですね。 はい、まずはタイトルホルダーがどういう馬なのか、を軽く説明したいと思います。ズバリ、スタミナがめちゃめちゃある先行逃げ切りです。長くいい足を使うとかっていうのはできない。まじで。ピッチがめっちゃ早いのよね。で、最後の急な坂とかも頑張って粘れる感じ。 で、先行逃げ切りに合う競馬場は、最後の直線が短く、急な坂が待っている中山とか阪神の内とかなんだよね。 今までタイホが買ってきた舞台とかを見ると全部それ。まず、菊花賞。阪神3000mの内。そして、宝図記念。阪神2200mの内。そして去年の天皇賞春。阪神3200の外からの最後内回り。日経賞も中山。全部タイトルホルダーのための舞台だったんだよね。逆に負けたやつを考えてみよう。ダービー。うん、よーいどんだね。 ちなみに、前回の日経賞、道悪のやつね、あれ、どう考えてもタイホ有利な展開だから、勝って当たり前なのよね。2着以下の泥のかぶり方見たやろ。それはそうやわ、ってかんじなの。 さらに、多くの素人は思うんだよ。去年の天皇賞春タイトルホルダー買ってるし、今年も余裕じゃね???ってね。阪神競馬場から京都競馬場に変わったってことも知らずにね。 マジな話、アスクには負けるね。ディープ産駒って足長いもん。スラっとしててかっこいいよね。で、京都最後下りだもん。その長い足を使ってビューンといってほしい。そう、イメージ的には小倉競馬場に近いね。最後、ビューンってめちゃめちゃ伸びてくる感じ。そうなると、ジャスティンパレスとアスクビクターモアに軍配が上がるね。後はボルドぐふーしゅだね。まじで。ただ、ぼるディーもどちらかというとタフなのがあっている気がするのよね。中山とかそっち系。あとね、ジャスティンは輸送が苦手なのよね。これ大事。ジャスティンは栗東だからね。いや、もうジャスティンしかない気がする。ジャスティン、アスク、ぼるディー、だね。ただね、アスクは美穂ってのは気になるね。 まあ、これはうまいレースになる。 京都でやってた時の菊花賞馬にはコントレイルとかがいる。タイトルホルダーが菊花用とれたのは間違いなく、阪神内だったから。時も味方したって感じよ。宝塚では買いたいが、京都の春はきり!!!お疲れ!!

April 25, 2023 · 1 min · 10 words · Me

Ngrock and remote.it explained

ngrock とはなにか?もう調べるの面倒くさいんでchatgp先生の回答をそのまま持ててこようと思います。 Ngrok is a popular tool that allows developers to expose a web server running on their local machine to the internet. It creates a secure tunnel from a public endpoint to a locally running web service. This can be useful for testing webhooks, APIs, and other web services that require a publicly accessible endpoint. Ngrok provides a public URL that can be used to access the local web server, which eliminates the need for a dedicated server or a domain name to test the web service. Ngrok can be downloaded for free and is available for Windows, Mac, and Linux. 基本的にローカル環境で開発しているアプリをインターネットに公開することはできないんだよね。たとえ、グローバルipが割り当てられているマシンでも、localhost:3000とかで動いています、ってなると外部の3000にアクセスしてもだめなわけだ。 このローカルの3000をngrockっていうアプリを使って、ngrockのサーバを経由して外に見せる方法がこれなわけだね。 おそらくこれもグローバルipを外部にさらさなくても見られるようにするツールだと思うんだよね。 ...

April 19, 2023 · 2 min · 293 words · Me

NodeJs最新版エンジンのインストール方法(tsはじめました)

そうだ、typescriptはじめよう 可読性、保守性を高めるためにはやっぱりnode.jsではなく、typescriptです!!どうやら、tsはa part of node.jsらしい? (そんなことないかもです。ただ単にnpmで入れられるだけ?)です。インストールの手順、使い方、その他、重要な点をまとめます。 node.jsのインストール方法 ref1 を参考に最新のnode.jsをインストール出来ます。まあ、ここでもまとめておきたいと思いますが。 aptでnodejsとnpmを入れる $ sudo apt update $ sudo apt install nodejs npm $ sudo node -v npm install で最新のnode.jsを入れる $ sudo npm install n -g 古いnode.jsを削除する $ sudo n stable $ sudo apt purge -y nodejs npm $ exec $SHELL -l typescriptのインストール方法 上のを参考にnode.jsがインストール可能ですね。んで、typescriptはなんとnpmで入れるんですよね。これ驚き。しかし、コンパイラはちゃんとbinaryなんですよね。packageとかではなく。これ面白い。 はい、refを参考にnpmからtypescriptをインストールして、コンパイラへのパスを通します。 $ mkdir sample $ cd sample $ npm init $ npm install typescript $ echo export PATH=\$PATH:`pwd`/node_modules/.bin >> ~/.bashrc $ source ~/.bashrc $ tsc --version とりあえずチュートリアルをやろう チュートリアルがかなり充実している。ビビるね。Reactがなぜいいのか、っていう部分も軽く書かれているから、参考にした方がいいですね。 ...

February 27, 2023 · 1 min · 115 words · Me

Comments_on_how_linux_works

linuxを制すものはITを制す とはよく言ったものだ。 将来の夢はlinuxカーネルを理解することである自分ですが、まあ、そこへのかけ橋が必要ということで、「linuxの仕組み」を読むわけですね。裏表紙を見るだけで良本感が出ているこの本、さっそく読んでいきましょう ちなみに、筑波大学のこの人の授業もめっちゃためになります。 ref 1章:Linuxの概要 プログラムとは何か、プロセスとは何かを簡単に説明した後、カーネルの必要性について話しています。 これはかなり重要だけど、カーネルモードとユーザモードはcpuによって提供されている機能なんですね。カーネルモードで動いているプログラムは何の制限もないのに対して、ユーザモードで動いているプログラムには特定の命令を実行できなくする等、様々な制限がかかるんですね。 で、linuxの場合は、カーネルだけがカーネルモードで動作しています。つまり、プロセスはユーザモードで動いている、ということですね。だから、プロセスはカーネルを通じてデバイスにアクセスするのですが、この時にカーネルに操作をお願いする命令のことを「システムコール」というんですね。そうなんです、システムコールです。 カーネルの助けがないと実行できない処理をカーネルにお願いするんです。具体的には、nicを介した通信とかはそうですね。あとは、デバイスへのアクセス。プロセスの生成、削除。ファイルシステム操作。メモリ確保、解法。など。 システムコールが発行されると、cpuにおいて例外というイベントが発生するんですね。で、これをきっかけにcpuのモードがユーザモードからカーネルモードに遷移します。で、システムコールが終了すると再びユーザモードに戻ってプロセスが動くって感じですね。 で、straceコマンドってのがプログラムの中で発行されるシステムコール一覧を出してくれるんだよね。 strace python だけでもシステムコールがたくさん呼び出されることからも、pythonがインタープリタ言語であることがわかると思う。 前に研究室のサーバでwコマンドがハングしてしまう問題が起こったよね。そういう時は strace w とかってやると、wコマンド実行中のシステムコールがみられて、どこでハングしているのかとかがわかるわけですね。 こないだ調べた時は、特定のプロセスのプロセス情報 (/proc/<pid>/cmdlineとか) を閲覧しようとするとハングしてしまっていました。strace wとかするとreadシステムコールがハングするのがわかるはず。 ただ、なぜそうなってしまうのかはわかっていません…調べるとcgroupsによるメモリ制限と関係がありそうな情報が出てきましたが、まだ調査していません。 sudo yum install -y sysstat つぎのコマンドでsysstatを起動しましょう sudo systemctl start sysstat.service sarコマンドで遊びましょう。 sar -P 0 1 1 ちなみに、このコマンドの意味は、論理CPU0の(-P 0)のデータを1秒ごとに1回だけ収集しましょう。てこと。 sar -P 0 1 4 をやると次のような結果が出てくるよ。 Linux 5.15.32-v8+ (zeta) 09/02/23 _aarch64_ (4 CPU) 16:08:49 CPU %user %nice %system %iowait %steal %idle 16:08:50 0 0.00 0.00 0.00 0.00 0.00 100.00 16:08:51 0 0.00 0.00 0.00 0.00 0.00 100.00 16:08:52 0 0.00 0.00 0.00 0.00 0.00 100.00 16:08:53 0 0.00 0.00 0.00 0.00 0.00 100.00 Average: 0 0.00 0.00 0.00 0.00 0.00 100.00 この表の見方は、CPU 0がユーザモードで動作した時間の割合(%userと%nicdの和)、カーネルモードで動作した時間の割合(%system)、何もしていない時間の割合(%idle)って感じだね。 ...

February 9, 2023 · 7 min · 1335 words · Me

アメリカのハッカーを返り討ちにしたい

ことはじめ 世界中に自分が入れるサーバがあったほうがいろいろと便利かなと思い、ブルガリアのサーバを借りた。はいいのだが、早速ハッカーがお出ましなさった。ってことでやっつけたいと思う。 ハッカーのIPの特定 sudo lastbでログインを試みて失敗したIPアドレスの一覧が表示可能である。 ハッカーに人権はないのでsudo lastbで侵入を試みようとしたIPの一覧をアップしておく。このサイトをご覧の皆さんにもぜひ攻撃していただきたい。正当防衛である。 45.136.15.210 157.245.49.188 196.179.231.103 175.126.176.21 118.98.121.241 213.202.223.97 192.241.169.184 187.235.65.53 195.133.40.249 194.110.134.13 まずは守りを固める sshポートを変更 /etc/ssh/sshd_config で Port xxxxx に変更。ufwでxxxxをallowにしてreload。これを忘れると入れなくなる。で、22をdenyしておくとさらにいいかもね。 もちろん、奴らは素人なので、sshdが待ちうけるポート番号が22以外になるなんて知っている奴はいないわけで、不正アクセスが一気に減ったという話だ。ははは。ざこめ!いや、普通にポートを変えてもやってくるわ。しぶとい奴ら。 nmapでポートの状況を調べる 実際に調べたわけではありませんが。 Starting Nmap 7.80 ( https://nmap.org ) at 2023-01-25 14:48 UTC Nmap scan report for 45.136.15.210 Host is up (0.24s latency). Not shown: 995 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 111/tcp open rpcbind 646/tcp filtered ldp 3306/tcp open mysql ftpコマンドで以下のテキストを送る Dear My friend!! Hello! my name is kim jong un! We've detected cyber attacks from your computers. Because of that, we are considering to take legal action!! Oyoyoyoyyoooooi!!!!!!!!!!!!!! Unfortunately we know all about you including your name, age and address. If you don't wanna that to happen please pay 0.1 btc to the address below, within a week! HaHaHa!!! bc1q9xezwy9z6xde3960p8fs3uxmhd3tqs6hdcc4mx Thanks you mate!! ⠀⠀⠀⠀⠀⣀⣠⠤⠶⠶⣖⡛⠛⠿⠿⠯⠭⠍⠉⣉⠛⠚⠛⠲⣄⠀⠀⠀⠀⠀ ⠀⠀⢀⡴⠋⠁⠀⡉⠁⢐⣒⠒⠈⠁⠀⠀⠀⠈⠁⢂⢅⡂⠀⠀⠘⣧⠀⠀⠀⠀ ⠀⠀⣼⠀⠀⠀⠁⠀⠀⠀⠂⠀⠀⠀⠀⢀⣀⣤⣤⣄⡈⠈⠀⠀⠀⠘⣇⠀⠀⠀ ⢠⡾⠡⠄⠀⠀⠾⠿⠿⣷⣦⣤⠀⠀⣾⣋⡤⠿⠿⠿⠿⠆⠠⢀⣀⡒⠼⢷⣄⠀ ⣿⠊⠊⠶⠶⢦⣄⡄⠀⢀⣿⠀⠀⠀⠈⠁⠀⠀⠙⠳⠦⠶⠞⢋⣍⠉⢳⡄⠈⣧ ⢹⣆⡂⢀⣿⠀⠀⡀⢴⣟⠁⠀⢀⣠⣘⢳⡖⠀⠀⣀⣠⡴⠞⠋⣽⠷⢠⠇⠀⣼ ⠀⢻⡀⢸⣿⣷⢦⣄⣀⣈⣳⣆⣀⣀⣤⣭⣴⠚⠛⠉⣹⣧⡴⣾⠋⠀⠀⣘⡼⠃ ⠀⢸⡇⢸⣷⣿⣤⣏⣉⣙⣏⣉⣹⣁⣀⣠⣼⣶⡾⠟⢻⣇⡼⠁⠀⠀⣰⠋⠀⠀ ⠀⢸⡇⠸⣿⡿⣿⢿⡿⢿⣿⠿⠿⣿⠛⠉⠉⢧⠀⣠⡴⠋⠀⠀⠀⣠⠇⠀⠀⠀ ⠀⢸⠀⠀⠹⢯⣽⣆⣷⣀⣻⣀⣀⣿⣄⣤⣴⠾⢛⡉⢄⡢⢔⣠⠞⠁⠀⠀⠀⠀ ⠀⢸⠀⠀⠀⠢⣀⠀⠈⠉⠉⠉⠉⣉⣀⠠⣐⠦⠑⣊⡥⠞⠋⠀⠀⠀⠀⠀⠀⠀ ⠀⢸⡀⠀⠁⠂⠀⠀⠀⠀⠀⠀⠒⠈⠁⣀⡤⠞⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠙⠶⢤⣤⣤⣤⣤⡤⠴⠖⠚⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ あらららら。FTPコマンドはどうやらログインパスワードが必要みたいだね。これじゃあハックするのは難しいな。 ...

January 25, 2023 · 1 min · 150 words · Me

Tor

インターネット上での匿名性について 確かフツーのtcp/ip通信はsource/destination がパケットのヘッダーになっているから、サーバはクライアントが誰だか知ることができるんだよね。ヘッダーのsourceを変える方法はいくつかある。例えば、vpn。しかし、vpnはサービス提供者がパケットを全部見ることができるんだよね。んで、不正アクセスがあった時には警察側にログを提供しかねないんですよね。んで、ログから接続先が割れて逮捕されてしまうと。これを防ぐのがtorだね。 警察からの追跡は完全に逃れることができる。ただ、torノードの提供者にヤバいやつがいてパケットダンプをしているってこととかはあると思う。まあ、パケットダンプしていても暗号化されていれば大丈夫なんだけど。 The onion router 匿名性を守るための通信手段がtor。んで、torを使ったインターネットブラウジングを可能にするのが、torブラウザ。 言ってしまえばtorはvpnの上位互換だな。torネットワークに所属するtorノードの中から3つのノードをランダムに選んで、それぞれが暗号化して通信する。通信経路の各ノードは通信元ノードと通信先ノードしかわからないため、完全に秘匿性が守られる。通信元(ブラウザ)と通信先(ウェブサイト)のセットを得ることが不可能である。 例えば、 browser -> tor1 -> tor2 -> tor3 -> website でwebsiteと通信するとき、tor1はbrowserから送られていることがわかるけど、browserがどのサイトを見に行っているかはわからないようになっている。これによって完全に秘匿性が守られるわけだね。素晴らしい。まあ、通信速度はあほみたいに遅いけど。 ただ、気を付けたいのが、tor3 -> websiteの段階では平文が流れるわけだから、ここがhttpだと普通に見れてしまうわけですね。例えば攻撃者がtorネットワークにノードを配置するとき、そのノードがtor3になると通信が全部見られてしまうわけですね。 ちなみにtor3のことを出口ノードって言います。 torを利用するときに使えるツール tor networkから接続いるか どのipから接続しているかがわかるサイト 上のやつの日本版(cman) torの速度をfast.comで ログが取られていない、秘匿性の高いVPNサービス protonVPN PrivateInternetAccess すべての通信にtorを使うtailsというos tails vpn over tor と tor over vpn vpnのの先にtorがあるか、torの先にvpnがあるかのちがいで安全性は変わるのだろうか?いや変わらないな。いずれにしろvpnで秘匿化されるphaseが入るから。いやでもtor3が攻撃者である可能性も否めないので、vpn over torが一番安全なのか。これも平文が流れる場合など限定されるけど。 んで、tor over vpnは、普通にvpnを起動してからtorブラウザを使えばいいね。 vpn over torが厄介でね、まずプロトコルはopenvpnじゃないとだめっぽいですね。んで、openvpnの設定ファイルに次の行を書き込むっぽい。 socks-proxy localhost 9050 socks-proxy-retry vpn over torを使うと、マジで完全にuntracableになる(実はならない。その理由を後で書きます)。 そして、torのさきにvpnを置くことで、torからの接続をブロックしているサイトにもアクセスできるようになるんですね。すばらしい!!vpnの代わりにプロキシ―を使うこともできます。 ただ、ブラウザの通信以外もtorを通すためにはtorそのものをインストールする必要があります。 *vpn over torでも完全匿名にならない理由。 はい、それはtorの入口ノードがどこから接続が来ているかを監視している場合がるからですね。torの入口に攻撃者がいるっていうのが一番面倒くさいです。まあ、あくまでipが割れるってだけですけど。 なんで、一番安全なのはvpn over tor over vpnって感じかな。 これは確実にuntracableになる。 torと仮想通過 tor、という匿名ネットワークを利用するのだから、支払いも匿名でやりたいよね?となると、暗号通過しかないわけですね。暗号通過。 bitcon AtM torノード一覧 ノードリスト ...

January 19, 2023 · 4 min · 679 words · Me

Comments on super linux programing

はじめに 図書館で借りた、「c言語によるスーパーlinuxプログラミング」という本の返却期限が近づいているのでさっさとまとめておきたいと思う 1章:c言語の位置づけ cを勉強することでプログラムの動きをマシンレベルでイメージすることができるからいいよねと。ただし、記述は非常に具体的になる。それでは面倒なことが多いと。そういう理由から「高級言語」が開発されたと。スクリプト言語ともいう。どの言語を使うかは何を開発したいか?に依存するわけですね。システムだったらc/c++,webだったら、jsとかね。適材適所が大事ってこと。 strace python だけでもシステムコールがたくさん呼び出されることからも、pythonがインタープリタ言語であることがわかる。 この辺の続きを詳しく知りたければ、「linuxの仕組み」という本を読むことをお勧めします。 2章:ubuntuの導入 ubuntuはまだ一般的になっていません。と。いえ、もう一般的になっています。既知の事実がつらつらと書かれているだけですね。 3章:大規模プログラミングとライブラリの利用 複数の開発者による並行開発を実現するには、アプリケーションの分割は必須の技術。ライブラリの利用は分割プログラミングのゴール。 改めてc/c++プログラムのビルド工程 プリプロセッサによるファイルのインクルードやマクロの展開(プログラム中で#でかかれている所) アセンブラへの展開とアセンブル作業によるオブジェクトコードへの変換 オブジェクトファイルの結合やライブラリとのリンクを実施 で、コンパイルってのは「実行ファイルを作る」って意味で使われるけど、どっちかっていうと、「オブジェクトファイルを作る」って意味だな。で、ビルドが「実行ファイルを作る」だな。うん、 だから、「分割コンパイル」ってのは、どっちかというと、分割ビルド ≒ 分割したファイルをコンパイルしてリンクするってかんじ。 ライブラリの種類についてもここで説明されているので、チョットやります。 ライブラリの種類とリンク ビルド ≒ コードをコンパイルしてオブジェクトファイルの生成 + ライブラリのリンク なわけだけれど、ライブラリにはスタティックリンクとシェアードリンクの2種類があると。で、共有ライブラリのリンクはさらに、 実行形式のメモリへのロード時にリンクされる、動的リンクライブラリ 必要に応じてメモリへロード、リンクされる、動的ローディング の二つがある。 ldd ./binary で調べられるんですね。便利ですね。 んで、ライブラリをリンクする時ってのは、ライブラリが提供する関数を使いたいときだと思うんですけど、この、関数の仕様(インターフェース)がどうなっているか?を知る方法が、ヘッダーファイルなんですよねー。そうなんですよ、まさに。 だからヘッダーファイルには定義はかかないんですよね。引数と返り値だけなんです。 自分で共有ライブラリを作る方法 まずは、mainがない、関数だけの.cppと.hppを作る。 -fPICオプションをつけてコンパイルする。この時、.oファイルができる。 e.g., mylib.o g++ -shared -o libmylib.so mylib.o でshared-libraryができる。 ヘッダーファイルと作ったshared-libraryを/libにおいて完了。あとは、コンパイル時に-lmylibってつけることを忘れずに。ライブラリのリンクでよく忘れるやつね。大事だから。 g++ -o myapp myapp.cpp -L/path/to/library -lmylib でコンパイルできるよーって話ね。あと大事なの。 ...

January 17, 2023 · 6 min · 1072 words · Me

Slurmクラスタ構築日記

HPCといえばSlurmだよね ラズパイが腐るほどあるので、Slurmクラスタを作る。流れとしては、Slurmの全体像を理解してから、実際にSlurmをインストールして、クラスタを構築。んで、MPIジョブを投入できたら最高ですね。 参考文献 slurm公式 Slurmの全体像 クラスタを使って並列分散処理をしたいとき、どうするか?例えばMPIを使ってなにかを計算したいとき、どうするか?直接mpirunをすればいいよね?簡単だ。うん。ユーザがおれ一人で他の人がクラスタを使わない前提であれば直接実行していいよね。しかし、HPCシステムってのは基本的にはいろんな人に使われるんですよ。そんな時にいろんな人が同時にMPIのジョブを実行すると何が起こるか? まあ、これは予想だけど、基本的に1つのMPIプロセスに対して1つのコアが割り当てられるので、コア数を超えるプロセスが割り当てられそうなときは、mpirunの実行が失敗すると思うんですよ。 このようなリソース競合によるジョブの実行失敗などを防いだり、その他、リソースのマネジメントをするのがリソースマネジメントシステム(RMS)だよね。SlurmもRMSなわけだ。いろいろなRMSがあるわけで、その中でもSlurmの特徴が三つある。 ある一定期間、ユーザが計算資源(ノード)を占有することを許す 各ノードに対して、ジョブのスタート、実行、監視を可能にする 待ち行列内のpending jobに対して、恣意的な実行を可能にする slurmのアーキテクチャ 各ノードでslurmdデーモンが動いている。そして、マネジメントノード(マスターノード)ではslurmctldデーモンが動いている。ユーザはクライアントアプリを使って、slurmctldにアクセスし、ジョブのサブミットや、状態の確認ができる。 Slurmのインストール 参考文献 文献1 文献2(一番参考になった資料) 前提 ノード間でuidが同じユーザが作られていること これは、最初にラズパイの設定をするときにユーザ名を一律に決めておくことで解決できる。 ノード間でシステムの時刻が一致している事 これは、raspi-configのロケール設定でAsia/Tokyoを選ぶことで解決できる マスターノードのあるディレクトリをnfsとして外部にエクスポートしておくといろいろとらく マスターノード、スレーブノードのホスト名を決めておく /etc/hosts マスターノードの設定 リポジトリからのインストール sudo apt install slurm-wlm -y Slurmの設定 設定ファイルの場所は /etc/slurm/slurm.conf この場所に、デフォルトの設定ファイルを持ってくる cp /usr/share/doc/slurm-client/examples/slurm.conf.simple.gz . gzip -d slurm.conf.simple.gz mv slurm.conf.simple slurm.conf 設定ファイル(slurm.conf)の内容は厳密にかかないとだめ SlurmctldHost=node01(<ip addr of node01>) # e.g.: node01(192.168.1.14) # actual : zeta(172.20.2.1) SelectType=select/cons_res SelectTypeParameters=CR_Core ... ... ClusterName=glmdev ... ... NodeName=zeta NodeAddr=172.20.2.1 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN NodeName=slave1 NodeAddr=172.20.2.3 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN NodeName=slave2 NodeAddr=172.20.2.4 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN NodeName=slave3 NodeAddr=172.20.2.5 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN NodeName=slave4 NodeAddr=172.20.2.6 CPUs=4 Sockets=1 CoresPerSocket=4 State=UNKNOWN PartitionName=mycluster Nodes=slave[1-4] Default=YES MaxTime=INFINITE State=UP cgroup関係の設定ファイルをつくる /etc/slurm/cgroup.confに ...

January 16, 2023 · 2 min · 359 words · Me