<html><head><meta http-equiv="Content-Type" content="text/html charset=GB2312"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>We use samba gluster vfs in IO test, but meet with gluster server smbd oom&nbsp;killer,&nbsp;&nbsp;</div><div>The smbd process spend over 15g RES with top command show, in the end is our simple test code:</div><div><br></div><div>gluster server vfs --&gt; smbd --&gt; client mount dir "/mnt/vfs"--&gt; execute vfs test program "$ ./vfs 1000"</div><div><br></div><div>then we can watch&nbsp;gluster server smbd RES with top command.</div><div><div><br></div><div>&nbsp; PID USER &nbsp; &nbsp; &nbsp;PR &nbsp;NI &nbsp;VIRT &nbsp;RES &nbsp;SHR S %CPU %MEM &nbsp; &nbsp;TIME+ &nbsp;COMMAND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&nbsp;4000 soul &nbsp; &nbsp; &nbsp;20 &nbsp; 0 5486m 4.9g &nbsp;10m R 108.4 31.5 111:07.07 smbd &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp;3447 root &nbsp; &nbsp; &nbsp;20 &nbsp; 0 1408m &nbsp;44m 2428 S 44.4 &nbsp;0.3 &nbsp;59:11.55 glusterfsd &nbsp;&nbsp;</div></div><div><br></div><div>io test code:</div><div>=======================================</div><div><div>#define _LARGEFILE64_SOURCE</div><div><br></div><div>#include &lt;stdio.h&gt;</div><div>#include &lt;unistd.h&gt;</div><div>#include &lt;string.h&gt;</div><div>#include &lt;pthread.h&gt;</div><div>#include &lt;stdlib.h&gt;</div><div>#include &lt;fcntl.h&gt;</div><div>#include &lt;sys/types.h&gt;</div><div><br></div><div>int WT = 1;</div><div><br></div><div>#define RND(x) ((x&gt;0)?(genrand() % (x)):0)</div><div>extern unsigned long genrand();</div><div>extern void sgenrand();</div><div><br></div><div>/* Period parameters */ &nbsp;</div><div>#define N 624</div><div>#define M 397</div><div>#define MATRIX_A 0x9908b0df &nbsp; /* constant vector a */</div><div>#define UPPER_MASK 0x80000000 /* most significant w-r bits */</div><div>#define LOWER_MASK 0x7fffffff /* least significant r bits */</div><div><br></div><div>/* Tempering parameters */ &nbsp;&nbsp;</div><div>#define TEMPERING_MASK_B 0x9d2c5680</div><div>#define TEMPERING_MASK_C 0xefc60000</div><div>#define TEMPERING_SHIFT_U(y) &nbsp;(y &gt;&gt; 11)</div><div>#define TEMPERING_SHIFT_S(y) &nbsp;(y &lt;&lt; 7)</div><div>#define TEMPERING_SHIFT_T(y) &nbsp;(y &lt;&lt; 15)</div><div>#define TEMPERING_SHIFT_L(y) &nbsp;(y &gt;&gt; 18)</div><div><br></div><div>static unsigned long mt[N]; /* the array for the state vector &nbsp;*/</div><div>static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */</div><div><br></div><div>/* Initializing the array with a seed */</div><div>void</div><div>sgenrand(seed)</div><div>&nbsp; &nbsp; unsigned long seed;<span class="Apple-tab-span" style="white-space:pre">        </span></div><div>{</div><div>&nbsp; &nbsp; int i;</div><div><br></div><div>&nbsp; &nbsp; for (i=0;i&lt;N;i++) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mt[i] = seed &amp; 0xffff0000;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;seed = 69069 * seed + 1;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mt[i] |= (seed &amp; 0xffff0000) &gt;&gt; 16;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;seed = 69069 * seed + 1;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; mti = N;</div><div>}</div><div><br></div><div>unsigned long&nbsp;</div><div>genrand()</div><div>{</div><div>&nbsp; &nbsp; unsigned long y;</div><div>&nbsp; &nbsp; static unsigned long mag01[2]={0x0, MATRIX_A};</div><div>&nbsp; &nbsp; /* mag01[x] = x * MATRIX_A &nbsp;for x=0,1 */</div><div><br></div><div>&nbsp; &nbsp; if (mti &gt;= N) { /* generate N words at one time */</div><div>&nbsp; &nbsp; &nbsp; &nbsp; int kk;</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (mti == N+1) &nbsp; /* if sgenrand() has not been called, */</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sgenrand(4357); /* a default initial seed is used &nbsp; */</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; for (kk=0;kk&lt;N-M;kk++) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y = (mt[kk]&amp;UPPER_MASK)|(mt[kk+1]&amp;LOWER_MASK);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mt[kk] = mt[kk+M] ^ (y &gt;&gt; 1) ^ mag01[y &amp; 0x1];</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; for (;kk&lt;N-1;kk++) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y = (mt[kk]&amp;UPPER_MASK)|(mt[kk+1]&amp;LOWER_MASK);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mt[kk] = mt[kk+(M-N)] ^ (y &gt;&gt; 1) ^ mag01[y &amp; 0x1];</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; y = (mt[N-1]&amp;UPPER_MASK)|(mt[0]&amp;LOWER_MASK);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; mt[N-1] = mt[M-1] ^ (y &gt;&gt; 1) ^ mag01[y &amp; 0x1];</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; mti = 0;</div><div>&nbsp; &nbsp; }</div><div>&nbsp;&nbsp;</div><div>&nbsp; &nbsp; y = mt[mti++];</div><div>&nbsp; &nbsp; y ^= TEMPERING_SHIFT_U(y);</div><div>&nbsp; &nbsp; y ^= TEMPERING_SHIFT_S(y) &amp; TEMPERING_MASK_B;</div><div>&nbsp; &nbsp; y ^= TEMPERING_SHIFT_T(y) &amp; TEMPERING_MASK_C;</div><div>&nbsp; &nbsp; y ^= TEMPERING_SHIFT_L(y);</div><div><br></div><div>&nbsp; &nbsp; return y;&nbsp;</div><div>}</div><div><br></div><div>char *initialize_file_source(int size)</div><div>{</div><div>&nbsp; &nbsp;char *new_source;</div><div>&nbsp; &nbsp;int i;</div><div><br></div><div>&nbsp; &nbsp;if ((new_source=(char *)malloc(size))==NULL) /* allocate buffer */</div><div>&nbsp; &nbsp; &nbsp; fprintf(stderr,"Error: failed to allocate source file of size %d\n",size);</div><div>&nbsp; &nbsp;else</div><div>&nbsp; &nbsp; &nbsp; for (i=0; i&lt;size; i++) /* file buffer with junk */</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;new_source[i]=32+RND(95);</div><div><br></div><div>&nbsp; &nbsp;return(new_source);</div><div>}</div><div><br></div><div>void *tran_file(void *map)</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int block_size = 512;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>char *read_buffer; /* temporary space for reading file data into */</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int fd = open((char *)map, O_RDWR | O_CREAT | O_TRUNC, 0644);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if(fd == -1) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>perror("open");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return ;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div>//<span class="Apple-tab-span" style="white-space:pre">        </span>read_buffer=(char *)malloc(block_size);</div><div>//<span class="Apple-tab-span" style="white-space:pre">        </span>memset(read_buffer, 0x56, block_size);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>read_buffer = initialize_file_source(block_size);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>while(WT){</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>sleep(1);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>pwrite(fd, read_buffer, block_size, 0);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>pread(fd, read_buffer, block_size, 0);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>free(read_buffer);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>close(fd);</div><div>}</div><div><br></div><div>int main(int argc, char *argv[])</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if(argc == 1) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>printf("Set file name and file size in GB!\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>unsigned long long length = atoll(argv[1]) * 1024 * 1024 * 1024;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>unsigned long long index = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>unsigned long long count = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int fd = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>char path[32];</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>char *swap = NULL;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int psize = 65536;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int ret = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int ret_i = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>void *tret;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_t rtid_1;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_t rtid_2;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_t rtid_3;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_t rtid_4;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int fd_i = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int a_size = 256;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>char *append_buffer; /* temporary space for reading file data into */</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>swap = (char *)malloc(sizeof(char) * psize);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if(swap == NULL) {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>printf("Malloc Swap Failed!\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>close(fd);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>memset(swap, 0x55, psize);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>append_buffer = initialize_file_source(a_size);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_create(&amp;rtid_1, NULL, tran_file, "/mnt/vfs/a.map");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_create(&amp;rtid_2, NULL, tran_file, "/mnt/vfs/b.map");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_create(&amp;rtid_3, NULL, tran_file, "/mnt/vfs/c.map");</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_create(&amp;rtid_4, NULL, tran_file, "/mnt/vfs/d.map");</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>while(index &lt; length)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if((index % (1024*1024*1024)) == 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>count++;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>sprintf(path, "/mnt/vfs/data/%08lld.dat", count);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if((fd = open(path, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)) &lt; 0)</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>printf("Can not open io file: %s\n", path);</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>perror("open");</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>sprintf(path, "/mnt/vfs/data/%08lld.index", count);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if((fd_i = open(path, O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR)) &lt; 0)</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>printf("Can not open io file: %s\n", path);</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>perror("open");</div><div><span class="Apple-tab-span" style="white-space:pre">                                </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>printf("...1GiB\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>ret = pwrite(fd, swap, psize, (index % (1024*1024*1024)));</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if(ret != psize) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>perror("write");</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>printf("Write data file failed!\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>continue;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>lseek64(fd_i, ((index*a_size)/65536), SEEK_SET);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>ret_i = write(fd_i, append_buffer, a_size);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if(ret_i != a_size) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>perror("write");</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>printf("Write index file failed!\n");</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>continue;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>index += ret;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>if((index % (1024*1024*1024)) == 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>close(fd);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>close(fd_i);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>WT = 0;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_join(rtid_1, &amp;tret);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_join(rtid_2, &amp;tret);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_join(rtid_3, &amp;tret);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>pthread_join(rtid_4, &amp;tret);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>printf("%s GB write\n", argv[1]);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>sync();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>free(swap);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>free(append_buffer);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return 0;</div><div>}</div></div><div><br></div><div>=======================================</div><div><br></div><div><br></div><div><br></div><div><div apple-content-edited="true"><div class="" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br></div><div class="" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">kane&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">----------------------------------------------------------------</div><div class="" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Email: &nbsp;<a href="mailto:kai.zhou@soulinfo.com">kai.zhou@soulinfo.com</a><br class="">µç»°: &nbsp; &nbsp;0510-85385788-616</div><span style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><br></span></div>
<br></div></body></html>