NAS에서 파일을 읽고 쓰기 위해 Windows 데스크톱 클라이언트에서 실행된 Samba 시스템 호출

NAS에서 파일을 읽고 쓰기 위해 Windows 데스크톱 클라이언트에서 실행된 Samba 시스템 호출

Windows 데스크탑은 1GB 이더넷 케이블을 통해 Ubuntu가 설치된 개인 NAS(개발 중)에 연결됩니다. strace는 Samba가 어려운 작업을 수행하는 동안 NAS에서 파일(>1GB 크기)을 읽고 쓰는 동안 Samba 프로세스의 시스템 호출을 모니터링하는 데 사용됩니다.

다음은 strace 출력의 일부입니다.

mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb4eaf000 <0.000075>
pread(31, "\255\343.\372e\357F\315\357\247\21o{\331\223\336\216\235\367\\#L\312\220W\323\226\303\302\21\35\336"..., 1048576, 13631488) = 1048576 <0.010848>
writev(34, [{"\3261\347S\205\2\347\325\316\325\214LT{\337\256!\351\246\266\342b\204i\347\221:x$\r\5\227"..., 999020}], 1) = 49640 <0.000451>
gettimeofday({6146, 475882}, NULL)      = 0 <0.000282>
gettimeofday({6146, 476842}, NULL)      = 0 <0.000152>
poll([{fd=10, events=POLLIN|POLLHUP}, {fd=6, events=POLLIN|POLLHUP}, {fd=8, events=POLLIN|POLLHUP}, {fd=34, events=POLLIN|POLLOUT|POLLHUP}], 4, 57236) = 1 ([{fd=34, revents=POLLOUT}]) <0.000202>

이 작업은 읽은 모든 바이트가 캐시에 기록될 때까지 계속되며 그 이후에는 새로운 pread시스템 호출이 이어집니다. ( mmap2-ed 메모리가 매핑 해제되기 전)

나는 나중에 호출된 함수가 writev점점 더 많은 수의 바이트를 반환한다는 것을 알았습니다.

mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb4eaf000 <0.000304>
pread(31, "\343\367\235\227Q;\3717\240<\nl\326ff\0\361 J\37\253T\247\352\207\376\372\273\341\360\370y"..., 1048576, 458227712) = 1048576 <0.032897>
writev(34, [{"\t\21\6\301\366hPq\274\373\353x\332X\377\310\275<J\4z\261\0\227\24\230\256\350\300\16\355\203"..., 674900}], 1) = 373760 <0.002618>
gettimeofday({6164, 906348}, NULL)      = 0 <0.000149>
gettimeofday({6164, 907318}, NULL)      = 0 <0.000149>
poll([{fd=10, events=POLLIN|POLLHUP}, {fd=6, events=POLLIN|POLLHUP}, {fd=8, events=POLLIN|POLLHUP}, {fd=34, events=POLLIN|POLLOUT|POLLHUP}], 4, 38805) = 1 ([{fd=34, revents=POLLOUT}]) <0.000199>
  • 왜 이런 일이 발생합니까? I/O 스케줄러에 따라 달라지나요? 사용되는 I/O 스케줄러는 ROW입니다.
  • 어떤 방식으로든 읽기 및 쓰기 I/O에 영향을 미칠 수 있나요?블록 크기? 속도를 높이고 싶었는데 큰 것부터 시작해 보는 건 어떨까요?writev 블록 크기처음부터. 만약에블록 크기pread함수 반환 값의 올바른 이름입니다 writev. 분명히 있기 때문에 용어를 구별하기가 어렵습니다.블록 크기파일뿐만 아니라블록 크기디스크용.

  • dd예를 들어 다음을 사용할 때 매개변수를 통해 bs파일에 영향을 줍 니까?블록 크기? 자체 할인블록 크기포맷 시간에 따라 결정되며 즉시 변경할 수 없습니다.

  • gettimeofday마지막으로 함수 호출이 필요하지 않다고 생각해서 어떻게든 막을 수 있나요 , 아니면 제가 틀렸나요?

질문 중 일부가 제 지식의 심각한 부족을 드러낸다면 죄송합니다. 하지만 저는 정말로 모든 전문 용어를 정리하고 Linux 세계에 입문하기 위해 노력하고 있습니다.

관련 정보