Redis のデータ永続化には スナップショットの RDB (Redis DataBase) と テキストログの AOF (Append-Only File) があります。AOF では fsync(2) によりメモリ上のデータを毎秒などの短い間隔 (always/everysec/no) でディスクに書き出すことで障害時のデータの損失をなるべく最小限にする方法が取られています。
今回は 遅延書き込み (Lazy Write Back) を行う write(2) と明示的にページキャッシュをディスクに同期する fsync(2) の動作を簡単に確認しました。
環境は Ubuntu 16.04, Go 1.8.3 です。
write(2) と fsync(2)
write(2) を見てみると write が成功してもデータがディスクにコミットされたことは保証されず, 確実な方法はすべてのデータを書き終わった後に fsync(2) を呼ぶことと書いている。
$ man 2 write
...
NOTES
A successful return from write() does not make any guarantee that data has been committed to disk. In fact, on
some buggy implementations, it does not even guarantee that space has successfully been reserved for the data.
The only way to be sure is to call fsync(2) after you are done writing all your data.
...
write(2) は 書き込み要求を受けたあとにすぐにはディスクなどブロック型デバイスに書き込まず, 定期的に pdflush がページ (仮想メモリ: Virtual Memory) を検索しディスクに書き出す 遅延書き込み (Lazy Write Back) を行っている。
fsync(2) は fd が参照するファイルをディスクに転送し, 同時にメタデータをフラッシュする。 一方, Linux ではその間に同じファイルに対して書き込みを行っている他のすべてのスレッドもブロックしてしまう。
$ man 2 fsync
...
DESCRIPTION
fsync() transfers ("flushes") all modified in-core data of (i.e., modified buffer
cache pages for) the file referred to by the file descriptor fd to the disk device
(or other permanent storage device) where that file resides. The call blocks until
the device reports that the transfer has completed. It also flushes metadata
information associated with the file (see stat(2)).
Calling fsync() does not necessarily ensure that the entry in the directory con-
taining the file has also reached disk. For that an explicit fsync() on a file
descriptor for the directory is also needed.
...
ページキャッシュに関するカーネルパラメータ
ページキャッシュに関する主なカーネルパラメータは以下。
vm.dirty_background_ratio | dirtyページの割合が設定値 (%) に達するとバックグラウンドプロセスで pdflush が呼ばれ write back スレッドが開始する。デフォルト値は10%. |
---|---|
vm.dirty_background_bytes | vm.dirty_background_ratio と異なり具体的なバイト値を指定する. デフォルト値は 0. |
vm.dirty_ratio | dirtyページの割合が設定値 (%) に達すると優先度の高いフォアグラウンドプロセスとして実行される. デフォルト値は20%. |
vm.dirty_bytes | vm.dirty_ratio と異なり具体的なバイト値を指定する. デフォルト値は 0. |
vm.dirty_writeback_centisecs | pdflush の定期実行間隔. この間隔で定期的に write back が実行される. 単位は10ms. 0は無効化.デフォルト値は500. |
vm.dirty_expire_centisecs | メモリ上のdirtyページの保持期間。この期間を超えると次回の pdflush で write back スレッドが開始する.単位は10ms. デフォルト値は3000. |
/etc/sysctl.conf に書くか /sbin/sysctl -w variable=value で設定する。設定の反映は /sbin/sysctl -p で行う。
write(2) と fsync(2) の動作確認
以下の 3つ で write(2) と fsync(2) の動作確認を行う。
- write(2): デフォルト設定
- write(2): なるべく pdflush を開始しない設定
- write(2) + fsync(2)
まずは write(2) から。 Go では syscall パッケージを使いシステムコールを発行できる。以下の write(2) を繰り返すプログラムを1分間動かす。(もちろん Go である必要はなく fio コマンド等を使う方法もある)
package main
import (
"fmt"
"os"
"syscall"
)
func main() {
fd, err := syscall.Open("/tmp/write-test.txt", syscall.O_CREAT|syscall.O_RDWR|syscall.O_APPEND, 0644)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for {
_, err := syscall.Write(fd, []byte("abc"))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
}
パラメータはデフォルト値。
$ sudo sysctl -a | egrep dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirty_writeback_centisecs = 500
vm.dirtytime_expire_seconds = 43200
dstat コマンドで確認。または vmstat 1 の bo (Blocks sent to a block device (blocks/s)) でも確認できる。
$ dstat -tv
----system---- ---procs--- ------memory-usage----- ---paging-- -dsk/total- ---system-- ----total-cpu-usage----
time |run blk new| used buff cach free| in out | read writ| int csw |usr sys idl wai hiq siq
27-08 02:19:49| 0 0 0.1| 142M 15.8M 73.2M 761M| 487k 457k|3236k 529k| 520 747 | 4 2 93 1 0 0
27-08 02:19:50| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 195 242 | 0 1 98 0 0 0
27-08 02:19:51| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 179 237 | 0 0 100 0 0 0
27-08 02:19:52| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 172 227 | 0 0 100 0 0 0
27-08 02:19:53| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 164 215 | 0 1 99 0 0 0
27-08 02:19:54| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 164 201 | 0 1 100 0 0 0
27-08 02:19:55| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 163 199 | 1 0 99 0 0 0
27-08 02:19:56| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 186 237 | 1 0 99 0 0 0
27-08 02:19:57| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 165 216 | 0 0 99 0 0 1
27-08 02:19:58| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 165 207 | 0 1 99 0 0 0
27-08 02:19:59| 0 0 0| 142M 15.8M 73.2M 761M| 0 0 | 0 0 | 154 201 | 0 0 100 0 0 0
27-08 02:20:00|1.0 0 6.0| 142M 15.8M 73.3M 761M| 0 0 | 0 0 | 365 489 | 1 3 96 0 0 0
27-08 02:20:01|1.0 0 3.0| 143M 15.8M 75.7M 758M| 0 0 | 0 0 | 479 459 | 6 45 49 0 0 0
27-08 02:20:02|1.0 0 0| 143M 15.8M 77.8M 756M| 0 0 | 0 0 | 523 450 | 7 43 50 0 0 0
27-08 02:20:03|1.0 0 0| 143M 15.8M 80.3M 753M| 0 0 | 0 0 | 541 484 | 7 44 49 0 0 0
27-08 02:20:04|1.0 0 3.0| 136M 15.8M 82.7M 758M| 0 0 | 16k 0 | 648 817 | 7 44 48 0 0 0
27-08 02:20:05|1.0 0 0| 136M 15.8M 85.1M 755M| 0 0 | 0 76k| 624 671 | 8 43 49 0 0 1
27-08 02:20:06|1.0 0 0| 136M 15.8M 87.5M 753M| 0 0 | 0 0 | 594 628 | 7 44 49 0 0 0
27-08 02:20:07|1.0 0 0| 136M 15.8M 89.8M 751M| 0 0 | 0 0 | 680 664 | 7 44 49 0 0 0
27-08 02:20:08|1.0 0 0| 136M 15.8M 92.3M 748M| 0 0 | 0 0 | 660 666 | 7 44 49 0 0 0
27-08 02:20:09|1.0 0 0| 135M 15.8M 94.6M 746M| 0 0 | 0 0 | 577 529 | 6 44 49 0 0 1
27-08 02:20:10|1.0 0 0| 136M 15.9M 97.1M 744M| 0 0 | 0 12k| 570 460 | 4 46 50 0 0 0
27-08 02:20:11|1.0 0 0| 135M 15.9M 99.6M 741M| 0 0 | 0 0 | 594 451 | 8 43 50 0 0 0
27-08 02:20:12|1.0 0 0| 135M 15.9M 102M 739M| 0 0 | 0 0 | 579 477 | 6 44 49 0 0 0
27-08 02:20:13|1.0 0 0| 136M 15.9M 104M 737M| 0 0 | 0 0 | 580 519 | 8 43 50 0 0 0
27-08 02:20:14|1.0 0 0| 135M 15.9M 106M 734M| 0 0 | 0 0 | 578 542 | 6 45 49 0 0 0
27-08 02:20:15|2.0 0 0| 135M 15.9M 109M 732M| 0 0 | 0 12k| 622 644 | 7 44 49 0 0 0
27-08 02:20:16|2.0 0 0| 136M 15.9M 111M 730M| 0 0 | 0 0 | 590 605 | 7 44 49 0 0 0
27-08 02:20:17|2.0 0 0| 136M 15.9M 114M 727M| 0 0 | 0 0 | 596 619 | 5 47 49 0 0 0
27-08 02:20:18|2.0 0 0| 136M 15.9M 116M 725M| 0 0 | 0 0 | 583 589 | 6 45 49 0 0 0
27-08 02:20:19|2.0 0 0| 135M 15.9M 119M 722M| 0 0 | 0 0 | 668 690 | 6 45 49 0 0 0
27-08 02:20:20|2.0 0 0| 136M 15.9M 121M 720M| 0 0 | 0 12k| 660 718 | 7 44 49 0 0 0
27-08 02:20:21|2.0 0 0| 136M 15.9M 124M 717M| 0 0 | 0 0 | 784 971 | 8 44 48 0 0 0
27-08 02:20:22|2.0 0 0| 135M 15.9M 126M 715M| 0 0 | 0 0 | 598 620 | 6 45 49 0 0 0
27-08 02:20:23|2.0 0 0| 135M 15.9M 129M 712M| 0 0 | 0 0 | 626 682 | 5 45 49 0 0 0
27-08 02:20:24|2.0 0 0| 135M 15.9M 131M 710M| 0 0 | 0 0 | 585 586 | 8 44 49 0 0 0
27-08 02:20:25|2.0 0 0| 136M 15.9M 134M 707M| 0 0 | 0 12k| 621 656 | 7 44 49 0 0 1
27-08 02:20:26|1.0 0 0| 135M 15.9M 136M 705M| 0 0 | 0 0 | 621 672 | 7 44 49 0 0 1
27-08 02:20:27|1.0 0 0| 136M 15.9M 139M 702M| 0 0 | 0 0 | 602 620 | 8 43 48 0 0 0
27-08 02:20:28|2.0 0 0| 135M 15.9M 141M 700M| 0 0 | 0 0 | 626 665 | 6 46 49 0 0 0
27-08 02:20:29|2.0 0 0| 135M 15.9M 144M 697M| 0 0 | 0 0 | 635 689 | 7 44 49 0 0 0
27-08 02:20:30|1.0 0 0| 135M 15.9M 146M 695M| 0 0 | 0 12k| 591 614 | 8 43 49 0 0 0
27-08 02:20:31|1.0 0 0| 136M 15.9M 149M 692M| 0 0 | 0 0 | 598 619 | 7 44 49 0 0 0
27-08 02:20:32|2.0 0 0| 135M 15.9M 152M 689M| 0 0 | 0 0 | 618 663 | 7 44 49 0 0 0
27-08 02:20:33|1.0 0 0| 136M 15.9M 154M 687M| 0 0 | 0 79M| 480 445 | 6 46 48 1 0 0
27-08 02:20:34|1.0 0 0| 136M 15.9M 157M 684M| 0 0 | 0 0 | 518 453 | 7 43 50 0 0 0
27-08 02:20:35|1.0 0 0| 136M 15.9M 159M 682M| 0 0 | 0 40k| 538 481 | 7 44 49 0 0 1
27-08 02:20:36|1.0 0 0| 135M 15.9M 162M 679M| 0 0 | 0 0 | 520 467 | 6 44 50 0 0 0
27-08 02:20:37|1.0 0 0| 136M 15.9M 164M 676M| 0 0 | 0 0 | 525 470 | 7 44 49 0 0 0
27-08 02:20:38|4.0 0 0| 136M 15.9M 167M 674M| 0 0 | 0 48k| 544 545 | 6 45 49 0 0 0
27-08 02:20:39|1.0 0 0| 136M 15.9M 170M 671M| 0 0 | 0 0 | 478 453 | 5 45 50 0 0 1
27-08 02:20:40|2.0 0 0| 136M 15.9M 172M 669M| 0 0 | 0 0 | 494 469 | 6 45 50 0 0 0
27-08 02:20:41|1.0 0 0| 136M 15.9M 174M 666M| 0 0 | 0 0 | 567 504 | 8 42 50 0 0 0
27-08 02:20:42|1.0 0 0| 136M 15.9M 177M 664M| 0 0 | 0 0 | 550 490 | 7 44 50 0 0 0
27-08 02:20:43|2.0 0 0| 136M 15.9M 179M 661M| 0 0 | 0 20k| 550 466 | 7 44 49 0 0 0
27-08 02:20:44|1.0 0 0| 136M 15.9M 182M 658M| 0 0 | 0 0 | 606 491 | 6 45 50 0 0 0
27-08 02:20:45|1.0 0 0| 136M 15.9M 184M 656M| 0 0 | 0 0 | 605 511 | 7 44 50 0 0 0
27-08 02:20:46|2.0 0 0| 136M 15.9M 187M 653M| 0 0 | 0 0 | 651 628 | 5 46 49 0 0 0
27-08 02:20:47|2.0 0 0| 136M 15.9M 189M 651M| 0 0 | 0 0 | 703 633 | 6 45 49 0 0 1
27-08 02:20:48|3.0 0 0| 136M 15.9M 192M 648M| 0 0 | 0 12k| 661 649 | 7 44 49 0 0 0
27-08 02:20:49|3.0 0 0| 136M 15.9M 194M 646M| 0 0 | 0 0 | 655 633 | 8 42 49 0 0 1
27-08 02:20:50|3.0 0 0| 136M 15.9M 196M 643M| 0 0 | 0 0 | 622 647 | 6 45 49 0 0 0
27-08 02:20:51|1.0 0 0| 136M 15.9M 199M 641M| 0 0 | 0 0 | 602 543 | 6 44 50 0 0 0
27-08 02:20:52|1.0 0 0| 137M 15.9M 201M 638M| 0 0 | 0 0 | 569 537 | 7 44 49 0 0 0
27-08 02:20:53|1.0 0 0| 137M 15.9M 204M 636M| 0 0 | 0 12k| 630 665 | 7 44 49 0 0 0
27-08 02:20:54|1.0 0 0| 137M 15.9M 206M 633M| 0 0 | 0 0 | 622 670 | 7 44 49 0 0 0
27-08 02:20:55|2.0 0 0| 137M 15.9M 209M 631M| 0 0 | 0 0 | 624 661 | 6 45 49 0 0 0
27-08 02:20:56|1.0 0 0| 137M 15.9M 212M 628M| 0 0 | 0 0 | 649 704 | 6 44 49 0 0 0
27-08 02:20:57|2.0 0 0| 137M 15.9M 214M 625M| 0 0 | 0 0 | 588 611 | 9 42 49 0 0 0
27-08 02:20:58|1.0 0 0| 137M 15.9M 217M 623M| 0 0 | 0 12k| 600 630 | 8 43 49 0 0 0
27-08 02:20:59|2.0 0 0| 137M 15.9M 219M 620M| 0 0 | 0 0 | 603 627 | 8 42 49 0 0 0
27-08 02:21:00|2.0 0 1.0| 137M 15.9M 222M 617M| 0 0 | 0 0 | 674 744 | 6 45 49 0 0 0
27-08 02:21:01| 0 0 0| 137M 15.9M 223M 616M| 0 0 | 0 0 | 393 435 | 3 19 78 0 0 0
27-08 02:21:02| 0 0 0| 137M 15.9M 223M 617M| 0 0 | 0 0 | 183 224 | 0 0 100 0 0 0
27-08 02:21:03| 0 0 0| 137M 15.9M 223M 616M| 0 0 |4096B 71M| 199 234 | 0 2 98 0 0 0
27-08 02:21:04| 0 0 0| 137M 15.9M 223M 616M| 0 0 | 0 0 | 182 227 | 0 0 100 0 0 0
27-08 02:21:05| 0 0 0| 137M 15.9M 223M 616M| 0 0 | 0 0 | 191 222 | 0 0 100 0 0 0
27-08 02:21:06| 0 0 0| 137M 15.9M 223M 616M| 0 0 | 0 0 | 170 209 | 0 1 99 0 0 0
27-08 02:21:07| 0 0 0| 137M 15.9M 223M 616M| 0 0 | 0 0 | 182 214 | 1 1 99 0 0 0
27-08 02:21:08| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 60k| 213 255 | 0 0 100 0 0 0
27-08 02:21:09| 0 0 1.0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 200 232 | 1 1 99 0 0 0
27-08 02:21:10| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 131 208 | 0 1 99 0 0 1
27-08 02:21:11| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 175 334 | 1 0 99 0 0 0
27-08 02:21:12| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 152 242 | 0 0 100 0 0 0
27-08 02:21:13| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 130 210 | 1 1 99 0 0 0
27-08 02:21:14| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 140 222 | 0 0 100 0 0 0
27-08 02:21:15| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 129 201 | 1 1 99 0 0 0
27-08 02:21:16| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 135 200 | 0 1 99 0 0 0
27-08 02:21:17| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 122 182 | 1 1 99 0 0 0
27-08 02:21:18| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 127 186 | 0 0 100 0 0 0
27-08 02:21:19| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 188 289 | 1 0 99 0 0 0
27-08 02:21:20| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 228 254 | 0 1 99 0 0 0
27-08 02:21:21| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 294 421 | 0 2 98 0 0 0
27-08 02:21:22| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 173 181 | 0 0 99 0 0 0
27-08 02:21:23| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 175 182 | 0 0 100 0 0 0
27-08 02:21:24| 0 0 1.0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 245 260 | 0 1 99 0 0 0
27-08 02:21:25| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 243 226 | 1 1 99 0 0 0
27-08 02:21:26| 0 0 0| 137M 16.0M 223M 616M| 0 0 | 0 0 | 191 216 | 0 1 99 0 0 1
30秒毎に pdflush が起動しディスクに書き込み (79M + 71M) を行っている。
続いて, write(2) で以下のようになるべく pdflush を開始しない設定。
$ sudo sysctl -a | egrep dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 90
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 0
vm.dirty_ratio = 90
vm.dirty_writeback_centisecs = 0
vm.dirtytime_expire_seconds = 43200
dstat で確認。
$ dstat -tv
----system---- ---procs--- ------memory-usage----- ---paging-- -dsk/total- ---system-- ----total-cpu-usage----
time |run blk new| used buff cach free| in out | read writ| int csw |usr sys idl wai hiq siq
27-08 02:24:49| 0 0 0.1| 136M 16.1M 73.4M 767M| 487k 457k|3235k 529k| 520 747 | 4 2 93 1 0 0
27-08 02:24:50| 0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 173 244 | 0 1 100 0 0 0
27-08 02:24:51|1.0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 172 240 | 0 0 100 0 0 0
27-08 02:24:52| 0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 162 220 | 0 1 99 0 0 0
27-08 02:24:53| 0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 160 232 | 1 1 99 0 0 0
27-08 02:24:54| 0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 177 244 | 0 0 100 0 0 0
27-08 02:24:55| 0 0 2.0| 136M 16.1M 73.4M 767M| 16k 0 | 16k 0 | 212 350 | 1 1 98 0 0 0
27-08 02:24:56| 0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 180 251 | 0 1 99 0 0 0
27-08 02:24:57| 0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 184 211 | 0 0 100 0 0 0
27-08 02:24:58| 0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 151 199 | 0 0 100 0 0 0
27-08 02:24:59| 0 0 0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 199 197 | 1 1 99 0 0 0
27-08 02:25:00| 0 0 1.0| 136M 16.1M 73.4M 767M| 0 0 | 0 0 | 226 239 | 1 1 99 0 0 0
27-08 02:25:01|9.0 0 27| 141M 16.2M 75.4M 759M| 0 0 | 32k 48k|2337 2796 | 12 26 62 0 0 0
27-08 02:25:02|2.0 0 0| 141M 16.2M 77.7M 758M| 0 0 | 0 0 | 617 578 | 5 45 49 0 0 0
27-08 02:25:03|2.0 0 0| 141M 16.2M 80.2M 755M| 0 0 | 0 0 | 618 592 | 9 42 49 0 0 0
27-08 02:25:04|1.0 0 0| 141M 16.2M 82.5M 753M| 0 0 | 0 0 | 560 553 | 6 45 49 0 0 1
27-08 02:25:05|3.0 0 0| 141M 16.2M 84.9M 750M| 0 0 | 0 0 | 569 576 | 6 44 49 0 0 0
27-08 02:25:06|2.0 0 0| 141M 16.2M 87.4M 748M| 0 0 | 0 96k| 575 578 | 9 42 49 0 0 0
27-08 02:25:07|1.0 0 0| 141M 16.2M 89.9M 745M| 0 0 | 0 0 | 609 626 | 6 45 49 0 0 1
27-08 02:25:08|2.0 0 0| 141M 16.2M 92.4M 743M| 0 0 | 0 0 | 626 660 | 4 46 50 0 0 0
27-08 02:25:09|2.0 0 0| 141M 16.2M 94.8M 740M| 0 0 | 0 0 | 573 553 | 8 43 49 0 0 0
27-08 02:25:10|2.0 0 0| 141M 16.2M 97.3M 738M| 0 0 | 0 0 | 548 535 | 6 44 49 0 0 0
27-08 02:25:11|2.0 0 0| 141M 16.2M 99.8M 735M| 0 0 | 0 12k| 614 643 | 8 43 49 0 0 0
27-08 02:25:12|1.0 0 0| 141M 16.2M 102M 733M| 0 0 | 0 0 | 636 675 | 8 43 49 0 0 0
27-08 02:25:13|2.0 0 0| 141M 16.2M 105M 730M| 0 0 | 0 0 | 619 634 | 10 41 49 0 0 0
27-08 02:25:14|2.0 0 0| 141M 16.2M 107M 728M| 0 0 | 0 0 | 643 673 | 9 42 49 0 0 0
27-08 02:25:15|2.0 0 0| 141M 16.2M 110M 726M| 0 0 | 0 0 | 604 615 | 7 43 49 0 0 1
27-08 02:25:16|2.0 0 0| 141M 16.2M 112M 723M| 0 0 | 0 12k| 596 598 | 8 43 49 0 0 0
27-08 02:25:17|2.0 0 0| 141M 16.2M 115M 720M| 0 0 | 0 0 | 632 659 | 6 45 49 0 0 0
27-08 02:25:18|2.0 0 0| 141M 16.2M 117M 718M| 0 0 | 0 0 | 654 686 | 6 45 49 0 0 0
27-08 02:25:19|2.0 0 0| 141M 16.2M 120M 715M| 0 0 | 0 0 | 649 683 | 8 43 49 0 0 1
27-08 02:25:20|2.0 0 0| 141M 16.2M 123M 713M| 0 0 | 0 0 | 630 678 | 7 44 49 0 0 0
27-08 02:25:21|2.0 0 0| 141M 16.2M 125M 710M| 0 0 | 0 12k| 694 758 | 8 44 48 0 0 0
27-08 02:25:22|2.0 0 0| 141M 16.2M 128M 707M| 0 0 | 0 0 | 615 629 | 7 44 49 0 0 0
27-08 02:25:23|2.0 0 0| 141M 16.2M 130M 705M| 0 0 | 0 0 | 601 640 | 7 44 49 0 0 1
27-08 02:25:24|2.0 0 0| 141M 16.2M 133M 703M| 0 0 | 0 0 | 595 618 | 6 44 49 0 0 0
27-08 02:25:25|1.0 0 0| 141M 16.2M 135M 700M| 0 0 | 0 0 | 587 605 | 7 44 49 0 0 0
27-08 02:25:26|1.0 0 0| 141M 16.2M 138M 697M| 0 0 | 0 12k| 583 601 | 9 42 49 0 0 0
27-08 02:25:27|3.0 0 0| 141M 16.2M 140M 695M| 0 0 | 0 0 | 618 648 | 6 45 49 0 0 0
27-08 02:25:28|2.0 0 0| 141M 16.2M 143M 692M| 0 0 | 0 0 | 641 696 | 7 44 49 0 0 0
27-08 02:25:29|1.0 0 0| 141M 16.2M 145M 690M| 0 0 | 0 0 | 596 610 | 9 43 49 0 0 0
27-08 02:25:30|2.0 0 0| 141M 16.2M 147M 688M| 0 0 | 0 0 | 586 627 | 7 44 49 0 0 0
27-08 02:25:31|2.0 0 0| 141M 16.2M 150M 686M| 0 0 | 0 12k| 612 665 | 5 46 49 0 0 0
27-08 02:25:32|2.0 0 0| 141M 16.2M 152M 683M| 0 0 | 0 0 | 585 600 | 8 43 49 0 0 0
27-08 02:25:33|3.0 0 0| 141M 16.2M 155M 681M| 0 0 | 0 0 | 597 574 | 9 42 49 0 0 1
27-08 02:25:34|2.0 0 0| 141M 16.2M 157M 678M| 0 0 | 0 0 | 648 662 | 7 44 49 0 0 0
27-08 02:25:35|1.0 0 0| 141M 16.2M 160M 676M| 0 0 | 0 0 | 599 545 | 9 42 49 0 0 0
27-08 02:25:36|1.0 0 0| 141M 16.2M 162M 673M| 0 0 | 0 12k| 530 422 | 7 44 50 0 0 0
27-08 02:25:37|1.0 0 0| 141M 16.2M 165M 671M| 0 0 | 0 0 | 604 499 | 8 42 50 0 0 0
27-08 02:25:38|1.0 0 0| 141M 16.2M 167M 668M| 0 0 | 0 0 | 649 627 | 6 45 49 0 0 0
27-08 02:25:39|2.0 0 0| 141M 16.2M 170M 666M| 0 0 | 0 0 | 619 627 | 7 44 49 0 0 0
27-08 02:25:40|1.0 0 0| 141M 16.2M 172M 663M| 0 0 | 0 0 | 582 568 | 8 43 49 0 0 0
27-08 02:25:41|1.0 0 0| 141M 16.2M 175M 660M| 0 0 | 0 12k| 526 480 | 7 44 49 0 0 0
27-08 02:25:42|1.0 0 0| 141M 16.2M 178M 658M| 0 0 | 0 0 | 556 544 | 7 43 49 0 0 0
27-08 02:25:43|2.0 0 0| 141M 16.2M 180M 655M| 0 0 | 0 0 | 610 643 | 8 43 49 0 0 0
27-08 02:25:44|2.0 0 0| 141M 16.2M 183M 652M| 0 0 | 0 0 | 663 719 | 7 44 49 0 0 1
27-08 02:25:45|2.0 0 0| 141M 16.2M 185M 650M| 0 0 | 0 0 | 638 679 | 7 44 49 0 0 0
27-08 02:25:46|2.0 0 0| 141M 16.2M 188M 647M| 0 0 | 0 12k| 628 664 | 6 45 49 0 0 0
27-08 02:25:47|2.0 0 0| 141M 16.2M 191M 644M| 0 0 | 0 0 | 634 684 | 6 45 49 0 0 0
27-08 02:25:48|1.0 0 0| 141M 16.2M 193M 642M| 0 0 | 0 0 | 652 703 | 8 43 49 0 0 0
27-08 02:25:49|1.0 0 0| 141M 16.2M 196M 639M| 0 0 | 0 0 | 595 593 | 7 45 49 0 0 1
27-08 02:25:50|1.0 0 0| 141M 16.2M 198M 636M| 0 0 | 0 0 | 582 589 | 9 42 49 0 0 0
27-08 02:25:51|2.0 0 0| 141M 16.2M 201M 634M| 0 0 | 0 12k| 667 715 | 6 46 49 0 0 0
27-08 02:25:52|2.0 0 0| 142M 16.2M 203M 631M| 0 0 | 0 0 | 662 694 | 6 46 49 0 0 0
27-08 02:25:53|2.0 0 0| 142M 16.2M 206M 628M| 0 0 | 0 0 | 661 720 | 4 48 49 0 0 0
27-08 02:25:54|2.0 0 0| 142M 16.2M 209M 626M| 0 0 | 0 0 | 682 731 | 6 46 49 0 0 0
27-08 02:25:55|2.0 0 0| 142M 16.2M 211M 623M| 0 0 | 0 0 | 630 661 | 9 42 49 0 0 0
27-08 02:25:56|2.0 0 0| 142M 16.2M 214M 620M| 0 0 | 0 12k| 648 674 | 8 43 48 0 0 0
27-08 02:25:57|1.0 0 0| 142M 16.2M 216M 618M| 0 0 | 0 0 | 634 657 | 5 46 49 0 0 0
27-08 02:25:58|2.0 0 0| 142M 16.2M 219M 615M| 0 0 | 0 0 | 557 546 | 7 44 49 0 0 0
27-08 02:25:59|2.0 0 0| 142M 16.2M 221M 613M| 0 0 | 0 0 | 633 678 | 6 45 49 0 0 0
27-08 02:26:00|1.0 0 1.0| 142M 16.2M 224M 610M| 0 0 | 0 0 | 553 598 | 7 44 49 0 0 0
27-08 02:26:01| 0 0 0| 137M 16.2M 224M 615M| 0 0 | 0 12k| 317 378 | 3 22 75 0 0 0
27-08 02:26:02| 0 0 0| 138M 16.2M 224M 615M| 0 0 | 0 0 | 116 192 | 0 1 100 0 0 0
27-08 02:26:03| 0 0 0| 137M 16.2M 224M 615M| 0 0 | 0 0 | 125 219 | 0 1 99 0 0 0
27-08 02:26:04| 0 0 0| 137M 16.2M 224M 615M| 0 0 | 0 0 | 126 197 | 1 0 100 0 0 0
27-08 02:26:05| 0 0 0| 137M 16.2M 224M 615M| 0 0 | 0 0 | 134 211 | 0 0 100 0 0 0^
pdflush が起動しないことを確認。 (5秒ごとに 12k 書かれているのは原因が掴めていない)
最後に fsync(2) の動作確認。 先程と異なるのは write(2) の直後に fsync(2) を実行している点。
package main
import (
"fmt"
"os"
"syscall"
)
func main() {
fd, err := syscall.Open("/tmp/write-test.txt", syscall.O_CREAT|syscall.O_RDWR|syscall.O_APPEND, 0644)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for {
_, err := syscall.Write(fd, []byte("abc"))
err = syscall.Fsync(fd)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
}
dstat で確認。
$ dstat -tv
----system---- ---procs--- ------memory-usage----- ---paging-- -dsk/total- ---system-- ----total-cpu-usage----
time |run blk new| used buff cach free| in out | read writ| int csw |usr sys idl wai hiq siq
27-08 02:28:55| 0 0 0.1| 136M 17.0M 74.3M 765M| 487k 457k|3235k 529k| 520 747 | 4 2 93 1 0 0
27-08 02:28:56| 0 0 0| 136M 17.0M 74.3M 765M| 0 0 | 0 0 | 108 180 | 0 0 99 0 0 0
27-08 02:28:57| 0 0 0| 136M 17.0M 74.3M 765M| 0 0 | 0 0 | 125 195 | 1 0 99 0 0 0
27-08 02:28:58| 0 0 0| 136M 17.0M 74.3M 765M| 0 0 | 0 0 | 104 175 | 0 1 100 0 0 0
27-08 02:28:59| 0 0 0| 136M 17.0M 74.3M 765M| 0 0 | 0 0 | 125 189 | 0 1 99 0 0 0
27-08 02:29:00|1.0 0 19| 160M 17.0M 74.3M 740M| 0 0 | 0 8192B|1586 2286 | 8 6 86 0 0 0
27-08 02:29:01|1.0 0 6.0| 143M 25.8M 75.4M 748M| 0 0 | 0 18M| 12k 17k| 3 21 51 25 0 0
27-08 02:29:02| 0 1.0 0| 143M 35.1M 75.4M 739M| 0 0 | 0 19M| 12k 17k| 1 17 54 28 0 0
27-08 02:29:03| 0 1.0 0| 143M 44.6M 75.4M 729M| 0 0 | 0 19M| 13k 17k| 1 20 52 27 0 0
27-08 02:29:04|1.0 0 0| 142M 53.5M 75.3M 721M| 0 0 | 0 18M| 13k 19k| 1 18 56 25 0 1
27-08 02:29:05|2.0 0 0| 142M 62.4M 75.4M 712M| 0 0 | 0 18M| 13k 19k| 1 20 55 24 0 0
27-08 02:29:06|1.0 0 0| 142M 71.7M 75.4M 703M| 0 0 | 0 19M| 13k 19k| 1 19 57 24 0 0
27-08 02:29:07|2.0 0 0| 142M 80.6M 75.4M 694M| 0 0 | 0 18M| 13k 19k| 0 18 57 25 0 0
27-08 02:29:08|1.0 0 0| 142M 89.7M 75.4M 685M| 0 0 | 0 18M| 13k 19k| 1 15 59 25 0 0
27-08 02:29:09|1.0 0 0| 143M 98.2M 75.4M 676M| 0 0 | 0 18M| 13k 18k| 1 15 58 26 0 0
27-08 02:29:10|2.0 0 0| 142M 101M 75.4M 674M| 0 0 | 0 17M| 13k 18k| 0 19 57 25 0 0
27-08 02:29:11|2.0 0 0| 142M 101M 75.4M 674M| 0 0 | 0 18M| 13k 19k| 1 20 55 24 0 0
27-08 02:29:12|1.0 0 0| 142M 101M 75.4M 674M| 0 0 | 0 17M| 13k 18k| 1 19 55 25 0 1
27-08 02:29:13| 0 1.0 0| 142M 101M 75.4M 674M| 0 0 | 0 19M| 12k 17k| 1 19 52 28 0 0
27-08 02:29:14| 0 1.0 1.0| 142M 101M 75.4M 674M| 0 0 | 0 19M| 13k 17k| 0 18 54 28 0 0
27-08 02:29:15|1.0 0 0| 142M 101M 75.4M 674M| 0 0 | 0 20M| 13k 18k| 1 18 53 28 0 0
27-08 02:29:16|2.0 0 0| 142M 101M 75.4M 674M| 0 0 | 0 18M| 13k 19k| 1 17 57 25 0 0
27-08 02:29:17|1.0 0 0| 142M 101M 75.4M 674M| 0 0 | 0 18M| 13k 19k| 0 19 57 24 0 0
27-08 02:29:18|1.0 0 0| 143M 101M 75.4M 673M| 0 0 | 0 18M| 13k 19k| 1 18 56 25 0 1
27-08 02:29:19|1.0 1.0 0| 142M 101M 75.4M 673M| 0 0 | 0 19M| 14k 20k| 0 19 57 24 0 0
27-08 02:29:20|1.0 0 0| 142M 101M 75.4M 673M| 0 0 | 0 18M| 13k 19k| 1 16 57 26 0 0
27-08 02:29:21|1.0 1.0 0| 142M 107M 75.4M 668M| 0 0 | 0 22M| 10k 21k| 1 20 57 22 0 0
27-08 02:29:22|1.0 1.0 0| 143M 111M 75.5M 663M| 0 0 | 0 24M|8291 22k| 1 23 56 20 0 1
27-08 02:29:23|1.0 1.0 0| 143M 114M 75.4M 661M| 0 0 | 0 25M|8270 22k| 0 22 58 21 0 0
27-08 02:29:24|1.0 1.0 0| 143M 120M 75.4M 654M| 0 0 | 0 25M|8334 22k| 0 21 58 21 0 0
27-08 02:29:25|1.0 1.0 0| 143M 122M 75.5M 652M| 0 0 | 0 25M|8385 23k| 1 18 59 22 0 0
27-08 02:29:26|1.0 0 0| 143M 126M 75.5M 648M| 0 0 | 0 21M| 11k 21k| 1 20 59 21 0 0
27-08 02:29:27|1.0 1.0 0| 143M 130M 75.5M 643M| 0 0 | 0 20M| 11k 21k| 0 19 59 22 0 0
27-08 02:29:28|1.0 1.0 0| 143M 132M 75.4M 642M| 0 0 | 0 20M| 11k 21k| 0 19 59 21 0 0
27-08 02:29:29|1.0 1.0 0| 143M 132M 75.5M 642M| 0 0 | 0 21M| 11k 22k| 1 18 60 21 0 0
27-08 02:29:30|1.0 0 0| 143M 135M 75.4M 638M| 0 0 | 0 21M| 11k 22k| 0 16 62 22 0 0
27-08 02:29:31|1.0 1.0 0| 143M 137M 75.5M 636M| 0 0 | 0 21M| 11k 22k| 0 19 60 21 0 0
27-08 02:29:32|1.0 1.0 0| 143M 137M 75.5M 636M| 0 0 | 0 21M| 11k 22k| 1 20 60 20 0 0
27-08 02:29:33|2.0 0 0| 143M 140M 75.5M 633M| 0 0 | 0 20M| 13k 18k| 1 17 53 29 0 0
27-08 02:29:34| 0 1.0 0| 143M 143M 75.5M 631M| 0 0 | 0 20M| 14k 19k| 1 19 53 27 0 0
27-08 02:29:35| 0 1.0 0| 143M 143M 75.5M 631M| 0 0 | 0 20M| 13k 18k| 1 16 55 28 0 0
27-08 02:29:36| 0 1.0 0| 143M 143M 75.5M 631M| 0 0 | 0 19M| 13k 18k| 0 18 53 29 0 0
27-08 02:29:37| 0 1.0 0| 143M 143M 75.5M 631M| 0 0 | 0 20M| 14k 19k| 1 18 53 28 0 0
27-08 02:29:38|1.0 0 0| 143M 143M 75.5M 631M| 0 0 | 0 19M| 13k 18k| 1 16 54 29 0 0
27-08 02:29:39| 0 1.0 0| 143M 143M 75.5M 631M| 0 0 | 0 20M| 13k 18k| 0 19 53 28 0 0
27-08 02:29:40|2.0 0 0| 143M 143M 75.5M 631M| 0 0 | 0 20M| 13k 18k| 1 20 52 28 0 0
27-08 02:29:41|1.0 0 0| 143M 143M 75.5M 631M| 0 0 | 0 21M| 11k 21k| 1 20 58 22 0 0
27-08 02:29:42|1.0 0 0| 143M 143M 75.5M 631M| 0 0 | 0 20M| 11k 21k| 1 21 58 21 0 0
27-08 02:29:43|1.0 1.0 0| 143M 143M 75.5M 631M| 0 0 | 0 21M| 11k 22k| 0 21 59 21 0 0
27-08 02:29:44|1.0 1.0 0| 143M 143M 75.6M 631M| 0 0 | 0 22M| 11k 22k| 0 19 60 21 0 0
27-08 02:29:45|2.0 0 0| 143M 143M 75.6M 631M| 0 0 | 0 21M| 11k 21k| 1 20 60 20 0 0
27-08 02:29:46|1.0 0 0| 143M 143M 75.6M 630M| 0 0 | 0 21M| 11k 22k| 0 18 61 21 0 1
27-08 02:29:47|1.0 0 0| 143M 143M 75.6M 630M| 0 0 | 0 21M| 11k 22k| 1 20 59 20 0 0
27-08 02:29:48|1.0 1.0 0| 143M 143M 75.6M 630M| 0 0 | 0 20M| 11k 21k| 1 16 61 22 0 0
27-08 02:29:49|1.0 1.0 0| 143M 143M 75.6M 630M| 0 0 | 0 20M| 11k 21k| 1 22 57 20 0 0
27-08 02:29:50|1.0 0 0| 143M 143M 75.6M 630M| 0 0 | 0 20M| 11k 21k| 0 16 63 21 0 0
27-08 02:29:51|1.0 0 0| 143M 143M 75.6M 630M| 0 0 | 0 21M| 11k 22k| 1 21 59 20 0 0
27-08 02:29:52|1.0 0 0| 143M 143M 75.6M 630M| 0 0 | 0 21M| 11k 22k| 0 20 60 21 0 0
27-08 02:29:53|1.0 1.0 0| 143M 143M 75.6M 630M| 0 0 | 0 21M| 11k 22k| 0 18 61 21 0 0
27-08 02:29:54|1.0 1.0 0| 143M 143M 75.6M 631M| 0 0 | 0 21M| 11k 22k| 0 20 60 20 0 0
27-08 02:29:55|1.0 0 0| 143M 143M 75.6M 631M| 0 0 | 0 21M| 11k 22k| 1 19 59 21 0 0
27-08 02:29:56|1.0 0 0| 143M 143M 75.6M 630M| 0 0 | 0 21M| 11k 21k| 1 18 60 21 0 0
27-08 02:29:57|1.0 1.0 0| 143M 143M 75.6M 630M| 0 0 | 0 20M| 11k 21k| 1 19 59 21 0 0
27-08 02:29:58|1.0 0 0| 143M 143M 75.6M 630M| 0 0 | 0 21M| 11k 21k| 0 20 58 20 0 1
27-08 02:29:59|2.0 1.0 0| 143M 143M 75.6M 630M| 0 0 | 0 20M| 11k 21k| 1 20 60 20 0 0
27-08 02:30:00|1.0 0 0| 143M 143M 75.6M 630M| 0 0 | 0 20M| 11k 21k| 1 15 62 22 0 0
27-08 02:30:01| 0 0 1.0| 137M 143M 74.5M 638M| 0 0 | 0 1340k| 911 1688 | 1 1 97 1 0 0
27-08 02:30:02| 0 0 3.0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 163 290 | 1 1 99 0 0 0
27-08 02:30:03| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 132 197 | 0 1 99 0 0 0
27-08 02:30:04| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 140 234 | 1 0 99 0 0 0
27-08 02:30:05| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 121 195 | 1 1 99 0 0 0
27-08 02:30:06| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 148 232 | 0 1 99 0 0 0
27-08 02:30:07| 0 0 1.0| 137M 143M 74.5M 638M| 0 0 | 0 80k| 175 264 | 1 1 99 0 0 0
27-08 02:30:08| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 114 205 | 1 1 99 0 0 0
27-08 02:30:09| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 118 197 | 0 1 99 0 0 0
27-08 02:30:10| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 121 194 | 1 0 99 0 0 0
27-08 02:30:11| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 123 205 | 1 0 99 0 0 0
27-08 02:30:12| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 104 175 | 0 0 100 0 0 0
27-08 02:30:13| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 121 207 | 1 1 99 0 0 0
27-08 02:30:14| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 124 207 | 0 0 100 0 0 0
27-08 02:30:15| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 156 253 | 1 1 99 0 0 0
27-08 02:30:16| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 119 219 | 0 1 99 0 0 0
27-08 02:30:17| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 141 217 | 0 1 100 0 0 0
27-08 02:30:18| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 125 191 | 0 0 100 0 0 0
27-08 02:30:19| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 151 202 | 0 1 99 0 0 1
27-08 02:30:20| 0 0 1.0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 163 252 | 0 1 99 0 0 0
27-08 02:30:21| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 174 252 | 0 1 99 0 0 0
27-08 02:30:22| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 279 454 | 1 1 98 0 0 0
27-08 02:30:23| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 224 245 | 1 1 99 0 0 0
27-08 02:30:24| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 157 206 | 1 0 99 0 0 0
27-08 02:30:25|1.0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 190 238 | 0 1 99 0 0 0
27-08 02:30:26| 0 0 0| 137M 143M 74.5M 638M| 0 0 | 0 0 | 174 182 | 1 1 99 0 0 0
27-08 02:30:27| 0 0 1.0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 225 263 | 2 1 97 0 0 0
27-08 02:30:28| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 216 313 | 1 2 98 0 0 0
27-08 02:30:29| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 198 278 | 1 0 99 0 0 0
27-08 02:30:30| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 143 221 | 0 0 100 0 0 0
27-08 02:30:31| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 154 234 | 0 1 99 0 0 0
27-08 02:30:32| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 153 235 | 0 0 99 0 0 0
27-08 02:30:33| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 36k| 176 281 | 1 1 98 0 0 0
27-08 02:30:34| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 138 213 | 0 0 100 0 0 0
27-08 02:30:35| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 154 230 | 1 1 99 0 0 0
27-08 02:30:36| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 151 217 | 0 0 100 0 0 0
27-08 02:30:37| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 191 289 | 1 1 98 0 0 0
27-08 02:30:38| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 28k| 163 246 | 0 1 99 0 0 0
27-08 02:30:39| 0 0 0| 139M 143M 74.5M 636M| 0 0 | 0 0 | 153 219 | 0 1 99 0 0 0^C
write(2) の後に fsync(2) を実行することで即時にディスクに同期しているのが確認できる。fsync(2) 以外にも open(2) の flags に syscall.O_SYNC を設定することで同様のことが行える。
$ man 2 open
...
O_SYNC Write operations on the file will complete according to the requirements of synchronized I/O file
integrity completion (by contrast with the synchronized I/O data integrity completion provided by
O_DSYNC.)
By the time write(2) (and similar) return, the output data and associated file metadata have been trans‐
ferred to the underlying hardware (i.e., as though each write(2) was followed by a call to fsync(2)).
...
他にも `watch grep -e Dirty: -e Writeback: /proc/meminfo` で Dirty が大きく増えないのを確認できる。
[1] Can I watch the progress of a `sync` operation?
[2] Difference between vm.dirty_ratio and vm.dirty_background_ratio?
[3] Linuxページキャッシュの設定を変更してWrite I/Oをチューニングしたメモ