Friday, July 29, 2011

Details about NFS timeout on Red Hat Enterprise Linux 5

■ Requirement : Concept on nfs timeout
■ OS Environment : Linux[RHEL, Centos]
■ Application:nfs
■ Resolution  : 

There are two mount options for timeouts of an NFS request.

# timeo: a timeout value. the unit is 1/10 seconds.
# retrans: a retrans count.

               An NFS client waits an RPC response for timeo before issuing an RPC request. If the request is timed out, the NFS client retransmits the request and waits a response again for tomeo*2. The timeout valueis doubled until it reachs a maximum value. The maximum timeout is timeo*(retrans+1) in TCP, is NFS_MAX_UDP_TIMEOUT in UDP. The RPC timeout is called minor timeout. If the timeout reaches maximum timeout, the NFS request is timeout. That timeout is called major timeout. The default value of timeo is 60 seconds in TCP, is 1.1 seconds in UDP, and the default value of retrans is 2 in both of TCP/UDP. The maximum value of timeo is NFS_MAX_TCP_TIMEOUT in TCP, is NFS_MAX_UDP_TIMEOUT in UDP, and NFS_MAX_TCP_TIMEOUT is 600 seconds, and NFS_MAX_UDP_TIMEOUT is 60 seconds.

Additional  Section : Capture packets using tcpdump to troubleshoot NFS issue. Like :

$ tcpdump -vv -s 0 -i ethX -w /tmp/printdump_server.cap host {hostname or IP address of client/server}

Replace ethX, and IP of server/client. Packets must be captured at the same time on client and nfs server. Then analysis it using wireshark or similar tool.

Tuesday, July 26, 2011

How to check or read email with telnet

■ Requirement : Check or read email using telnet client
■ OS Environment : Linux[RHEL, Centos]
■ Application: telnet
■ Implementation Steps : 

$ telnet example.com 110
$ user username@example.com
$ pass yourpasswordgoeshere
$ list
$ retr id
$ dele id
$ quit

NOTE: replace e-mail server name in place of example.com. Also use correct user name and password in above command.

Tuesday, July 19, 2011

How linux function executed while OS boots?

■ Requirement : How linux calls happens while it starts
■ OS Environment : Linux[RHEL, Centos]
■ Application:linux OS
■ Resolution : 

We start the Linux kernel first from C code executed from ''startup_32:'' asm label:

|startup_32:
|start_kernel
|lock_kernel
|trap_init
|init_IRQ
|sched_init
|softirq_init
|time_init
|console_init
|#ifdef CONFIG_MODULES
|init_modules
|#endif
|kmem_cache_init
|sti
|calibrate_delay
|mem_init
|kmem_cache_sizes_init
|pgtable_cache_init
|fork_init
|proc_caches_init
|vfs_caches_init
|buffer_init
|page_cache_init
|signals_init
|#ifdef CONFIG_PROC_FS
|proc_root_init
|#endif
|#if defined(CONFIG_SYSVIPC)
|ipc_init
|#endif
|check_bugs
|smp_init
|rest_init
|kernel_thread
|unlock_kernel
|cpu_idle

* startup_32 [arch/i386/kernel/head.S]
* start_kernel [init/main.c]
* lock_kernel [include/asm/smplock.h]
* trap_init [arch/i386/kernel/traps.c]
* init_IRQ [arch/i386/kernel/i8259.c]
* sched_init [kernel/sched.c]
* softirq_init [kernel/softirq.c]
* time_init [arch/i386/kernel/time.c]
* console_init [drivers/char/tty_io.c]
* init_modules [kernel/module.c]
* kmem_cache_init [mm/slab.c]
* sti [include/asm/system.h]
* calibrate_delay [init/main.c]
* mem_init [arch/i386/mm/init.c]
* kmem_cache_sizes_init [mm/slab.c]
* pgtable_cache_init [arch/i386/mm/init.c]
* fork_init [kernel/fork.c]
* proc_caches_init
* vfs_caches_init [fs/dcache.c]
* buffer_init [fs/buffer.c]
* page_cache_init [mm/filemap.c]
* signals_init [kernel/signal.c]
* proc_root_init [fs/proc/root.c]
* ipc_init [ipc/util.c]
* check_bugs [include/asm/bugs.h]
* smp_init [init/main.c]
* rest_init
* kernel_thread [arch/i386/kernel/process.c]
* unlock_kernel [include/asm/smplock.h]
* cpu_idle [arch/i386/kernel/process.c]

The last function ''rest_init'' does the following:

1. launches the kernel thread ''init''
2. calls unlock_kernel
3. makes the kernel run cpu_idle routine, that will be the idle loop executing when nothing is scheduled

In fact the start_kernel procedure never ends. It will execute cpu_idle routine endlessly.

Follows ''init'' description, which is the first Kernel Thread:

|init
|lock_kernel
|do_basic_setup
|mtrr_init
|sysctl_init
|pci_init
|sock_init
|start_context_thread
|do_init_calls
|(*call())-> kswapd_init
|prepare_namespace
|free_initmem
|unlock_kernel
|execve

How to use ethtool ?

■ Requirement : Use of ethtool
■ OS Environment : Linux[RHEL, Centos]
■ Application: ethtool
■ Resolution :

$ ethtool -g|--show-ring eth0
$ ethtool -A ethX [autoneg on|off] [rx on|off] [tx on|off]
$ ethtool -c|--show-coalesce ethX
$ ethtool -C|--coalesce ethX //change coalesce values

    To avoid flooding the host system with too many interrupts, packets are collected and one single interrupt is generated for multiple packets. This is called interrupt coalescing.

$ ethtool -G|--set-ring ethX [rx N] [rx-mini N] [rx-jumbo N] [tx N]
$ ethtool -i|--driver ethX
$ ethtool -k|--show-offload ethX
$ ethtool -K|--offload ethX [rx on|off] [tx on|off] [sg on|off] [tso on|off] [ufo on|off] [gso on|off] [gro on|off] [lro on|off]
$ ethtool -S|--statistics ethX //Queries the specified ethernet device for NIC- and driver-specific statistics.
$ ethtool -t|--test ethX [offline|online]
#ethtool -s ethX speed N [duplex half|full] [port tp|aui|bnc|mii] [autoneg on|off] [advertise N] [phyad N] [xcvr inter-
nal|external] [wol p|u|m|b|a|g|s|d...] [sopass xx:yy:zz:aa:bb:cc] [msglvl N]