Portál AbcLinuxu, 25. dubna 2024 11:24


Dotaz: c, rychlost cteni

16.5.2010 15:31 O_x
c, rychlost cteni
Přečteno: 719×
Odpovědět | Admin
Zdravim, mam program v c a potreboval bych nejakym zpusobem zmerit propustnost v Mb/s cteni z disku.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.5.2010 16:09 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: c, rychlost cteni
Odpovědět | | Sbalit | Link | Blokovat | Admin
Gratulujeme. A ... problém je v čom?
16.5.2010 16:12 O_x
Rozbalit Rozbalit vše Re: c, rychlost cteni
no nevim jakym zpusobem to zmerit
16.5.2010 18:58 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: c, rychlost cteni
Použiješ funkciu

int gettimeofday(struct timeval *tv, struct timezone *tz);

zavoláš ju pred začiatkom čítania a po skončení čítania a tie hodnoty odčítaš. Pokiaľ sa čítanie robí po malých kúskoch a je roztrúsené na mnohých veciach, tak to bude zložitejšie. Možno by som využiť profiler. Na druhej strane ak ťa zaujíma skutočne len rýchlosť prenosu dát a nie to ako rýchlo ich dokážeš spracovať, tak by mohol stačiť hdparm, nie?
Jardík avatar 28.5.2010 16:12 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: c, rychlost cteni
To si děláte srandu ... uživatel změní čas a dostane špatný výsledek.
Věřím v jednoho Boha.
28.5.2010 20:16 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: c, rychlost cteni
Myslíš, že v situácii popísanej v otázke je pravdepodobné, že počas merania nejaký užívateľ zmení čas?
Jardík avatar 28.5.2010 20:48 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: c, rychlost cteni
Ano. Nebo např. dojde k přestupné sekundě a za sekundu se pár megabajtů přečte a celkový výsledek to znatelně ovlivní.
Věřím v jednoho Boha.
28.5.2010 21:44 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: c, rychlost cteni
Hľadáš problém za každú cenu. Priestupná sekunda sa vyskytuje raz, za niekoľko rokov a uberá/vkladá sa o polnoci a nepovažujem za pravdepodobné, že by sa ono meranie konalo práve vtedy. Btw, to už si si radšej mohol spomenúť na zimný/letný čas.

Keď ťa to uspokojí, tak áno, technicky máš pravdu. Z praktického hľadiska je, ale mnou navrhnutý spôsob celkom použiteľný a o opaku ma môže presvedčiť len autor pôvodnej otázky.
29.5.2010 00:15 Ash | skóre: 53
Rozbalit Rozbalit vše Re: c, rychlost cteni
Navrhni řešení nezávislé na změně času.
Jardík avatar 29.5.2010 00:38 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: c, rychlost cteni
Ve Windows je funkcička GetTickCount64() s rozlišením +- 10ms, přetejká ale po pěti miliónech letech, to je pravda.
V Linuxu je něco podobného
#include <sys/times.h>

clock_t times(struct tms *buf);
Návratová hodnota v linuxu je počet ticků od bootu. Pomocí sysconf(_SC_CLK_TCK) vydělit a máme čas. Bohužel v Linuxu dochází častěji k přetejkání této hodnoty, obzvláště na 32bit systému.
Věřím v jednoho Boha.
29.5.2010 14:08 Ash | skóre: 53
Rozbalit Rozbalit vše Re: c, rychlost cteni
Ano, pro měření od-do se to hodí, v jiffech se v proc udává třeba i čas strávený úlohou v různých stavech (user, system, idle etc.), akorát "počet tiků od bootu" bych tomu neříkal, je to prostě časovač.
michich avatar 29.5.2010 14:37 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: c, rychlost cteni

times udává čas CPU procesem spotřebovaný. Pro měření doby čtení z disku je to nepoužitelný údaj, protože CPU se během toho čtení většinou nudí.

Možná jsi měl na mysli funkci time. Ta ale vrací čas jenom s přeností na celé sekundy, a navíc je stejně zase implementovaná pomocí gettimeofday, která se ti nelíbí.

Pro čas s vysokým rozlišením a neovlivněný přestupnými sekundami lze použít clock_gettime(CLOCK_MONOTONIC, ...).

michich avatar 29.5.2010 14:42 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: c, rychlost cteni

times udává čas CPU procesem spotřebovaný. Pro měření doby čtení z disku je to nepoužitelný údaj, protože CPU se během toho čtení většinou nudí.

Seknul jsem se. Tohle times sice udává, ale navíc vrací i tu hodnotu, o které psal Jardík. Takže v zásadě použitelná je. I tak je ale lepší použít CLOCK_MONOTONIC
Jardík avatar 29.5.2010 14:50 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: c, rychlost cteni
Tak než jsem to dopsal, tak sis toho všiml. BTW clock_gettime je taky dobrý, o tom jsem nevěděl.
Věřím v jednoho Boha.
Jardík avatar 29.5.2010 14:47 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: c, rychlost cteni
Blbost.
The function times returns the number of clock ticks that have elapsed since an arbitrary point in the past. For Linux this point is the moment the system was booted. This return value may overflow the pos- sible range of type clock_t. On error, (clock_t) -1 is returned, and errno is set appropriately.
Pokud to pak vydělíš např. počtem ticků za jednotku času, dostaneš čas.
Věřím v jednoho Boha.
29.5.2010 21:19 Ash | skóre: 53
Rozbalit Rozbalit vše Re: c, rychlost cteni
Blbost by to byla, kdyby se psal rok 2002, ze kterého je ten odkazovaný manuál.

Ríkám to pořád, nevěřte všemu, co se píše v manuálu a na internetu už vůbec ne. Nikdy nevíte, kdo na vás vytáhne lepší, větší a novější manuál, nebo nedej bože automat. A co teprve takový experiment! ;)
29.5.2010 21:55 Ash | skóre: 53
Rozbalit Rozbalit vše Re: c, rychlost cteni
Ten experiment mi vychází jen přibližně, pokud by to bylo jak se píše v mém manuálu:
On  Linux,  the  "arbitrary point in the past" from which the return value of times()
is measured has varied across kernel versions.  On Linux 2.4 and earlier this point is the
moment the system was  booted.   Since  Linux  2.6,  this  point  is
(2^32/HZ)  -  300 (i.e., about 429 million) seconds before system boot time.
$ uptime
 21:45:02 up 1 day,  4:07,  2 users,  load average: 0.00, 0.03, 0.06
$ ./a.out
1441655586, jiffy: 100, HZ: 300
bash$ bc -l <<<"(1441655586/100-2^32/300+300)/60/60"
27.86061296296296296296
Ale mělo by to být 28 hodin a něco, ne 27. Navíc těch manuálových 429 milionů je také divné, to by museli mít HZ 10 a ne obvyklých 100 (dnes spíš i víc). Holt ty manuély... :)
29.5.2010 22:02 Ash | skóre: 53
Rozbalit Rozbalit vše Re: c, rychlost cteni
Ups, to jste nereagoval na mne ale na komentář podemnou :) Ano souhlasím že se to dá použít jako časovač (ve smyslu že vrací číslo "since an arbitrary point in the past") a lze to doufejme použít pro měření intervalu, ale čas od bootu to nebude.

Každopádně bych celkově víc věřil té funkci clock_gettime kterou tu michich zmínil.
Řešení 1× (Messa)
Jardík avatar 29.5.2010 23:58 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: c, rychlost cteni
Ano, clock_gettime vypadá lépe, uznávám. Tak abychom teda odpověděli zadavateli otázky:
clock_gettime před čtením, čtení X desítek MB dat z disku, clock_gettime po čtení, spočítat rozdíl časů a tím vydělit počet přečtených MB a máme výsledek.
Věřím v jednoho Boha.
Josef Kufner avatar 17.5.2010 01:28 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: c, rychlost cteni
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://jk.frozen-doe.net/programy/catmeter/
Hello world ! Segmentation fault (core dumped)
17.5.2010 12:59 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: c, rychlost cteni
nebo pv
17.5.2010 14:26 faha
Rozbalit Rozbalit vše Re: c, rychlost cteni
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nebo pokud mate jadro >= 2.6.20 tak lze pouzit utilitky iotop

http://guichaz.free.fr/iotop/

17.5.2010 17:38 O_x
Rozbalit Rozbalit vše Re: c, rychlost cteni
Jo iotop je v pohode. Problem je v tom, ze na tom pc na kterem potrebuji provest mereni nemam prava abych jej mohl nainstalovat.
17.5.2010 17:23 Ivan
Rozbalit Rozbalit vše Re: c, rychlost cteni
Odpovědět | | Sbalit | Link | Blokovat | Admin
sys_times
28.5.2010 18:21 lok
Rozbalit Rozbalit vše Re: c, rychlost cteni
Odpovědět | | Sbalit | Link | Blokovat | Admin
Precte par mega:
int fd = open("/dev/hda", O_RDONLY);
char buffer[2048];
int i;
for(int i = 0; i < 1024 * 50; i++) {
read(fd, buffer, 2048);
}
close(fd);
A potom bud dodelat praci s casem (t1, cteni, t2 = now - t1) anebo to cele zmerit timem a dopocitat si to podle objemu prenesenych dat rucne...
Jardík avatar 28.5.2010 20:50 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: c, rychlost cteni
2 MB? Z toho žádný výsledek vyvodit nemůže, obyč HDD vám dá pár desítek mega za sekundu.
Věřím v jednoho Boha.
28.5.2010 21:46 mich | skóre: 16
Rozbalit Rozbalit vše Re: c, rychlost cteni
je tam krát 50...ale to je stejně pořád málo.
je to teď v módě, na žive o tom furt píšou
Jardík avatar 28.5.2010 23:41 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: c, rychlost cteni
Jó, tu 50ku jsem přehlédl.
Věřím v jednoho Boha.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.