file close시 오랜시간이 걸립니다. 왜 그럴까요?
글쓴이: ssskim / 작성시간: 금, 2015/07/10 - 9:17오전
블록 디바이스의 쓰기속도를 측정하기 위해 프로그램을 작성하고 있습니다.
아래와 같은 코드를 이용하고 있는데요. 생각보다 속도가 안나와서 보니
close함수에서 많은시간을 소모하고 있었습니다.
시간을 줄일 방법이 없을까요?
#define BURST_SIZE 136314880 printf("%s write perfermance \n", argv[1]); if ((ifd = open(argv[1], iflag)) < 0) { printf("open %s fail \n", argv[1]); return -1; } stick = get_tick_count(); for(i=0; i<LOOP_COUNT; i++) { full_write(ifd, buf, BURST_SIZE); } stick1 = get_tick_count(); close(ifd); etick1 = get_tick_count(); printf("%d ms\n", etick1 - stick1); etick = get_tick_count(); printf("elapsed time : %dms size: %dMB speed : %dMB/s\n\n", etick-stick, (BURST_SIZE/(1024*1024))*LOOP_COUNT, ((BURST_SIZE/1000)*LOOP_COUNT)/(etick-stick));
결과
/dev/sda write perfermance
5737 ms
elapsed time : 24995ms size: 3250MB speed : 136MB/s
Forums:
gilgil.net
close에서 시간이 오래 걸린다기 보다는 wriring caching 되어 있는 것을 전부 마무리(flush)해 줘야 하기 때문에 close에서 시간이 오래 걸리는 것으로 보입니다.
for문 중간 중간에 flush를 실행해 보세요(결국 전체 걸리는 시간은 비슷할 것으로 추정).
www.gilgil.net
댓글 달기