write()
시스템 호출을 사용하여 파일에 데이터 버퍼를 작성하려고
에 리눅스 write 시스템 호출의 다른 결과를 가지고, 여기에 내가 쓴 사용자 공간 코드입니다. strace를 다른 버퍼
memset (dataBuffer, 'F', FILESIZE);
fp = open(fileName, O_WRONLY | O_CREAT, 0644);
write (fp, dataBuffer, FILESIZE);
나는 하나
malloc()
에서, 또 다른 하나는
mmap()
에서이다, DataBuffer의 두 가지 유형을 시도했다.
그리고 커널 버퍼의 두 종류에 무엇을 할 것 인 볼 strace
를 사용합니다. 대부분은 동일하지만, write()
을 할 때 보았는데, 그들은 다르게 보입니다. 만약 write()
의 파라미터가 다른 상술 볼 수있는 것처럼 mmap에에서의 malloc()
[pid 258] open("/mnt/mtd/mmc/block/DATA10", O_WRONLY|O_CREAT, 0644) = 3
[pid 258] write(3, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"..., 691200) = 691200
버퍼()
[pid 262] open("/mnt/mtd/mmc/block/DATA10", O_WRONLY|O_CREAT, 0644) = 4
[pid 262] write(4, 0x76557000, 691200) = 691200
에서
버퍼는 하나 같이 "... FFFFF"인 나는 전에 memset하지만 다른 하나는 메모리 주소와 같다.
또한 첫번째 파라미터는 다른 제
이며 내 시스템에서 malloc()
버퍼로부터보다 빠른 mmap()
이고, 하나는 3 다르다.
어떻게 그들이 다른 온? 누가 이렇게 다른 걸까요?
감사합니다.
업데이트 : 어떻게 측정합니까? malloc()
은 빠릅니까?
내가 커널의 write()
내부 깊숙한 곳을 추적하고 write()
의 마지막 단계를 확인하면 iov_iter_copy_from_user_atomic()
입니다. 이것이 실제 메모리 복사 작업이라고 생각합니다.
그럼 난 측정하는 gettimeofday()
을 사용하는 시간의 malloc/mmap에 버퍼의 iov_iter_copy_from_user_atomic()
비용.
어떻게 malloc()이 더 빨라 졌는지 측정 했습니까? –
내가 – Eason
이 당신이 시스템 호출에 의해 소요되는 시간을 볼 수 있도록 타임 스탬프를 보여줄 것'strace' 옵션이 아닌 시간을 측정 어떻게 업데이트 FrankMeerkötter @? – Barmar