Před časem jsem u nás testoval HTB. Snažil jsem se na ethernetu nastavit 3 datové toky, které by se rovnoměrně dělily o 128kbit. Při testování ale docházelo k zajímavé věci. Při stahování (např. z ftp) rychlost oscilovala. Průběh připomínal pilu - v pravidelných intervalech cca. 5-10 vteřin se rychlost skokem snížila a pak pomalu rosla, zase snížila... Průměrná efektivní rychlost ale odpovídala stanoveným požadavkům. To se dělo, i když jsme to testovali při stahování jenom v jednom toku. Pak jsem zkusil udělat i konfiguraci, kdy jsem se snažil udělat omezení jenom jenom jednoho toku na určitou rychlot (klasický shaping). I tady se oscilace projevila. Zkoušel jsem si hrát s dalšími parametry HTB, ale nemělo to moc vliv. Jedině, když jsem změnil omezení rychlosti z 128kbit na 1Mbit, pak to fungovalo O.K. Z toho jsem vyvodil, že to funguje bez pilového efektu až na vyšších rychlostech. Vrátil jsem se tedy ke klasickému shaperu, který tímto neduhem netrpí, ale nelze tam nastavit spoustu věcí, kvůli kterým se mi líbilo právě HTB. Bohužel už nemám konfigurační soubory k HTB, které jsem používal. Takže mám dotaz, jestli má někdo s HTB podobné zkušenosti jako já. Pokud to máte někdo HTB uchozené na menší rychlosti (64kbit, 128...) bez pilového efektu, poslete mi prosím vaši konfiguraci HTB.
Zkuste zmenit hodnotu casovace jako zdroj pro
scheduler hodnotu PSCHED_CPU definuje se v souboru:
/usr/src/linux/include/net/pkt_sched.h
jako:
#define PSCHED_CLOCK_SOURCE PSCHED_CPU
ale pozor procesor musi podporovat registr
Time Stamp Counter Register (rtdsc)- vetsinou je na
Intel procesorech.
Vice na:
http://www.atm.tut.fi/list-archive/linux-diffserv/msg00441.html
Nebo
http://lugdunum2k.free.fr/shaped
Jestli vas procesor umi ten rtdsc registr muzete zjistit timhle programkem:
/**
** Read the tsc (time-stamp counter) register of the processor.
**
** @return the rtc register
*/
#include <linux/types.h>
static __inline u_int64_t rdtsc(void)
{
#ifdef __i386__
u_int64_t rv;
__asm __volatile(".byte 0x0f, 0x31" : "=A" (rv));
#endif
#ifdef __alpha__
int rv;
__asm __volatile("rpcc %0" : "=r" (rv));
#endif
return rv;
}
main ()
{
long long rc1;
rc1=rdtsc();
printf("CPU RDTSC register (CLOCK COUNTER): %u\n",rc1);
}
Ja do toho teda vubec nevidim, ale z fyzikalniho hlediska by tu pilu mohl zpusobovat vypocet rychlosti, ktery je pouzit v tom programu, kterym to merite. Pokud shaper funguje zruba "poustim dokud muzu a pak zahazuju", tak je to vlastne takovy impulzni provoz. A pokud ten programek prumeruje rychlost za nejaky interval (coz nepochybne dela), tak mu tam pak vznika ta pila. Je jasne, ze shaper nema periodu 5-10 vterin, ale to muze byt nejaka interference periody shaperu a toho vaseho programku.
Je to uplne normalny, jav, len velkost tych zubov sa da dost omedzit rozumnym nastavenim hodnot, ako casto a presne ma prepocitavat tu rychlost...
Ako uz bolo spomenute nizsie, PS_SCHED to dokaze vylepsit...
Odporucam si pozriet stranky: www.docum.org, tam su ukazkove konfuguracie aj testy s grafmy a rozbormi.
Zkuste nastavit HTB_HYSTERESIS v sch_htb.c na 0.
Normalne je zavedena mala hystereze kvuli snizeni poctu prechodu mezi stavy rozhodovaciho stromu a tudiz snizeni narocnosti na ukor mirneho zvlneni toku.
Druha moznost je, jak jiz nekdo napsal, pouziti PSCHED_CLOCK_CPU (zejmena pro vyssi rychlosti).
devik