livaの雑記帳(2017/02)

2/28

  • ノロウィルスにやられてここ数日寝込んでいた
    • 22から今日まで何やってたっけ?
    • もっとちゃんと活動記録を付けねば

2/22

  • multibootで読み込んだmoduleはメモリ管理を始める前にどこかに退避しないと上書きしちゃって事故る。あと、ちゃんとmoduleがある領域にページを割り当ててあげよう

2/12

  • 落とし穴にハマったので
  • キャッシュクリアの話がまとまってたので、読んだ
  • hltで止めたコアをIPIで叩き起こすのが時々失敗するので、この機会にmonitor/mwaitを使ってみる
    • 一応注釈しておくと、時々失敗するのは、ちゃんと起きているか確認するのを怠っているからであって、IPIがバグってるわけではない(と思う)
    • mwaitでhlt状態になっているコアは、monitorされているアドレス(*ptr)に他のコアがメモリアクセスすると叩き起こされる
    • ただし、いくつか注意点あり
      • 割り込みとかあっても叩き起こされるので、叩き起こされた側はメモリの値が変わっている事を確認する必要がある
      • コアAが寝ても良いと判断してからmwaitするまでの間にコアBが「やっぱり起きていて欲しい」と思った時、タイミングが微妙になる
        • メモリ書き込みで叩き起こされたコアAはそのメモリに別の値を書き込んでやると良さげ
        • コアBはメモリ書き込み後もそのメモリを監視して、メモリの値が変わるまでメモリ書き込みを何度もする

2/11

  • udpパケット、送るだけ送って受け取ってないなーって思ったので、受け取った
    • 送信した事あったから知ってたけど、気分転換にやるくらいの粒度だった。udp最高
    • p_20170211_191615

2/10

  • 卒論で死んでる
    • 裏でいろいろ作業はしてるのだけど、ブログに書ける事がない
  • atomic operations on Xeon Phiのふいんき
    • __sync_lock_test_and_set
      • 960±80/30000 us
    • __sync_bool_compare_and_swap

      • 1320±70/30000 us
    • __sync_fetch_and_add(1)

      • 600±25/30000 us
    • __sync_fetch_and_add(0)

      • 625±25/30000 us
    • __sync_fetch_and_or(0)

      • 620±15/30000 us
    • __sync_add_and_fetch(1)

      • 645±15/30000 us
    • __sync_add_and_fetch(0)

      • 600±25/30000 us
    • __sync_or_and_fetch(0)

      • 645±20/30000 us
    • いろいろよくわからん。アーキテクチャー難しすぎ
      • タイル間差異はあるのかないのか微妙な所
        • パット見有意な差は無さそうだけど、無いとも言い切れない感じの傾向は出てる
      •  1足すか足さないかでなぜ差が出る