器件型号:EVMK2H
工具/软件:Linux
您好!
我们有多个 EVMK2H REV4.0板、并使用适用于 K2H/K2K v03.02.00.05的 Processor SDK Linux 和8GB 内存 DIMM 对其进行了设置。
我们将使用 tftpserver/NFS 服务器方法来启动电路板、主机是 Ubuntu 16.04 PC。
我们将在 ARM 处理器上运行的应用程序应在单根 Linux 线程下运行、该线程可能需要创建多达1000个线程。 在初始测试期间、我们发现无法创建1000个线程。 最初、我们能够创建380个线程、并且能够确定此限制是由于每个线程的默认堆栈大小为8MB。 但是、即使在将默认堆栈大小更改为非常小的16k 后、我们可以创建的最大线程数也是509。
是否有人知道是否有其他资源阻止创建超过509个线程。
欢迎提出任何建议。
此致、
Bob
--下面是我们正在使用的测试程序的源代码,然后是样本输出。
//================================================================
//=========== 测试程序 threadTest
//================================================================
#include
#include
#include
#include
#define NUM_THREADS 1000
void * aThread (void* parm){
睡眠(5);
返回空;
}
int main4(){
int i、err;
int nCreated = 0;
size_t stacksize;
pthread_attr_t 属性;
pthread_t thrd[NUM_threads];
printf ("正在尝试创建%d 个线程\n"、NUM_THREADS);
for (i=0;<NUM_THREADS;i++) {)
ERR = pthread_create (&thrd[i]、NULL、aThread、NULL);
如果(err){
printf (" pthread_create()创建线程%d 失败,错误%d\n",i+1,错误);
errno = err;
perror (" 错误代码为");
中断;
}否则{
如果(nCreated = 0){
if (pthread_getattr_np (thrd[i]、&attr)=0){
pthread_attr_getstacksize (&attr、&stacksize);
printf ("Thread 栈大小=%d 字节\n"、stacksize);
}
}
n 已创建++;
}
}
printf ("正在加入%d 个线程...\n"、i);
对于(i=1 <nCreated; i++) {
pthread_join (thrd[i]、NULL);
}
返回0;
}
//================================================================
//=========== 样本输出-缺省堆栈大小为8MB
//================================================================
root@k2hk) EVM:~/testing# ulimit -a
内核文件大小 (块、-c) 0
数据段大小 (KB、-d)不受限制
调度优先级 (-e) 0
文件大小 (块、-f)不受限制
待处理信号 (-I) 60560
最大锁定存储器 (KB、-l) 64
最大存储器大小 (KB、-m)不受限制
打开文件 (-n) 1024
管道大小 (512字节、-p) 8.
POSIX 消息队列 (字节、-q) 819200
实时优先级 (-r) 0
栈大小 (KB、-s) 8192
CPU 时间 (秒、-t)不受限制
最大用户进程 数(-u) 60560
虚拟内存 (KB、-v)不受限制
文件锁定 (-x)不受限制
root@k2hk EVM:~/testing#./threadTest
尝试创建1000个线程
线程堆栈大小= 8388608字节
pthread_create()创建线程381失败,错误11
错误代码为:资源暂时不可用
正在连接380个线程...
//========================================================================================
//=========== 采样输出-堆叠大小更改为16K
//========================================================================================
root@k2hk EVM:~μ A/测试# ulimit -s 16.
root@k2hk EVM:~/testing#./threadTest
尝试创建1000个线程
线程堆栈大小= 16384字节
pthread_create()创建线程510失败,错误11
错误代码为:资源暂时不可用
正在连接509个线程...
//========================================
//==内存信息===
//========================================
root@k2hk EVM:~/testing# grep MemTotal /proc/meminfo
总内存: 7784860 KB
root@k2hk) EVM:~/testing# free -m
可用 的可用空 闲共享 缓冲区/高速缓存总数
MEM: 7602 34 7502 17 65 7506
交换: 0 0 0