CERONで「フレッツ光回線でscpが遅かった話」(以下、参照ページ)というのを見て、僕は今までそういうことを経験したことがなかったので(もちろん、IPv6を使っている)、不思議に思って試してみた。すると、僕の環境(Linux Mint 20.2、以下Mint)のscp(おそらくUbuntu系は同じでは)は参照ページとは設定が異なっているので、問題が起こらないことが分かった。
こういうのは参照ページにコメントするといいのだろうが、Qiitaのアカウントを作るのが面倒なので、ここに書くだけにする。
具体的には、Mintのssh_configのマニュアルによれば、IPQoSオプションのデフォルトは、インタラクティブセッションの場合は"lowdelay"、非インタラクティブの場合は"throughput"とある。実際のそれらの値が何か書かれていないので調べたのだが、正確な値は分からなかった。ただ、Wikipediaにそれらしい値が書いてあった。以下に関連する設定を引用する。
Service class: DSCP Name: DSCP Value
Low-latency data: AF21, AF22, AF23: 18, 20, 22
High-throughput data: AF11, AF12, AF13: 10, 12, 14
Low-priority data: CS1: 8
上より、scpではIPQoSに10, 12, 14のどれかが指定されると推測できる(正確な値はパケットをキャプチャすれば分かるのだろうが、問題が起こっていないのと、後述のとおりIPQoSに"cs1"を指定したら問題が再現したので省略した)。
参照ページでは、IPQoSに"cs1"(8, "Lower Effort")が指定されて遅くなっていたとのことだ。それで、僕の環境でcs1を指定したら、確かに遅くなった。元々4MB/s(僕の環境はVDSLなのでアップロードは元々遅い)だったのが1MB/sくらいになった。これは参照ページと同様の値なので、現象が再現できたと思われる。
なお、IPQoSに"none"を指定しても速度は(設定しない場合と)変わらなかったので、Mintのデフォルト設定(10, 12, 14のどれか)はフレッツ光のIPv6に悪影響がないようだ。
不思議な(もやっとする)のは、参照ページには使われているLinuxのディストリビューションやバージョンが書かれておらず(単に"Linux")、参照されているssh_configのマニュアルがOpenBSDのものだったことだ。おそらく別のディストリビューションを使われているんだろうけど、ちょっと「うーむ」だ。
もう一つ腑に落ちないというか変なのは、参照ページで参照されていたフレッツの仕様書では、「トラヒッククラスフィールドの先頭6ビットに、DSCP値として8(001000)を指定することで、優先トラヒックとして転送します。」とあるが、上の表では8は"Low-priority data"で逆の意味である。どういう訳かは分からないが、実はフレッツの仕様書の記述が誤りで、「優先トラヒック」のつもりでcs1(8)を指定すると本来の低優先度で扱われて転送速度が遅くなるというオチなのかも知れない。
あ、実はフレッツは一般用サービスではここは無視していて、scpがcs1(8)を指定したから、途中のNW機器が「それなり」に扱うために遅くなるのかも知れない。まあ、僕にしてみれば、今まで「QoSなんて指定したって実際には効かない」と思って居たので、途中の機器がそんなに従順なのかは「知らんけど」だ。
ただ、v4だと問題は起こらない(参照ページにあったかは不明)ということなので、ユーザ側でなくフレッツ側の機器が関係しているのかも知れない。
→ その後、フレッツのあとのプロバイダのIPv6系統の機器によるのではないかと思った。IPv4の場合は別系統で、DS-Liteなりの処理(AFTR)が入るので影響されないのでは。
また、pingのパケットのQoSの値をcs1にしても落ちないので、ある程度の連続した流量(データ量)がある時だけ速度が下がるようで、まさにルータの帯域制御のようだ。ただ、それは自分のルータでも起こる可能性があるが、その帯域が逼迫することはまずなく、一方、プロバイダのルータ(とその先)は結構「いっぱい いっぱい」だろうから、「低プライオリティならいいか」と帯域制限されそうな気がする。 (12/9 6:06)
それから、なぜ わざわざcs1を指定する版があるのかは分からないが、昔とQoSの仕様が変わったのか、scpを作った・QoS対応にした当時は「良く分からないのでテキトーに」設定してしまったのかも知れない。あるいは、当時は本当にscpには速度を求めていなかったのかも知れない。
まあ、僕としては一件落着(というか、分かったつもり)で、"close"できたので良しである。^^