CPUソフト割り込み&ケーススタディing

2415 ワード

1ケース


1.1環境配置


環境1:WEBサーバ
docker run -itd --name=nginx -p 80:80 nginx

環境2:SYN攻撃
curl http://xxx.xxx.xxx.xxx/



Welcome to nginx!
...

# -S   TCP   SYN( ),-p   80
# -i u100   100  
#  : ,  100  ,  10   1
$ hping3 -S -p 80 -i u1 xxx.xxx.xxx.xxx

1.2分析プロセス


1、CPU使用率は高くないがソフト割り込みは10%に達し、非idle状態のすべてからソフト割り込みに使用されている.
2、どのソフトブレークによる問題なのか確認する
watch -d cat /proc/softirqs

TIMER(タイミング割り込み)、NET_RX(ネットワーク受信)、SCHED(カーネルスケジューリング)、RCU(RCUロック)では、ネットワーク受信の変化が最も速い.
3、ネットワークの問題を確認し、引き続きネットワーク送受信パケットの状況を観察する
# -n DEV  ,  1  
sar -n DEV 1

報告時間|NIC|rxpck/s txpck/s送受信フレーム数|exkB/s txkB/s送受信KB数
  • は、NIC et 0にとって、フレーム数は112924.00大きいが、データ量は5955.00未満である.
  • は、5955.00*1024Byte/112924.00=54Byteの平均パケット当たり54バイト、すなわちパケット問題を計算する.

  • 4、バッグの確認問題
    tcpdump -i eth0 -n tcp port 80
    
    21:59:25.549573 IP  .40615 >  .http: Flags [S], seq 270293337, win 512, length 0
    21:59:25.549592 IP  .40616 >  .http: Flags [S], seq 830767629, win 512, length 0

    Flags[S]はsynパケットを表し、PPSは1.2 Wを超えてsyn flood攻撃を確認する.

    2コンセプト


    2.1ソフトブレーク概念


    linuxの割り込みはCPUの現在の作業を中断し、割り込みは一般的に設計されている短くて精悍です.しかし、Linuxの割り込みは、割り込みハンドラの実行時間が長すぎることと、割り込みが失われていることの問題を解決するために、2つの段階に分けられます.
  • の前半部は、割り込み禁止モードで動作する割り込みを迅速に処理するために使用され、主にハードウェア関連および時間的に敏感な動作
  • を処理する.
  • 下半部は、上半部の未完了作業の処理を遅延するために用いる、通常、内部コアスレッド方式で
  • を実行する.
    NIC受信パケットの例:
    ネットワークカードはパケットを受け取るとハードウェアが中断する方式で、カーネルに新しいデータが届いたことを通知します:上半部にとって、高速処理である以上、実はネットワークカードのデータをメモリに読み込んで、それからハードウェアレジスタの状態(データが読めたことを示す)を更新して、最後にもう一つのソフト中断信号を送って、下半部にさらなる処理を行うことを通知します.後半部がソフト割り込み信号で起動すると、メモリからネットワークデータを見つけ、ネットワークプロトコルスタックに従ってアプリケーションに送るまで、データを階層的に解析し、処理する必要があります.
  • 上半部はハードウェア要求を直接処理し、すなわち、我々がよく言うハード割り込みは、
  • を迅速に実行することを特徴とする.
  • 、後半部はカーネルによってトリガ、すなわち、
  • の実行を遅延することを特徴とするソフトブレーク
    実際には,前半部でCPUが実行中のタスクを中断し,直ちに割り込み処理プログラムを実行する.一方、下半部以内のコアスレッドの方式は実行され、CPUごとに1つのソフトブレークカーネルスレッドに対応し、名前は「ksoftirqd/CPU番号」であり、例えば、0番のCPUに対応するソフトブレークカーネルスレッドの名前はksoftirqd/0である.ただし、ソフト割り込みには、前述したハードウェアデバイス割り込み処理プログラムの後半部だけでなく、カーネルスケジューリングやRCUロック(Read-Copy Updateの略、RCUはLinuxカーネルで最も一般的なロックの1つ)など、カーネルカスタマイズされたイベントもソフト割り込みに属していることに注意してください.

    2.2ソフトブレークとカーネルスレッドの表示

  • cat /proc/interruptsソフトブレーク
  • cat /proc/softirqsハードブレーク