by shigemk2

当面は技術的なことしか書かない

Keyboard and Terminal #kernelvm

@kotatsu_mi

タイプライタ持ってきた

キーボードはタイプライタが大本

  • シフトキー→キャリッジがタイプバーが物理シフト
  • シフトロック→物理的にシフトキーをロック
  • バックスペース→キャリッジが一字戻り
  • タブキー→キャリッジが戻る場所を固定
  • キャリッジリターン→キャリッジを行頭へ
  • ラインフィード→プラッテンを回して一行送り

CRLF タイプライターの仕様を引きずっている

タイプボール

  • IBMが開発
  • フォントを変えたいときはボールを付け替える

Unix

  • シリアル簿ポートでタイプライタとマシンをつなぐ
  • TTY
  • 改行キー
  • キャリッジリターンを改行キー

DEC VT100

  • スクリーンができる
  • パソコンのキーボードが一般的になる
  • エスケープシーケンス

  • スイッチとアクチュエータ

  • 電気信号を送るのがスイッチ
  • フィードバックを受けるのがアクチュエータ
  • 今は一体化している

メカニカルスイッチ→メンブレン

ALPS黄軸スイッチ

90年台後半はALPSが主流

HHKBなど

  • 静電容量無接点方式
  • アクチュエータはラバードーム

キーボードの構造と性能/パーツの価格差はどこにある?/自作PC大図鑑

(セブンのATMも同じ)

最新

  • 千鳥格子からの脱却 TypeMatrix
  • エルゴノミクス→Kinesis

一方画面は

  • ビデオ端末をエミュレーション
  • Linuxのコンソールがターミナルエミュレータなのはそのため
  • この後に及んでタイプライタの仕様を引きずることに
  • systemdなら変えてくれるのでは

  • stty(1)←コマンド

  • 描画のタイミングが回線速度で決まる
  • sttyは使おうと思えば使える
  • Ancient UNIXから存在する
  • ポーレートやエスケープシーケンスの変更

まとめ

  • キーボードはコンピュータにおける文房具
  • 一世紀近く前のものをいまだに踏襲
  • まだまだいろいろあるよ
  • キーボードを自作するスレ

http://toro.2ch.net/test/read.cgi/hard/1209948433/

ジャーナリングの歴史 #kernelvm

@naota344

btrfsckをかけてた

Btrfsck - btrfs Wiki

ジャーナリング

  • 適当なFSを書くとFSが壊れる
  • 一貫性を持って書くべき変更が一貫性が持たれなくなる

そこでジャーナリング

ジャーナリング初出

Dorado, Dandelionなどで動いているのが初出

  • Cedar(プログラミング言語、かつプログラミング環境の名前)
  • Dorado(Lispマシン 24bit 32MBの物理ディスク)

Tridentディスク

  • 1979 Tridentディスクの標準的なフォーマット
  • 各トラック=9セクタx1120ワード

ジャーナリング以前のCedar

  • File Name Table はB-Tree
  • ラベルを用いた一貫性保証

uidはinode番号みたいなもの

  • page typeが記録される

いろいろなセクタからファイルネームが読まれる

なんかあってもすべてのメタデータが復旧できる

これからはラベルなんてつけていられれない

→ジャーナリングが導入された

FSD(File System for Dragon)

その他

EmacsがSEGVで起動しない

一回ログアウトしたらSEGVでログアウト xfnsのバグじゃねっていう

imsettingsのせいっぽい

まとめ

  • ジャーナリングの話
  • imsettingsはだめだ

Tricky implementatoin Of Go ARM soft float #kernelvm

@tetsu_koba

誰得かよく知らない

Golang for ARM Linux

  • ツールチェインのビルド
  • ソースコードを入手してコマンドを入手したらソースコードからビルドできる
$ GOOS=linux GOARCH-arm GOARM=5 make.bash

実行型のビルド

GOARM

  • GOARM=5 For armv5, no FPU, soft float
  • GOARM=6(RaspPiの初代など) For armv6 デフォルト
  • GOARM=7 For armv7 (32)

以上。

間違えなければどうということはない。

が、間違えたから理解が深まることもある

ツールチェインのビルドミス

  • GOARMを指定しないと6になる
  • デキた実行ファイルを実機に持って行って実行すると→Illegal Instruction

ランタイムライブラリがGOARM=6でビルドされているからか!

vldr d2, [r3]

やり直し。GOARM=5

逆アセンブルして確認→FPU命令がまだあるぞ

Go1.4はarmv5サポートはなくなった?

Go ARMがカーネルコンフィグに依存するとはどこにも書いていない

謎の関数 _sfloat

フロート演算のコードに共通する謎関数

_sfloat →vlop_arm.s

実体は、FPU命令のインタープリタ

pc...プログラム・カウンタ?

あ、これ、ARMの命令をインタプリタしている

プログラム・カウンタは違ったところを指している

GOARM=5と6の違い

  • どちらもFPU命令を生成
  • GOARM=5の場合はFPU命令の塊の前に_sfloatへの呼び出しが挿入される(リンカーがそれをやってる)
  • 生成されたFPU命令は同じ(コンパイラはsoft floatのための命令を生成していないので実装は楽)
  • ARMv5とかいる?みたいなまさかり

結論

  • Golangは自前でsoft float emulationする仕組みを持っている
  • カーネルのsoft float emulationは不要
  • 正しくビルドすれば動く

その他

  • アプリをビルドするときにGOARM=6にすると、カーネルが動いてFPUがあるかどうかを確認するルーチンが存在したりする
  • 失敗したぶんだけ勉強するハメになる

2015年度の自宅NAS環境 #kernelvm

@m_akihiro

root on dm-cache on lvm on dm-crypt on md(raid1)をnative uefi環境でセットアップしてみた というサブタイ

  • UEFIネイティブなブート環境について
  • bootloaderの冗長化
  • Initramfsまわりについて

はじめに

自宅NASの構成変更したい

  • dm-cryptをつかってディスク全体を暗号化したい
  • 生半可な破壊だとコロンビア号のHDDが復元された事例
  • 復旧しやすく冗長性を確保したディスク構成にしたい
  • bootloader冗長化

構成

  • dm-cacheが有効な領域
  • 安くて速いのがほしい→UEFIをつかってブートできるようにする

Debian Jessie

  • LVM on dm-crypt on MDができるインストーラを持っている
  • UEFIブートのGummibootがDebian jessieからパッケージ入り
  • Linux Kernel Versionが3.16から仕様
  • mdadm version bad block management対応してほしい

https://www.debian.org/releases/jessie/index.ja.html

ふつうにインストーラを走らせても失敗する

手動でGummibootをインストール

Installerのrescue modeからシェルを握る 暗号化ディスクをOpenする LVMのVGを有効化など

Gummiboot

ココ見ると話がはやいよ

https://wiki.archlinux.org/index.php/Gummiboot_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29

Gummiboot Bootloaderの冗長化

デフォルトだと無理なのでPatchを書く

同様の提案は上がっていたがリジェクトされていた

  • Cyptsetupは/etc/crypttabによりboot時にマウント可能
  • ただしbootのマウントに対してはハックを必要とする
  • keyfileを単に設定だけでは機能しない

DM-CACHE ROOTへのDM-CACHE適用

  • lvmからdm-cacheを扱える
  • man 7 lvmcache参照

Cache用にSSDからLVを用意してcachepoolを作成

dm-cache initramps再構成

先人がやっているやつ

initrampfsにdm-cacheマウントに必要なファイル一式ができる

FUTURE WORK

  • ここまでやるとブートするようになったのだが、実機でうまくいくのか心配
  • UEFIのファームウェアの出来に左右される

x86 CPUにejectコマンドを組み込みたい #kernelvm

http://i.ytimg.com/vi/j143csK0-qE/maxresdefault.jpg

@furandon_pig

NetBSDを日々使っていた

sudo eject /dev/cd0a

仮想マシンに組み込む

(length "pusha")
5
(length "eject")
5

cpu_x86_cpuid(使われていないIDを狙ってejectする)関数

このあたりごにょごにょするとできるんじゃないのか、というアタリ

x86にejectコマンドを組み込む→CPUID命令にからめてejectを実行するよ

僕の考えたさいきょーのVMM開発環境 #kernelvm

@deep_tkkn

  • 研究でBitVisorにLive Migrationを実装中
  • BitVisorやOSのパニックで電源ながおしが多発
  • →MACアドレスよくかわる
  • →実機の近くで作業したい

でもドヤリング嫌

リモート開発には何が必要

  • マシンの電源操作
  • パニック時でもOSの出力を表示
  • MACアドレスに依存しない
  • ブート時に起動するBitVisorやOSを選択

アプローチ

  • 電源操作はRaspberryPiで
  • 画面出力 マシン識別はシリアルコンソール
  • 起動するBitVisorやOSを選択

システム構成

シリアルケーブル

Raspberry Piによる電源操作

  • GPIOからMBのPWをショートさせる
  • GPIOの操作はSSHごし
  • 回路図はいつか書く

iPXEメニューのシリアルで表示

  • grubもシリアルで流す
  • ブート

(リモートでできる以外の)副次的なよさ

  • ブートはやい
  • 2分くらい
  • たぶんやすあがり

ARM ChromebookでLinuxをいろいろと遊んでみよう #kernelvm

かっぱー

ARM大好き

Chromebook

  • LinuxのなかにChromeOS(Gentooベース)
  • Chromeブラウザ

  • Chromebook $179-$350(安め)

ChromeOSの仕組み

ファームウェアから4つのブートローダがあり、切り替えてKernelを起動する

Linuxインストール

  • DeveloperMode
  • リカバリディスク
  • chromebookのデータをバックアップ
  • croutonスクリプトをダウンロードなど

DeveloperModeで起動

  • ChromeOS
  • Crouton

UbuntuやDebianがそのまま使えたりする

  • ARMブートローダの仕組みとx86比較
  • Linuxディストリ、FreeBSDいれかえ
  • KVMもChromebookでできるような
  • WindowsやMacOSXでもChromebook動く?
  • Acerの掲示板にWindows8のドライバをよこせと苦情が多数

RISC-V Rocket Chipを壊す #kernelvm

@ioriveur

UC-berkeleyが(また)作ったアーキテクチャ

作り過ぎだろう

RV32 RV64 (RV128 in future)

Rocket core

  • scalaで書かれたRISC-V実装
  • Rocket chipとはRISC-Vの実装であるrocket

Chiselとは

ucb-bar/chisel · GitHub

code generator to Verilog or C++(emulator)

Verilog - Wikipedia

みんなはMakefile書こうね

動かない

std::bad_alloc

Scalaが自動生成したゴミのようなC++コード

手書きの安心感

+memsize=850000000 など

scalaのコードに謎のprintf

シミュレーション

write_back stageの情報が吐かれている

クロックごとに実行される

刺さっているモジュールに書けばよい

その他

いい計算機が大学にはたくさんあるので、ふつうのレベルのマシンだとアレっぽいので要ベンチマーク

論文輪読会のすすめ #kernelvm

@suma90h

システム系論文輪読会 主宰

とは

  • とくにシステム系を定義しているわけではない
  • 特に定義していない
  • OS 分散システム ストレージ システムアーキテクチャ あたりの論文を輪読するけど、結構英語が多い

輪読会を開いた理由

  • KernelVM的なのをやりたいと思った

目的

  • システム系といってみた周辺分野を学んだり議論して理解を深める
  • 論文を読む勉強

場所

  • PFIの会議室
  • キャパ小さめ
  • 半分くらいはいつものメンバー

輪読会を始めるには

  • 人を集める(参加者全員が発表者だとモチベが上がる)
  • 会場を決める(自分の勤務先だとよい。学生は自分の大学とか)
  • 1ヶ月くらい前から公開と準備

メリット

  • 自分で論文を読むと勉強になる
  • 他の人が論文を紹介してくれる
  • Kernel/VM的な要素技術を深く学べる
  • 面識のない学生社会人と知り合いになる
  • 一般的な勉強会に参加することと似ている

まとめ

  • 修士卒業してなくても良い

http://research.preferred.jp/2014/08/system-reading/

熱血アセンブラ入門(勝手に補足) #kernelvm

@7shi

載っているアーキは40くらい

本に載っていないアーキ

  • AArch64(本執筆に間に合わなかったのでは)
  • OpenRISC
  • Blackfin

AArch64

  • movz
  • ret
  • わりとすなお

アセンブラの簡単な紹介を延々とやっている簡単な本です。

OpenRISC

  • オープンソースのRISC CPU
  • gcc本体にマージされていない

この本は基本的に最適化をかけてプロローグとエピローグを捨てている

http://myoga.web.fc2.com/prog/cpp/opti03.htm

あんまりすっきりしていなくて頭が痛い

あとからスタックポインタを動かしているので非常に気持ち悪い

実行順は遅延スロット

Blackfin

  • マイクロプロセッサ
  • 代入があんまりアセンブラぽくない
  • 必ずNOPがあってreturnしているのでちょっと気持ち悪い
  • 最初の命令は4つがセットになっているのか
  • インストラクションをfetchするコードの問題、戦略なのでは
  • R0 = R1 + R2みたいな本当に高級言語みたいな書き方

その他

  • ハードを使えない
  • 自前で操作するとアレっぽい