Как с fio ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ диски Π½Π° Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для etcd

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².: эта ΡΡ‚Π°Ρ‚ΡŒΡ β€” ΠΈΡ‚ΠΎΠ³ΠΈ ΠΌΠΈΠ½ΠΈ-исслСдования, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌΠΈ IBM Cloud Π² поисках Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанной с эксплуатациСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… etcd. Для нас Π±Ρ‹Π»Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π° схоТая Π·Π°Π΄Π°Ρ‡Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ…ΠΎΠ΄ Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ ΠΈ дСйствий Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсСн ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ контСкстС.

Как с fio ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ диски Π½Π° Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для etcd

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ Ρ€Π΅Π·ΡŽΠΌΠ΅ всСй ΡΡ‚Π°Ρ‚ΡŒΠΈ: fio ΠΈ etcd

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ кластСра etcd сильно зависит ΠΎΡ‚ скорости Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π² Π΅Π³ΠΎ основС. Для контроля Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ etcd экспортируСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Prometheus. Одной ΠΈΠ· Π½ΠΈΡ… являСтся wal_fsync_duration_seconds. Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ etcd говорится, Ρ‡Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ достаточно быстрым, Ссли 99-ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΡŒ этой ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 10 мс…

Если Π²Ρ‹ ΠΎΠ±Π΄ΡƒΠΌΡ‹Π²Π°Π΅Ρ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ кластСра etcd Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Linux ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, достаточно Π»ΠΈ быстры Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SSD), Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ популярным тСстСром I/O ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ fio. Достаточно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ (дирСктория test-data Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ располоТСна Π² ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ тСстируСмого накопитСля):

fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ лишь ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, укладываСтся Π»ΠΈ 99-ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΡŒ fdatasync Π² 10 мс. Если это Ρ‚Π°ΠΊ, Π·Π½Π°Ρ‡ΠΈΡ‚ ваш Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ достаточно быстро. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:

fsync/fdatasync/sync_file_range:
  sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
  sync percentiles (usec):
   | 1.00th=[ 553], 5.00th=[ 578], 10.00th=[ 594], 20.00th=[ 627],
   | 30.00th=[ 709], 40.00th=[ 750], 50.00th=[ 783], 60.00th=[ 1549],
   | 70.00th=[ 1729], 80.00th=[ 1991], 90.00th=[ 2180], 95.00th=[ 2278],
   | 99.00th=[ 2376], 99.50th=[ 9634], 99.90th=[15795], 99.95th=[15795],
   | 99.99th=[15795]

НСсколько Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ:

  1. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ подстроили ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ --size ΠΈ --bs ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ случай. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ‚ fio, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ значСния, подходящиС для вашСго сцСнария использования. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡ… Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ рассказано Π½ΠΈΠΆΠ΅.
  2. Π’ΠΎ врСмя тСстирования Ρ‚ΠΎΠ»ΡŒΠΊΠΎ fio Π½Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄ΠΈΡΠΊΠΎΠ²ΡƒΡŽ подсистСму. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ вСроятно, Ρ‡Ρ‚ΠΎ Π½Π° диск Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ процСссы (ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ связаны с wal_fsync_duration_seconds). Подобная Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ wal_fsync_duration_seconds. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли 99-ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ тСстирования с fio, лишь слСгка мСньшС 10 мс, Π²Π΅Π»ΠΈΠΊΠ° Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° нСдостаточна.
  3. Для тСста Π²Π°ΠΌ понадобится вСрсия fio Π½Π΅ Π½ΠΈΠΆΠ΅ 3.5, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»Π΅Π΅ старыС вСрсии Π½Π΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ fdatasync Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»Π΅ΠΉ.
  4. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ прСдставляСт собой лишь нСбольшой ΠΎΡ‚Ρ€Ρ‹Π²ΠΎΠΊ ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° fio.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ fio ΠΈ etcd

НСсколько слов ΠΎ WAL’Π°Ρ… etcd

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΡƒΡŽ ΠΆΡƒΡ€Π½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (write-ahead logging, WAL). etcd это Ρ‚ΠΎΠΆΠ΅ касаСтся. ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ WAL Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡Π»Π΅Π½ кластСра etcd Ρ…Ρ€Π°Π½ΠΈΡ‚ WAL Π² постоянном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. etcd записываСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с key-value-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, обновлСния) Π² WAL, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ…. Если ΡƒΠ·Π΅Π» ΡƒΠΏΠ°Π΄Π΅Ρ‚ ΠΈ пСрСзапустится Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ snapshot’Π°ΠΌΠΈ, etcd смоТСт Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ snapshot’Π°, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡΡΡŒ Π½Π° содСрТимоС WAL.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ добавляСт ΠΊΠ»ΡŽΡ‡ Π² KV-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ»ΠΈ обновляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°, etcd добавляСт описаниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² WAL, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² постоянном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, etcd Π”ΠžΠ›Π–ΠΠ Π±Ρ‹Ρ‚ΡŒ Π½Π° 100% ΡƒΠ²Π΅Ρ€Π΅Π½Π°, Ρ‡Ρ‚ΠΎ запись Π² WAL Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сохранСна. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого Π² Linux, нСдостаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСмный Π²Ρ‹Π·ΠΎΠ² write, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сама опСрация записи Π½Π° физичСский Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π°. НапримСр, Linux Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ WAL-запись Π² кэшС ядра Π² памяти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² страничном кэшС). Π§Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ записаны Π½Π° Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ, послС записи Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ систСмный Π²Ρ‹Π·ΠΎΠ² fdatasync β€” ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ поступаСт etcd (ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° strace; здСсь 8 β€” дСскриптор Ρ„Π°ΠΉΠ»Π° WAL):

21:23:09.894875 lseek(8, 0, SEEK_CUR)   = 12808 <0.000012>
21:23:09.894911 write(8, ".20210220361223255266632$1020103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8)            = 0 <0.008314>

К соТалСнию, запись Π² постоянноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя. Π—Π°Ρ‚ΡΠ½ΡƒΠ²ΡˆΠ΅Π΅ΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° fdatasync ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ etcd. Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ указываСтся, Ρ‡Ρ‚ΠΎ для достаточной ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ 99-ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ всСх Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² fdatasync ΠΏΡ€ΠΈ записи Π² Ρ„Π°ΠΉΠ» WAL Π±Ρ‹Π»Π° мСньшС 10 мс. Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, связанныС с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ, Π½ΠΎ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ± этой.

ΠžΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fio

ΠžΡ†Π΅Π½ΠΈΡ‚ΡŒ, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ Π½Π΅ΠΊΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для использования с etcd, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ fio β€” популярного тСстСра I/O. Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ дисковый Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ: sync/async, мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… классов систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ Ρ‚.ΠΏ. ΠžΠ±ΠΎΡ€ΠΎΡ‚Π½Π°Ρ сторона ΠΌΠ΅Π΄Π°Π»ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ fio Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ слоТна Π² использовании. Π£ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ мноТСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ приводят ΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ Π² случаС etcd, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° запись, гСнСрируСмая fio, максимально ΠΏΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ etcd ΠΏΡ€ΠΈ записи Π² WAL-Ρ„Π°ΠΉΠ»Ρ‹:

  • Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ гСнСрируСмая fio Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой ΡΠ΅Ρ€ΠΈΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… записСй Π² Ρ„Π°ΠΉΠ», Π³Π΄Π΅ каТдая ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи состоит ΠΈΠ· систСмного Π²Ρ‹Π·ΠΎΠ²Π° write, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт fdatasync.
  • Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ запись, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ --rw=write.
  • Π§Ρ‚ΠΎΠ±Ρ‹ fio писала с использованиСм Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² write (Π° Π½Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, pwrite), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ --ioengine=sync.
  • НаконСц, Ρ„Π»Π°Π³ --fdatasync=1 Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ write слСдуСт fdatasync.
  • Π”Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅: --size ΠΈ --bs β€” ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сцСнария использования. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ описана ΠΈΡ… настройка.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ fio ΠΈ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ

Π­Ρ‚Π° Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ° появилась ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ случая, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ. Π£ нас Π±Ρ‹Π» кластСр Π½Π° Kubernetes v1.13 с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ Π½Π° Prometheus. Π’ качСствС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° для etcd v3.2.24 выступали Ρ‚Π²Π΅Ρ€Π΄ΠΎΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΠΈ. ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ etcd ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ слишком высокиС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ fdatasync, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° кластСр простаивал. Нам эти ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ казались вСсьма ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΈ ΠΌΡ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚. Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ, кластСр состоял ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин, поэтому Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΎΡΡŒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Ρ‹Π»Π° связана с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π²ΠΎ всСм Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚Ρ‹ SSD.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ рассматривали Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ измСнСния Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, поэтому трСбовался способ ΠΈΡ… ΠΎΡ†Π΅Π½ΠΊΠΈ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ etcd Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Prometheus, Π½ΠΎ это ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ Π±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий. Нам ΠΆΠ΅ Π±Ρ‹Π» Π½ΡƒΠΆΠ΅Π½ простой способ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ. ΠœΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ своС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Prometheus, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΠΎΡ‚ etcd.

Для этого Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄Π²Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  • Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠ°ΠΊ выглядит I/O-Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, гСнСрируСмая etcd ΠΏΡ€ΠΈ записи Π² Ρ„Π°ΠΉΠ»Ρ‹ WAL? КакиС систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ? Каков Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠΎΠ² записи?
  • Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, допустим, ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ вопросы Ρƒ нас Π΅ΡΡ‚ΡŒ. Как воспроизвСсти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ с fio? Π’Π΅Π΄ΡŒ fio β€” Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ гибкая ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° с ΠΎΠ±ΠΈΠ»ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Π² этом Π»Π΅Π³ΠΊΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, здСсь Β­β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².).

ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΎΠ±Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, ΠΎΠΏΠΈΡ€Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ lsof ΠΈ strace:

  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ lsof ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ процСссом, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ относятся.
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ strace ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ процСсс ΠΈΠ»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ процСсс ΠΈ ΠΏΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° Π½ΠΈΠΌ. Команда Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ всС систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹ΠΌ процСссом ΠΈ, ΠΏΡ€ΠΈ нСобходимости, Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ. ПослСднСС Π²Π°ΠΆΠ½ΠΎ для процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ форкаСтся, ΠΈ etcd β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… процСссов.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлали, β€” использовали strace для изучСния сСрвСра etcd Π² кластСрС Kubernetes, ΠΏΠΎΠΊΠ° Ρ‚ΠΎΡ‚ простаивал.

Π’Π°ΠΊ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈ записи Π² WAL ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ‚Π½ΠΎ сгруппированы, Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π»Π΅ΠΆΠ°Π» Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 2200-2400 Π±Π°ΠΉΡ‚. ИмСнно поэтому Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π² Π½Π°Ρ‡Π°Π»Π΅ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„Π»Π°Π³ --bs=2300 (bs β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° записи Π² fio).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠΎΠ² записи etcd ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ вСрсии, deployment’Π°, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ‚.Π΄. β€” это влияСт Π½Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ fdatasync. Если Ρƒ вас ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ сцСнарий использования, ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ strace свои процСссы etcd, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния.

Π—Π°Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ ΠΈ Π²ΡΠ΅ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅Π΅ прСдставлСниС ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ etcd с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой, ΠΌΡ‹ запустили Π΅Π΅ ΠΈΠ·-ΠΏΠΎΠ΄ strace с Ρ„Π»Π°Π³Π°ΠΌΠΈ -ffttT. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ процСссы-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ свСдСния ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅ старта ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ систСмного Π²Ρ‹Π·ΠΎΠ²Π°.

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ воспользовались ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ lsof, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ своС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° strace Π² ΠΏΠ»Π°Π½Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор для ΠΊΠ°ΠΊΠΎΠΉ Ρ†Π΅Π»ΠΈ использовался. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΡΡ Π²Ρ‹Π²ΠΎΠ΄ strace, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π²Ρ‹ΡˆΠ΅. БтатистичСскиС манипуляции со Π²Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌΠΈ синхронизации ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ° wal_fsync_duration_seconds ΠΎΡ‚ etcd соотвСтствуСт Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ fdatasync с дСскрипторами Ρ„Π°ΠΉΠ»ΠΎΠ² WAL.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fio Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΎΡ‚ etcd, Π±Ρ‹Π»Π° ΠΈΠ·ΡƒΡ‡Π΅Π½Π° докумСнтация ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, подходящиС нашСй Π·Π°Π΄Π°Ρ‡Π΅. ΠœΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ задСйствованы Π½ΡƒΠΆΠ½Ρ‹Π΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ»ΠΈ ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, запустив fio ΠΈΠ· strace (ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ сдСлано Π² случаС etcd).

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π΅Π»Π΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --size. Он прСдставляСт собой ΠΎΠ±Ρ‰ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ I/O, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ fio. Π’ нашСм случаС это ΠΏΠΎΠ»Π½ΠΎΠ΅ число Π±Π°ΠΉΡ‚ΠΎΠ², записанноС Π½Π° Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ. Оно прямо ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ числу Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² write (ΠΈ fdatasync). Для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ bs количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² fdatasync Ρ€Π°Π²Π½ΠΎ size / bs.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нас интСрСсовал ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΡŒ, ΠΌΡ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΠ»ΠΈΡΡŒ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ число ΠΏΡ€ΠΎΠ± Π±Ρ‹Π»ΠΎ достаточно большим для статистичСской значимости. И Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ 10^4 (Ρ‡Ρ‚ΠΎ соотвСтствуСт Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Π² 22 Мб) Π±ΡƒΠ΄Π΅Ρ‚ достаточно. МСньшиС значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° --size Π΄Π°Π²Π°Π»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ ΡˆΡƒΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π·ΠΎΠ²Ρ‹ fdatasync, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° 99-ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΡŒ).

Π”Π΅Π»ΠΎ Π·Π° Π²Π°ΠΌΠΈ

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ fio ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ достаточно быстрым Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для использования с etcd. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅Π»ΠΎ Π·Π° Π²Π°ΠΌΠΈ! Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Π½Π° Π±Π°Π·Π΅ SSD ΠΌΠΎΠΆΠ½ΠΎ Π² сСрвисС IBM Cloud.

P.S. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Π‘ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования fio для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Ρ‚Π°ΠΌ ΠΈΡ… прСдставлСно Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ упоминаСтся Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ).

P.P.S. ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com