[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Squid 2.6 i patch HIT_MISS



(1) http://kadzbi.ksieze.one.pl/squid_qos.html
(2) http://sed.pl/qos/

Z racji tego, że Debian oferuje już nowe źródełka Squida to stare patche się nie nakładają.

Wziąłem zatem patch z pierwszego linku i poprawiłem, tak żeby się nakładał na najnowszego Squida. W załączniku ten patch.

Chciałbym usłyszeć jakąś ocenę tego co zrobiłem, gdyż nie sprowadziło się to tylko do zmiany numerków linii... Pierwsze dwa patche (na pierwszy plik) są dla mnie mniej więcej zrozumiałe. Natomiast nie wiem czy potrzebne są kolejne łatki.

Po kompilacji otrzymałem taki efekt:
I: Successfully built in /root/squid/squid-2.6.1
I: Installing debs built from /root/squid/squid-2.6.1 ..
Zaznaczenie poprzednio niezaznaczonego pakietu squid-common.
(Odczytywanie bazy danych ... 30010 plików i katalogów obecnie zainstalowanych.)
Rozpakowanie squid-common (z .../squid-common_2.6.1-3_all.deb) ...
Zaznaczenie poprzednio niezaznaczonego pakietu squid.
Rozpakowanie squid (z .../squid/squid_2.6.1-3_i386.deb) ...
Zaznaczenie poprzednio niezaznaczonego pakietu squidclient.
Rozpakowanie squidclient (z .../squidclient_2.6.1-3_i386.deb) ...
Zaznaczenie poprzednio niezaznaczonego pakietu squid-cgi.
Rozpakowanie squid-cgi (z .../squid-cgi_2.6.1-3_i386.deb) ...
Konfigurowanie squid-common (2.6.1-3) ...
Konfigurowanie squid (2.6.1-3) ...
Creating squid spool directory structure
FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'

Squid Cache (Version 2.6.STABLE1): Terminated abnormally.
CPU Usage: 0.009 seconds = 0.007 user + 0.002 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
/var/lib/dpkg/info/squid.postinst: line 133: 29555 Przerwane /usr/sbin/squid -z
Restarting Squid HTTP proxy: squid* Creating squid spool directory structure
FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'

Squid Cache (Version 2.6.STABLE1): Terminated abnormally.
CPU Usage: 0.010 seconds = 0.004 user + 0.006 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
/etc/init.d/squid: line 64: 29586 Przerwane               $DAEMON -z
FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'

Squid Cache (Version 2.6.STABLE1): Terminated abnormally.
CPU Usage: 0.012 seconds = 0.009 user + 0.003 sys
Maximum Resident Size: 0 KB
Page faults with physical i/o: 0
/etc/init.d/squid: line 64: 29588 Przerwane start-stop-daemon --quiet --start --pidfile $PIDFILE --chuid $CHUID --exec $DAEMON -- $SQUID_ARGS </dev/null
 failed!

Konfigurowanie squidclient (2.6.1-3) ...
Konfigurowanie squid-cgi (2.6.1-3) ...

I: Successfully installed debs.

Po poprawieniu konfigu dostałem taki efekt:
spirit:~/squid# /etc/init.d/squid restart
Restarting Squid HTTP proxy: squid* Creating squid spool directory structure
2006/07/25 17:40:22| Creating Swap Directories
.
spirit:~/squid# ps aux | grep squid

root 29719 0.0 0.0 4584 640 ? Ss 17:40 0:00 /usr/sbin/squid -D -sYC proxy 29721 0.0 0.6 7828 4768 ? S 17:40 0:00 (squid) -D -sYC

Wygląda na to, że wszystko działa. Jakbyście mogli przetestować to co powstało i czy prawidłowo znaczy pakiety byłbym wdzięczny. No i jeszcze jedno... obciąć patch do linii 14 (do minimum zgodnie z patchem ze strony(2)), czy reszta też jest dobra?

Pozdrawiam
Konrad Cempura
diff -r -c squid-2.6.x/src/client_side.c squid-2.6.patched/src/client_side.c
*** squid-2.6.x/src/client_side.c	Tue Jul 25 16:38:51 2006
--- squid-2.6.patched/src/client_side.c	Tue Jul 25 16:38:52 2006
***************
*** 3017,3021 ****
--- 3017,3024 ----
  	/* Avoid copying to MemBuf for non-range requests */
  	http->out.offset += size;
+ 	{   int tos=isTcpHit(http->log_type) ? 0 : 8;
+ 	    setsockopt(fd,SOL_IP,IP_TOS,&tos,4);
+ 	}
  	comm_write(fd, buf, size, clientWriteBodyComplete, http, NULL);
  	/* NULL because clientWriteBodyComplete frees it */
  	return;
***************
*** 3050,3055 ****
--- 3050,3058 ----
          memBufAppend(&mb, buf, size);
      }
      /* write */
+     {	int tos=isTcpHit(http->log_type) ? 0 : 8;
+ 	setsockopt(fd,SOL_IP,IP_TOS,&tos,4);
+     }
      comm_write_mbuf(fd, mb, clientWriteComplete, http);
      /* if we don't do it, who will? */
      memFree(buf, MEM_CLIENT_SOCK_BUF);
diff -r -c squid-2.6.x/src/ftp.c squid-2.6.patched/src/ftp.c
*** squid-2.6.x/src/ftp.c		Tue Jul 25 16:38:51 2006
--- squid-2.6.patched/src/ftp.c		Tue Jul 25 16:38:52 2006

***************
*** 1151,1156 ****
      ftpState->ctrl.last_command = xstrdup("Connect to server");
      ftpState->ctrl.buf = memAllocBuf(4096, &ftpState->ctrl.size);
      ftpState->ctrl.offset = 0;
!     ftpState->data.buf = memAllocBuf(SQUID_TCP_SO_RCVBUF, &ftpState->data.size);
      ftpScheduleReadControlReply(ftpState, 0);
  }
--- 1151,1156 ----
      ftpState->ctrl.freefunc = memFree4K;
      ftpState->ctrl.size = 4096;
      ftpState->ctrl.offset = 0;
!     ftpState->data.buf = memAllocBuf(SQUID_TCP_RCVBUF < SQUID_TCP_SO_RCVBUF ? SQUID_TCP_RCVBUF : SQUID_TCP_SO_RCVBUF, &ftpState->data.size);
      ftpScheduleReadControlReply(ftpState, 0);
  }
diff -r -c squid-2.6.x/src/http.c squid-2.6.patched/src/http.c
*** squid-2.6.x/src/http.c			Tue Jul 25 16:38:51 2006
--- squid-2.6.patched/src/http.c		Tue Jul 25 16:38:52 2006
***************
*** 621,627 ****
  httpReadReply(int fd, void *data)
  {
      HttpStateData *httpState = data;
!     LOCAL_ARRAY(char, buf, SQUID_TCP_SO_RCVBUF);
      StoreEntry *entry = httpState->entry;
      const request_t *request = httpState->request;
      const request_t *orig_request = httpState->orig_request;
--- 621,627 ----
  httpReadReply(int fd, void *data)
  {
      HttpStateData *httpState = data;
!     LOCAL_ARRAY(char, buf, SQUID_TCP_RCVBUF < SQUID_TCP_SO_RCVBUF ? SQUID_TCP_RCVBUF : SQUID_TCP_SO_RCVBUF);
      StoreEntry *entry = httpState->entry;
      const request_t *request = httpState->request;
      const request_t *orig_request = httpState->orig_request;
***************
*** 628,634 ****
      int len;
      int bin;
      int clen;
!     size_t read_sz = SQUID_TCP_SO_RCVBUF;
      struct in_addr *client_addr = NULL;
      u_short client_port=0;
  #if DELAY_POOLS
--- 628,634 ----
      int len;
      int bin;
      int clen;
!     size_t read_sz = (SQUID_TCP_RCVBUF < SQUID_TCP_SO_RCVBUF ? SQUID_TCP_RCVBUF : SQUID_TCP_SO_RCVBUF);
      struct in_addr *client_addr = NULL;
      u_short client_port=0;
  #if DELAY_POOLS

diff -r -c squid-2.6.x/src/defines.h squid-2.6.patched/src/defines.h
*** squid-2.6.x/src/defines.h			Tue Jul 25 16:38:51 2006
--- squid-2.6.patched/src/defines.h		Tue Jul 25 16:38:52 2006
***************
*** 41,46 ****
--- 41,48 ----
  #define FALSE 0
  #endif
  
+ #define SQUID_TCP_RCVBUF SQUID_TCP_SO_RCVBUF
+ 
  #define ACL_NAME_SZ 32
  #define BROWSERNAMELEN 128
  

Reply to: