dd 명령의 캐시 동작

dd 명령의 캐시 동작

일부 출력을 수행 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?

관련 정보