일부 출력을 수행 dd
하고 병렬로 실행 중입니다 vmstat
.
직접 쓰기 없음(예: 캐시를 통해)
$ dd if=/dev/urandom of=somefile.txt bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1,31332 s, 160 MB/s
$ vmstat 1 1000
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 64 2659604 383244 3596884 0 0 3 47 34 14 27 7 66 0 0
1 0 64 2509432 383244 3746080 0 0 0 0 1005 2278 5 20 75 0 0
0 0 64 2452560 383248 3807932 0 0 4 204880 1175 2321 4 12 75 9 0
0 0 64 2453144 383248 3807548 0 0 0 0 814 2677 5 2 93 0 0
1 0 64 2444868 383248 3814516 0 0 0 244 529 1746 4 2 94 0 0
0 0 64 2445756 383248 3814516 0 0 0 0 495 1957 3 1 96 0 0
일괄 쓰기를 어느 정도 수행하는 것으로 나타났습니다.
직접 쓰다
$ dd if=/dev/urandom of=somefile.txt bs=1M count=200 oflag=direct
200+0 records in
200+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 1,6902 s, 124 MB/s
$ vmstat 1 1000
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 64 2623556 383248 3603572 0 0 3 47 35 14 27 7 66 0 0
1 0 64 2613784 383248 3611220 0 0 0 88064 1001 2573 5 15 79 1 0
0 0 64 2612236 383256 3611804 0 0 8 116736 912 2033 1 18 78 3 0
4 0 64 2621076 383256 3604232 0 0 0 96 1086 3250 8 3 89 0 0
내 질문은 다음과 같습니다.
직접 쓰기 작업 조각화는 어떻게 발생합니까? (캐시를 통과하지 않는 경우) 파일을 88MB와 116MB의 2개 청크로(50MB의 4개 청크 대신) 분할해야 하는지 결정하는 (커널?) 매개변수는 무엇입니까?
oflag=sync
대신 을 사용하면 결과가 달라 집니까 direct
?